• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
目录,不存在的…

5.1、morphia

2018-01-26 19:32:23
总字数 783
预计阅读时间 3 分钟

Morphia 是一个轻量级的类型安全的 Java 类库,用来将在 MongoDB 和 Java 对象之间进行映射
对MongoDB的API进行了一些封装 , 类似hibernate

maven仓库jar包


由于使用MongoDB的原生jar包无法对实体类执行映射操作
如果有一个实体类的对象 , 比如要手工转化为Document对象才可以保存到数据库
同样 , 查询获得的结果也是Document对象 , 而不是实体类对象 , 使用相对不便

  1. 创建实体类 , 并添加注解

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Entity(value="t_person")
    public class Person {
    @Id
    private long id;
    private String name;
    private String address;
    private int age;
    //getter与setter方法...
    }

    可以在@Entry注解的value属性指定该实体类对应的集合名称
    如果不指定 , 就默认为这个类的名称

  2. 使用junit进行单元测试
    首先编写测试类的基类 , 需要进行连接的初始化和执行完毕后的连接关闭

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class UnitTestBase {
    protected Mongo mongo;
    protected Morphia morphia;
    protected Datastore ds;

    private static final String HOST = "127.0.0.1";
    private static final int PORT = 27017;
    private static final String DB_NAME = "demo";
    @Before
    public void init() {
    mongo = new MongoClient(HOST, PORT);
    morphia = new Morphia();
    ds = morphia.createDatastore(mongo, DB_NAME);
    }

    @After
    public void desotry() {
    mongo.close();
    }
    }

    如果需要用户认证 , 直接对MongoClientt对象执行操作即可
    方式参考前一篇笔记

  3. 增删改查操作
    通常的增删改查方法如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    public class MongodbTest extends UnitTestBase {
    @Test
    public void testSave(){
    Person person = new Person(1002, "Molly", "excuse me?", 20);
    ds.save(person);
    // 注意:在执行save操作的时候, 如果对应的集合不存在, 则自动创建该集合
    }

    @Test
    public void testDelete() {
    Person person = new Person();
    person.setId(1002);
    //删除操作是根据主键来删除, 实体类中已经用@Id设定了主键
    ds.delete(person);
    }

    @Test
    public void testUpdate() {
    Person person = new Person();
    person.setId(1002);
    UpdateOperations<Person> ops = ds.createUpdateOperations(Person.class);
    ops.set("name", "Polly");
    ops.set("address", "000");
    //第一个参数是过滤条件, 第二个参数是需要修改的属性和值的集合
    ds.update(person, ops);
    /*
    * update方法是修改所有符合条件的数据
    * 如果只需要修改符合条件的第一条数据, 可以使用
    * ds.updateFirst(query, ops)
    */
    }

    @Test
    public void testQuery(){
    Query<Person> result = ds.find(Person.class, "name", "Molly");
    //第二个与第三个参数是查询的条件
    for(Person per : result) {
    System.out.println(per);
    }
    /*
    * 在查询当中, 如果集合中的文档有额外的字段, 会被忽略
    * 实体类中有而文档中没有的字段
    * 查询结果的对象中对应属性就是null或者基本数据类型的默认值
    */
    }
    }

    以上的增删改查方法都有多种重载形式 , 在这里就不一一举例了
    具体的可以查看morphia源代码


上述方式是使用注解添加类的映射
如果不用注解 , 也可以手动把某些类加载到morphia当中

1
2
3
4
//将若干个类加入到映射
morphia.map(Person.class);
//将某个包中的所有类添加到映射
morphia.mapPackage("com.entry");
  • 数据库
  • MongoDB
  • MongoDB

扫一扫,分享到微信

5.2、关联映射
5.0、Java操作MongoDB数据库 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆