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的更多相关文章

  1. Mongodb 的ORM框架 Morphia之注解

    @Entity("bands") public class Band { @Id ObjectId id; String name; String genre; @Referenc ...

  2. Mongodb 的ORM框架 Morphia 注解 之 @Reference

    public class BlogEntry { private String title; private Date publishDate; private String body; privat ...

  3. Morphia - mongodb之ORM框架

    一.简介 二.注解 1.@Entity 2.@Id3.@Indexed4.@Embedded5.@Transient和@Property6.@Reference 三.示例 四.参考资料 Morphia ...

  4. (动态模型类,我的独创)Django的原生ORM框架如何支持MongoDB,同时应对客户使用时随时变动字段

    1.背景知识 需要开发一个系统,处理大量EXCEL表格信息,各种类别.表格标题多变,因此使用不需要预先设计数据表结构的MongoDB,即NoSQL.一是字段不固定,二是同名字段可以存储不同的字段类型. ...

  5. 各种ORM框架对比(理论篇,欢迎来观摩)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  6. 轻量级ORM框架 Bankinate

    [前言] 前面讲过ORM的前世今生,对ORM框架不了解的朋友可以参考博文:https://www.cnblogs.com/7tiny/p/9551754.html 今天,我们主要通过设计一款轻量级的O ...

  7. 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  8. mongoose-面向对象操作mongodb的Nodejs框架

    介绍 无论是mysql还是mongodb,传统的与数据库交互的方式都是按照他们提供的API来写代码.它们提供的API往往不是很容易理解,而且难以记忆,如果传错了参数,写错一个符号都要查文档. ORM( ...

  9. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

随机推荐

  1. apue——读目录操作

    头文件: #define _POSIX_C_SOURCE 200809L #include <sys/types.h> #include <sys/stat.h> #inclu ...

  2. kubernetes之监控Prometheus实战--prometheus介绍--获取监控(一)

    Prometheus介绍 Prometheus是一个最初在SoundCloud上构建的开源监控系统 .它现在是一个独立的开源项目,为了强调这一点,并说明项目的治理结构,Prometheus 于2016 ...

  3. .NET面试题系列(十八)常用关键字

    序言 const和readonly关键字 private protected public internal的区别 out  ref out适合用在需要retrun多个返回值的地方,而ref则用在需要 ...

  4. Thunk

    Thunk https://en.wikipedia.org/wiki/Thunk In computer programming, a thunk is a subroutine used to i ...

  5. Coursera, Big Data 4, Machine Learning With Big Data (week 3/4/5)

    week 3 Classification KNN :基本思想是 input value 类似,就可能是同一类的 Decision Tree Naive Bayes Week 4 Evaluating ...

  6. linux --xampp 配置多个网站

    我们想要在本地安装两个测试域名,www.abc.tld, www.xyz.tld, 分别指向到 htdoc 目录下的 abc.tld 和 xyz.tld 文件夹下.tld 是顶级域名 the top ...

  7. Ansible-----include

    什么是include 在ansible中,我们可以通过include,在一个playbook中包含另一个文件,以便实现代码的重复利用. include_tasks模块 include_tasks模块用 ...

  8. Python爬虫案例-获取最新的中国行政区域划分

    源网页:中国统计局标准 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/ 打开网页后可以分析出行政区域划分共分为5层 根据传入参数,生成网页 ...

  9. $(document).ready和window.onload的区别

    $(document).ready比window.onload先执行.window.onload只执行一次. $(document).ready和window.onload都是在都是在页面加载完执行的 ...

  10. 强大的Resharp插件(转)

    使用VS有段时间了,一直深深的折服于其强大的功能.之前一直听说有Resharp这个工具,小猪一直也没有太在意.直到今天…… 下载安装: http://www.jetbrains.com/resharp ...