暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

java项目整合mongodb

开源拾椹 2021-07-16
1856


mongodb是世界上最像关系型数据库的非关系型数据库,操作灵活方便,mongodb在4.2以后支持了ACID事务,水平扩展方便,客户端API简单,支持二级索引查询,是一款非常优秀的数据库。morphia是谷歌开源的mongodb的java客户端。morphia从另外一种意义上来说是mongodb的orm框架。


morphia的github地址 :https://github.com/MorphiaOrg/morphia
morphia官网:https://morphia.dev/1.4/guides/
mongodb安装:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

pom依赖

            <dependency>
    <groupId>dev.morphia.morphia</groupId>
    <artifactId>core</artifactId>
    <version>1.5.5</version>
    </dependency>
    <dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.11.0</version>
    </dependency>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    </dependency>
    复制

    morphia的实现方式也是类似于java的ORM框架一样做到实体类-表格之间的映射。基于注解实现标注。实体类定义如下

          @Entity("person")
      @Getter
      @Setter
      @ToString
      static class Person implements Serializable {
      @Id
      String id;
      @Property
      String name;
      @Property
      LocalDateTime birth;
      @Property
      Integer age;
      }
      复制

      @Id是标明的属性是主键,@Entity标明的是对应表格的名称,@Property标明的是对应的表格字段的信息。

      morphia配置mongodb连接信息

            Datastore datastore = null;
        MongoClient client = null;
        Morphia morphia = null;


        @Before
        public void before() {
        client = new MongoClient("192.168.74.135");
        morphia = new Morphia();
        datastore = new DatastoreImpl(morphia, client, "nonStand");
        }
        复制

        morphia保存数据

              @Test
          public void testSave() {
          Person person = new Person();
          person.setId(Worker.id());
          person.setAge(19);
          person.setBirth(LocalDateTime.now());
          person.setName("jack ma");


          Key<Person> personKey = datastore.save(person);
          System.err.println(personKey);
          }
          复制

          结果打印(保存成功)

            Key{collection=person, id=633552187364478976}
            复制

            morphia数据查询依赖于中间对象query,query对象里面可以设置检索的条件。

                  @Test
              public void testQuery() {
              Query<Person> query = datastore.createQuery(Person.class);
              query.filter("age >= ", 10);
              MorphiaCursor<Person> morphiaCursor = query.find();


              morphiaCursor.forEachRemaining(System.err::println);
              }
              复制

              结果打印(查询成功)

                MorphiaAPISimpleTest.Person(id=632502582027784192, name=jack ma, birth=2019-10-12T16:59:26.893, age=19)
                MorphiaAPISimpleTest.Person(id=632506113141149696, name=yviodPFunB, birth=2019-10-12T17:13:28.778, age=31)
                复制

                morphia数据删除,跟检索原理大概一致,需要设置删除对象的过滤条件。

                   @Test
                  public void testDelete() {
                  Person person = new Person();
                  person.setId("632502582027784192");
                  WriteResult writeResult = datastore.delete(person);
                  System.err.println(writeResult);
                  }
                  复制

                  结果打印(删除成功)

                    WriteResult{n=1, updateOfExisting=false, upsertedId=null}
                    复制

                    morphia修改数据,跟查询原理大致一致,也需要设置一些过滤条件。

                          @Test
                      public void testUpdate(){
                      // 构建修改的doc
                      Document updateDoc = new Document();
                      updateDoc.append("$set", new Document().append("item", "java canvas"));
                      // 过去查询的doc
                      Document searchQueryDoc = new Document().append("item", "canvas");
                      UpdateResult updateResult = collection.updateOne(searchQueryDoc, updateDoc);
                      System.err.println(updateResult);
                      }
                      复制

                      上面代码需要注意的是$set,$set可以理解为mongodb要更新数据的指定操作符,所以需要加入$set。并无其他意义。我们需要过滤的条件是item为canvas的数据的item全部更新为 "java canvas",打印结果如下。

                        AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null}
                        复制


                        文章转载自开源拾椹,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论