5,使用Java同步方式操作Document对象进行CRUD实例

12 篇文章 0 订阅

1,创建maven项目,并引入以下依赖:

<!--测试包-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>compile</scope>
</dependency>

<!--mongodb 同步驱动包-->
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.3.0</version>
</dependency>

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.3.9</version>
</dependency>

2,启动MongoDB服务实例

mongod.exe --dbpath D:\UserData\mongodb --auth

3,获取MongoClient对象

import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;

import java.util.Arrays;

/**
 * @Package: com.lcj.mongodb.sync
 * @ClassName: MongoUtil
 * @Author: Administrator
 * @CreateTime: 2021/7/15 15:10
 * @Description:
 */
public class MongoUtil {

    /**
     * 通过指定host和port获得连接
     * @return MongoClient
     */
    public static MongoClient getInstance1(){
        // 添加认证
        MongoCredential credential = MongoCredential.createScramSha256Credential("admin", "admin", "123456".toCharArray());
        return MongoClients.create(
                MongoClientSettings.builder()
                        .applyToClusterSettings(builder ->
                                builder.hosts(Arrays.asList(new ServerAddress("127.0.0.1", 27017))))
                        .credential(credential)
                        .build());
    }

    /**
     * 通过连接字符串
     * @return MongoClient
     */
    public static MongoClient getInstance2(){
        return MongoClients.create("mongodb://admin:123456@127.0.0.1:27017/?authSource=admin&authMechanism=SCRAM-SHA-256");
    }
}

4,使用Document对象进行CRUD操作

import cn.hutool.core.lang.Console;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.InsertManyResult;
import com.mongodb.client.result.InsertOneResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * @Package: com.lcj.mongodb.sync
 * @ClassName: UseDocumentCRUDTest
 * @Author: Administrator
 * @CreateTime: 2021/7/16 8:26
 * @Description:
 */
public class UseDocumentCRUDTest {
    // 声明连接对象
    private static MongoClient client;
    // 声明集合变量
    private static MongoCollection<Document> book;

    // 所有方法执行前,创建集合对象
    @BeforeClass
    public static void setUp() {
        client = MongoUtil.getInstance1();
        // 访问指定的数据库,如果数据库不存在,自动创建
        MongoDatabase mongoDatabase = client.getDatabase("test");
        // 访问指定的集合,如果集合不存在,在第一次存数据是创建
        book = mongoDatabase.getCollection("book");
    }

    // 所有方法执行完后,释放资源
    @AfterClass
    public static void close() {
        book.drop();
        client.close();
    }

    /**
     * 插入单个文档
     */
    @Test
    public void insertOne() {
        // 创建如下文档
        /*
          {
           "name" : "MongoDB",
           "type" : "type",
           "count" : 1,
           "versions": [ "v3.2", "v3.0", "v2.6" ],
           "info" : { x : 203, y : 102 }
          }
        */
        Document document = new Document("name", "MongoDB")
                .append("type", "type")
                .append("count", 1)
                .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6"))
                .append("info", new Document("x", 203).append("y", 102));
        // 插入单个文档,如果未指定_id字段,会自动添加
        InsertOneResult insertOneResult = book.insertOne(document);
        if (insertOneResult.wasAcknowledged()) {
            Console.log("插入数据成功,文档id:{}", insertOneResult.getInsertedId().toString());
        } else {
            System.out.println("插入文档失败");
        }
    }


    /**
     * 插入多个文档
     */
    @Test
    public void insertMany() {
        List<Document> documents = new ArrayList<>(100);
        for (int i = 1; i <= 100; i++) {
            documents.add(new Document("i", i));
        }
        // 插入文档,如果未指定_id字段,会自动添加
        InsertManyResult insertManyResult = book.insertMany(documents);
        if (insertManyResult.wasAcknowledged()) {
            Console.log("插入数据成功,文档id:{}", insertManyResult.getInsertedIds());
        } else {
            System.out.println("插入文档失败");
        }
    }


    /**
     * 查询集合的第一个文档
     */
    @Test
    public void findFirst() {
        Document first = book.find().first();
        if (Objects.nonNull(first)) {
            System.out.println(first.toJson());
        }
    }

    /**
     * 查询集合的所有文档
     */
    @Test
    public void findAll() {
        // 返回一个游标
        try (MongoCursor<Document> iterator = book.find().iterator()) {  // 防止游标泄露
            // 遍历数据
            while (iterator.hasNext()) {
                Document next = iterator.next();
                System.out.println(next.toJson());
            }
        }
    }


    /**
     * 查询item字段,值为postcard的第一个文档
     */
    @Test
    public void findFirstByFilter() {
        Document first = book.find(Filters.eq("item", "postcard")).first();
        if (Objects.nonNull(first)) {
            System.out.println(first.toJson());
        }
    }


    /**
     * 查询i字段,值超过50的所有文档
     */
    @Test
    public void findAllByFilterGt() {
        // 返回一个游标
        try (MongoCursor<Document> iterator = book.find(Filters.gt("i", 50)).iterator()) {  // 防止游标泄露
            // 遍历数据
            while (iterator.hasNext()) {
                Document next = iterator.next();
                System.out.println(next.toJson());
            }
        }
    }


    /**
     * 查询i字段,值在60到80之间
     */
    @Test
    public void findAllByFilterAnd() {
        // 返回一个游标
        try (MongoCursor<Document> iterator = book.find(Filters.and(Filters.gte("i", 60), Filters.lte("i", 80))).iterator()) {  // 防止游标泄露
            // 遍历数据
            while (iterator.hasNext()) {
                Document next = iterator.next();
                System.out.println(next.toJson());
            }
        }
    }


    // 更新单个文档
    @Test
    public void updateOne() {
        UpdateResult updateResult = book.updateOne(Filters.eq("i", 50), Updates.set("i", 500));
    }

    /**
     * 更新字段i小于50的,将匹配的值加上100
     */
    @Test
    public void updateMany() {
        UpdateResult updateResult = book.updateMany(Filters.lt("i", 50), Updates.inc("i", 100));
        Console.log("更新数量:{}", updateResult.getModifiedCount());
    }


    /**
     * 删除单个文档
     */
    @Test
    public void deleteOne() {
        DeleteResult deleteResult = book.deleteOne(Filters.eq("i", 50));
        Console.log("删除数量: {}", deleteResult.getDeletedCount());
    }


    /**
     * 删除多个文档
     */
    @Test
    public void deleteMany() {
        DeleteResult deleteResult = book.deleteMany(Filters.eq("name", "MongoDB"));
        Console.log("删除数量: {}", deleteResult.getDeletedCount());
    }

}

5,单测结果

image-20210716085918796

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM(Spring + SpringMVC + MyBatis)是一种常用的Java框架,它提供了灵活、高效的方式进行学生信息的增删改查(CRUD操作。 首先,通过Spring框架可以方便地管理和注入依赖关系,将各个模块之间的耦合度降到最低。对于学生信息的CRUD操作,我们可以通过Spring管理的Service组件来实现业务逻辑的处理,例如增加学生信息、删除学生信息、修改学生信息等等。同时,Spring框架还支持声明式事务管理,可以保证对学生信息的CRUD操作的一致性和事务的原子性。 其次,SpringMVC框架可以实现学生信息的各个请求入口的调度和处理。我们可以通过SpringMVC配置URL映射,将对学生信息CRUD操作的请求转发到相应的Controller中进行处理。Controller可以接收请求参数,调用Service层的业务方法,最终将结果返回给前端页面或接口。 最后,MyBatis作为ORM(对象关系映射)框架,可以方便地将学生信息映射到数据库中。我们可以使用MyBatis的Mapper接口和XML配置文件来定义学生信息的CRUD操作,调用对应的SQL语句进行数据库操作。MyBatis还提供了一系列的数据访问方法,如插入学生信息到数据库、删除学生信息、更新学生信息、查询学生信息等等。 通过整合SSM框架,我们可以非常方便地实现学生信息的CRUD操作。其中,Spring负责依赖管理和事务管理,SpringMVC负责请求的调度和处理,MyBatis负责将学生信息与数据库进行映射和操作。这样的架构使得学生信息的管理和操作更加高效、灵活,并且易于扩展和维护。总之,SSM框架对于学生信息的CRUD操作提供了一种简单、快速、可靠的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值