MongoDB的ORM框架——Morphia
1.引入pom
<dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<version>1.3.2</version>
</dependency>
2.创建Entity类
@Entity()
public class Commodity { @Id
private ObjectId id; @Indexed
private String cmdtyCode; private String cmdtyName; @Embedded
private List<Attribute> attributes; @Reference
private CommodityInfo commodityInfo; public ObjectId getId() {
return id;
} public void setId(ObjectId id) {
this.id = id;
} public String getCmdtyCode() {
return cmdtyCode;
} public void setCmdtyCode(String cmdtyCode) {
this.cmdtyCode = cmdtyCode;
} public String getCmdtyName() {
return cmdtyName;
} public void setCmdtyName(String cmdtyName) {
this.cmdtyName = cmdtyName;
} public List<Attribute> getAttributes() {
return attributes;
} public void setAttributes(List<Attribute> attributes) {
this.attributes = attributes;
} public CommodityInfo getCommodityInfo() {
return commodityInfo;
} public void setCommodityInfo(CommodityInfo commodityInfo) {
this.commodityInfo = commodityInfo;
}
}
@Entity()
public class CommodityInfo { @Id
private ObjectId id; private String color; private String style; public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public String getStyle() {
return style;
} public void setStyle(String style) {
this.style = style;
} public ObjectId getId() {
return id;
} public void setId(ObjectId id) {
this.id = id;
}
}
public class Attribute { private String key; private String value; public String getKey() {
return key;
} public void setKey(String key) {
this.key = key;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
}
}
注意: @Entity:声明该类作为文档将持久保存。在默认情况下,Morphia使用类名称来命名集合
@Embedded:成员对象将被视为嵌入的(embedded)。它会显示为集合中父文档的子集
@Reference:说明对象是对另外一个集合中的文档的引用
@Indexed:表明为此属性增加索引
3.通过Datastore使用
a.创建Datastore对象
Morphia morphia = new Morphia();
morphia.mapPackage("com.wode.entity"); // entity所在包路径
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));
Datastore datastore = morphia.createDatastore(mongoClient, "morphia");
b.添加
//先添加@Reference引用的对象
CommodityInfo cmdtyInfo = new CommodityInfo();
cmdtyInfo.setColor("silver");
cmdtyInfo.setStyle("12");
datastore.save(cmdtyInfo); //再添加商品
Commodity cmdty = new Commodity();
cmdty.setCommodityInfo(cmdtyInfo);
cmdty.setCmdtyCode("Ag");
cmdty.setCmdtyName("银"); List<Attribute> attributes = new ArrayList<>();
Attribute attribute = new Attribute();
attribute.setKey("品质");
attribute.setValue("优");
attributes.add(attribute);
cmdty.setAttributes(attributes); datastore.save(cmdty);
c.修改
Query<Commodity> query = datastore.createQuery(Commodity.class).filter("cmdtyCode = ", "Ag");
UpdateOperations<Commodity> updateOperations = datastore.createUpdateOperations(Commodity.class).set("cmdtyName", "银00").set("cmdtyCode", "Ag00");
UpdateResults result = datastore.update(query, updateOperations);
System.out.println(result.getUpdatedCount());
d.删除
Query<Commodity> query = datastore.createQuery(Commodity.class).filter("cmdtyCode = ", "Ag00");
datastore.delete(query);
e.查询
List<String> list = new ArrayList<>();
list.add("Ag11");
list.add("Ag12");
List<Commodity> resultList = datastore.createQuery(Commodity.class).filter("cmdtyCode in ", list).order("-cmdtyCode").asList();
for(Commodity cmdty : resultList){
System.out.println("cmdtyCode[" + cmdty.getCmdtyCode() + "], cmdtyName[" + cmdty.getCmdtyName() + "]");
}
注意:分页查询可用:query.offset( (pageIndex - 1) * pageSize ).limit( pageSize )
也可:query.asList( new FindOptions().skip( (pageIndex - 1) * pageSize ).limit( pageSize ) )
4.通过BasicDAO使用
a.创建BasicDAO的实现类
public class CmdtyDAO extends BasicDAO<Commodity, ObjectId> { public CmdtyDAO(MongoClient mongoClient, Morphia morphia, String dbName){
super(mongoClient, morphia, dbName);
} }
b.初始化DAO
Morphia morphia = new Morphia();
morphia.mapPackage("com.wode.entity"); // entity所在包路径
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));
CmdtyDAO dao = new CmdtyDAO(mongoClient, morphia, "morphia");
c.使用基本同Datastore
//查单个
Query<Commodity> query = dao.createQuery().filter("cmdtyCode = ", "Ag11");
Commodity cmdty = dao.findOne(query);
System.out.println("cmdtyCode[" + cmdty.getCmdtyCode() + "], cmdtyName[" + cmdty.getCmdtyName() + "]"); //查多个
List<String> list = new ArrayList<>();
list.add("Ag11");
list.add("Ag12");
query = dao.createQuery().filter("cmdtyCode in ", list).order("-cmdtyCode");
FindOptions options = new FindOptions();
options.skip(1).limit(1); //分页
List<Commodity> resultList = dao.find(query).asList(options);
for(Commodity tempCmdty : resultList){
System.out.println("cmdtyCode[" + tempCmdty.getCmdtyCode() + "], cmdtyName[" + tempCmdty.getCmdtyName() + "]");
}
5.复合查询
a.且(and)和或(or)复合查询
query.or(
query.criteria("cmdtyCode").equal("Ag0"),
query.and(
query.criteria("cmdtyName").in(name),
query.criteria("num").in(num)
),
query.criteria("cmdtyCode").equal("Ag6")
);
b.两字段比较——where
query.or(
new WhereCriteria("this.num >= this.num2"),
new WhereCriteria("this.num == 3"),
query.criteria("num").equal(1)
);
MongoDB的ORM框架——Morphia的更多相关文章
- Mongodb 的ORM框架 Morphia之注解
@Entity("bands") public class Band { @Id ObjectId id; String name; String genre; @Referenc ...
- Mongodb 的ORM框架 Morphia 注解 之 @Reference
public class BlogEntry { private String title; private Date publishDate; private String body; privat ...
- Morphia - mongodb之ORM框架
一.简介 二.注解 1.@Entity 2.@Id3.@Indexed4.@Embedded5.@Transient和@Property6.@Reference 三.示例 四.参考资料 Morphia ...
- (动态模型类,我的独创)Django的原生ORM框架如何支持MongoDB,同时应对客户使用时随时变动字段
1.背景知识 需要开发一个系统,处理大量EXCEL表格信息,各种类别.表格标题多变,因此使用不需要预先设计数据表结构的MongoDB,即NoSQL.一是字段不固定,二是同名字段可以存储不同的字段类型. ...
- 各种ORM框架对比(理论篇,欢迎来观摩)
各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...
- 轻量级ORM框架 Bankinate
[前言] 前面讲过ORM的前世今生,对ORM框架不了解的朋友可以参考博文:https://www.cnblogs.com/7tiny/p/9551754.html 今天,我们主要通过设计一款轻量级的O ...
- 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)
各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...
- mongoose-面向对象操作mongodb的Nodejs框架
介绍 无论是mysql还是mongodb,传统的与数据库交互的方式都是按照他们提供的API来写代码.它们提供的API往往不是很容易理解,而且难以记忆,如果传错了参数,写错一个符号都要查文档. ORM( ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
随机推荐
- 网站分析平台:是选择百度统计,还是 Google Analytics 呢?
当你拥有个人博客或个人网站时,你一定需要一个平台来分析你的网站状况.之前我在法国只是使用 Google Analytics,后来回国发现这个平台在国内受限制了,于是我找到了百度统计,目前我同时使用这两 ...
- SQL数字型注入代码审计
数字型注入 SQL注入攻击,简称注入攻击,是发生于应用程序与数据库层的安全漏洞. 简而言之,是在输入的字符串之中注入sql指定,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器 ...
- ASP.NET Web API 2 OData v4教程
程序数据库格式标准化的开源数据协议 为了增强各种网页应用程序之间的数据兼容性,微软公司启动了一项旨在推广网页程序数据库格式标准化的开源数据协议(OData)计划,于此同时,他们还发 布了一款适用于OD ...
- C#使用Selenium+PhantomJS抓取数据
本文主要介绍了C#使用Selenium+PhantomJS抓取数据的方法步骤,具有很好的参考价值,下面跟着小编一起来看下吧 手头项目需要抓取一个用js渲染出来的网站中的数据.使用常用的httpclie ...
- java下载远程文件到本地
java下载远程文件到本地(转载:http://www.cnblogs.com/qqzy168/archive/2013/02/28/2936698.html) /** * 下载远程文 ...
- redhat7.4切换yum源为免费源
1.redhat是Linux系统中付费的企业版,虽然安装什么是免费的,但是需要注册. 如果你有注册码,暂请出门左拐(我没有注册码,所以我也不会注册,不用往下看了). Linux系统收费版:RedHat ...
- chrome浏览器开发常用快捷键之基础篇-遁地龙卷风
1.标签页和窗口快捷键 打开新的标签页,并跳转到该标签页 Ctrl + t 重新打开最后关闭的标签页,并跳转到该标签页 Ctrl + Shift + t 跳转到下一个打开的标签页 Ctrl + PgD ...
- python 文本比对
# -*- coding:utf-8 -*- import difflib import sys def readfile(filename): try: fileHandle = open(file ...
- easyui,datagrid表格,行内可编辑
最近用到easyui,需要表格内编辑,但是我同一个页面有多个表格,把官方的代码修改了一下,如下: HTML代码 <table id="dg" class="easy ...
- 【原创】大数据基础之Logstash(5)监控
有两种方式来监控logstash: api ui(xpack) When you run Logstash, it automatically captures runtime metrics tha ...