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的资料,但是一直没有时间抽出时间 ...
随机推荐
- VS2017添加引用报错
未能正确加载“ReferenceManagerPackage”包. 此问题可能是因配置更改或安装另一个扩展导致的.可通过查看文件“C:\Users\Administrator\AppData\Roam ...
- python函数的闭包
---恢复内容开始--- python允许有内部函数,也就是说可以在函数内部再定义一个函数,这就会产生变量的访问问题,类似与java的内部类,在java里内部类可以直接访问外部类的成员变量和方法,不管 ...
- 网络结构---从alexnet 到resnet
AlexNet-> vgg vgg 采用更小的卷积核,加深网络深度,但两者的共同点都是卷积层+pooling层最后接上fc 层的结构 Network in network ->google ...
- C++ 常见面试题目
const作用 (1)可以定义const常量,具有不可变性. (2)便于进行类型检查.(而宏不会进行类型检查). (3)可以保护被修饰的东西,防止意外的修改. (4) 可以节省空间. static作用 ...
- Python 变量作用域,闭包和装饰器
from dis import dis b = 6 def f1(a): print(a)print(b) b = 9 f1(3) print(dis(f1)) # dis模块可以查看python函数 ...
- 命令行神器之argparse使用笔记
示例 废话不多说直接给例子: import argparse parser = argparse.ArgumentParser(description='Imbalanced Dataset Exam ...
- Spring Cloud Commons模块
上一篇介绍了 Spring Cloud Context模块 ,本文介绍SpringCloud的另一个基础模块 SpringCloud Commons模块 .只要在项目的pom文件中引入了spring- ...
- pointer-events属性屏蔽鼠标事件(点击穿透上层元素)
应用场景 我们在 HTML 开发时可能会遇到这样的情况:页面上有一些元素使用绝对定位布局,这些元素可能会遮盖住它们位置下方的某个元素的部分或者全部.默认情况下,下方元素被遮挡的部分是不会响应鼠标事件的 ...
- mysql GTID
之前一直通过binlog主从同步,现在发现GTID这种方式,记录一下,具体可参考网上教程.感觉配置使用更为简单方便,不知实际效果如何.
- python学习第32天
# 使用模块操作进程# multiprocessing 一个多元化的进程模块# multiple 多元化 processing 进程 # 涵盖了和进程相关的几乎所有的内容# Process类 帮助你启 ...