首先要来说下使用MongoDB的优缺点:
优点
- 对数据库高并发读写
- 对海量数据的高效率存储和访问
- 对数据库的高可扩展和高可选用性
缺点
- 数据库事务一致性
- 数据库的写实时效性和读时时效性需要
- 对复杂的SQL查询 特别是多表关联查询的需要
在项目中的用MongoDB 的两种方式
- MongoRepository 使用更加简单 容易上手
- MongoTemplate 使用更加灵活 可以根据需要自己定义
说明: 我这里是安装了MongoDB在远程服务器上,自己也可以在安装,
具体安装可以查看安装教程,很简单的
第一步: 创建一个新的项目的同时把Mongo相关的jar包引入
<!--MongoDB--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>3.1.15</version> </dependency>
第二步: 在配置文件中配置Mongo连接,如果你的连接不上可以看下说明,自己安装的是否正确
# mongoDB 配置连接 spring.data.mongodb.uri=mongodb://0.0.0.0:27017/test #地址:端口/使用的Mongo库名
第三步: 在项目中使用代码(因为有两种方式,我使用这 MongoRepository 一种来说下)
1.在项目中创建是实体类
@Data @Document("test") public class test { private String id; private String name; private String age; private String sex; }
2.写需要操作的接口
// 该接口继承MongoRepository接口里的方法 public interface TestRepository extends MongoRepository<Test, String> { }
3.在测试类里面测试接口方法,对数据进行操作CRUD
添加操作
@Autowired private TestRepository testRepository; // 添加操作 @Test public void Create() { TestDemo test = new TestDemo(); test.setName("测试"); test.setAge("18"); test.setSex("男"); TestDemo save = testRepository.save(test); System.out.println("添加的是: " + save) ; }
返回结果成功
在MongoDB里面查看结果也是有的
现在是正常添加了一条数据
查询操作
全查
@Test public void List() { List<TestDemo> all = testRepository.findAll(); System.out.println("all" + all); }
查到结果是一样的
通过ID查询
@Test public void findId() { TestDemo byId = testRepository.findById("622d9cd608e83d7533857ce6").get(); System.out.println("byid" + byId); }
在条件查询时还会有特殊的的查询方法,也一并和小伙伴分享一下
如多条件查询
@Test public void findList() { // name = 测试 and age = 18 TestDemo test = new TestDemo(); test.setName("测试"); test.setAge("18"); List<TestDemo> list = testRepository.findAll(Example.of(test)); System.out.println(list); }
如条件模糊查询
@Test public void findLike() { // 模设置糊查询的规则 ExampleMatcher matcher = ExampleMatcher.matching() // 需要匹配的规则 .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) // 设置忽略大小写 .withIgnoreCase(true); TestDemo test = new TestDemo(); test.setName("测"); test.setAge("18"); List<TestDemo> list = testRepository.findAll(Example.of(test,matcher)); System.out.println(list); }
还有条件查询带分页
@Test public void findPage() { // 设置分页的当前页和每页的条数 这里的第一页启始是0 Pageable pageable = PageRequest.of(0,2); // 需要的条件 TestDemo test = new TestDemo(); test.setName("测试"); // 执行方法 findAll 方法里面可以传条件对象和分页对象 Page<TestDemo> all = testRepository.findAll(Example.of(test), pageable); // 查询到数据的总条数 int totalPages = all.getTotalPages(); // 他返回的结果取值 如果用兴趣的下伙伴可以注释掉该行 看该方法返回的结果 List<TestDemo> content = all.getContent(); System.out.println("总数" + totalPages); System.out.println("数据" + content); }
修改
@Test public void update() { TestDemo byId = testRepository.findById("622d9cd608e83d7533857ce6").get(); byId.setName("测试修改为正式"); byId.setAge("20"); // 修改调用的方法和添加是一样的,但它在使用的时候会根据你是否有id值来判断当前是要执行添加操作还是修改操作 TestDemo save = testRepository.save(byId); System.out.println("修改后:" + save); }
删除
// MongoRepository 删除是没有返回的 所以我们可以直接看库 @Test public void del() { testRepository.deleteById("622d9cd608e83d7533857ce6"); }
结果是库里已经删除了
以上就是项目中MongoDB的CURD操作,这些也是最近刚学习的.可能也会有不足的地方,需要继续学习更多
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律