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的资料,但是一直没有时间抽出时间 ...
随机推荐
- 2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践 1. 后门原理与实践实验说明及预备知识 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 ( ...
- ES 常用的查询语句介绍
elasticsearch定义了两种查询方式: 一.索引(index).type.document 相关语句 1.列出所有索引的状态 GET /_cat/indices?v health status ...
- 04-oracle中的视图
1.创建视图 介绍: 视图(View)通过SELECT查询语句定义,它是从一个或多个表(或视图)导出的,用来导出视图的表称为基表(Base Table),导出的视图称为虚表.在数据库中,只存储视图的定 ...
- CentOS6和CentOS7
http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso net.ifnames= biosdevname ...
- day19面向对象 , 用户注册和登录
#!/usr/bin/env python# -*- coding:utf-8 -*- # 1.简述编写类和执行类中方法的流程."""编写:class Person: d ...
- JGUI源码:实现简单MVVM单项绑定学习笔记(15)
前面几节都是jquery界面方面的东西,本节研究些数据方面的东西:MVVM. MVVM由三部分组成:Model <=> ViewModel <=> View,当Model数据改 ...
- CentOS 7 yum 安装php5.6
注意--enablerepo=remi --enablerepo=remi-php56这两个参数,指定源的意思 配置yum源 追加CentOS 6.5的epel及remi源. # rpm -Uvh h ...
- spring.http.multipart.maxFileSize提示无效报错问题处理
在SpringBoot项目中,配置spring.http.multipart.maxFileSize用于限定最大文件上传大小. 但是,SpringBoot版本不同,关于这一块的配置也不相同. 1.Sp ...
- 学习笔记-canny边缘检测
Canny边缘检测 声明:阅读本文需要了解线性代数里面的点乘(图像卷积的原理),高等数学里的二元函数的梯度,极大值定义,了解概率论里的二维高斯分布 1.canny边缘检测原理和简介 2.实现步骤 3. ...
- zynq DMA控制器
Zynq-7000系列器件PS端的DMA控制器采用ARM的IP核DMA-330(PL-330)实现. 特点: 1.8个独立的通道,4个可用于PL—PS间数据管理,每个通道有1024Byte的MFIFO ...