SpringBoot整合MongoDB

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB是一个基于分布式文件存储 [1]  的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

特点

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

mongodb集群参考

*面向集合存储,易存储对象类型的数据。

*模式自由。

*支持动态查询

*支持完全索引,包含内部对象。

*支持查询。

*支持复制和故障恢复。

*使用高效的二进制数据存储,包括大型对象(如视频等)。

*自动处理碎片,以支持云计算层次的扩展性。

*支持 GolangRUBYPYTHONJAVAC++PHPC#等多种语言。

*文件存储格式为BSON(一种JSON的扩展)。

*可通过网络访问。

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。 [2] 

MongoDB服务端可运行在LinuxWindows或mac os x平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。

新建springboot项目,并导入相关依赖

1.  <dependency>
2.      <groupId>org.springframework.boot</groupId>
3.      <artifactId>spring-boot-starter-data-mongodb</artifactId>
4.  </dependency>

yml配置文件

1. spring:
2.   data:
3.     mongodb:
4.       uri: mongodb://192.168.198.129:27017/baizhi
5. 
6. 
7. #如果存在密码,使用下面这个(开启用户名密码校验)
8. 
9. #host: 192.168.198.129:27017
10. #  port: 27017
11. #  database: baizhi
12. #  username: root
13. #  password: 123456
14. 
15. server:
16.   port: 7878

uri参数解释 : 协议://mongodb地址/库名

新建User实体类,此处采用Lombok简化开发

1. @Data
2. @AllArgsConstructor
3. @NoArgsConstructor
4. @Document("users")//这个类的实例就代表mongo中一条文档
5. public class User {
6. @Id//用这个类的id映射文档的_id
7. private Integer id;
8. @Field("username")
9. private String name;
10. @Field
11. private Double salary;
12. @Field
13. private Date birthday;
14. }

创建集合

1. //创建集合
2. @Test
3. void contextLoads() {
4. //判断这个集合在数据库中是否存在
5. boolean product = mongoTemplate.collectionExists("product");
6. if (!product) {
7. //创建集合
8.             mongoTemplate.createCollection("product");
9.         }
10.     }

删除集合

1. //删除集合
2. @Test
3. void testDropCollection(){
4. //集合不存在,删除也不会报错
5.         mongoTemplate.dropCollection("product");
6.     }

添加文档

1. //文档操作 添加
2. @Test
3. void testadd(){
4. User user = new User(5, "王献之", 2100.1, new Date());
5. //save方法在主键存在时是更新操作
6. //        mongoTemplate.save(user);
7. //insert方法主键存在时,会报错,主键冲突
8.         mongoTemplate.insert(user);
9.     }

添加文档二

1. //文档操作  批量增加
2. @Test
3. void testinsertMany(){
4.         List<User> users = Arrays.asList(new User(3, "干将莫邪3", 2300.1, new Date()), new User(4, "干将莫邪4", 2300.1, new Date()));
5.         mongoTemplate.insert(users,User.class);//参数一:批量数据的集合,参数二:这个集合的类型
6.     }

查询所有文档

1. //文档操作   查询
2. @Test
3. void testFind(){
4. //查询所有
5.         List<User> all = mongoTemplate.findAll(User.class);
6.         all.forEach(System.out::println);
7.     }

主键查询

1. @Test
2. void testFindById(){
3. User byId = mongoTemplate.findById(1, User.class);
4.         System.out.println("byId = " + byId);
5.     }

文档操作   所有复杂查询

1. //文档操作  条件查询
2. @Test
3. void testFind2(){
4. //查询全部  参数一:查询条件  参数二:返回的类型
5.         List<User> users = mongoTemplate.find(new Query(), User.class);
6.         users.forEach(System.out::println);
7. 
8. //等值查询
9. Query query = Query.query(Criteria.where("name").is("干将莫邪"));
10.         List<User> users = mongoTemplate.find(query, User.class);
11.         users.forEach(System.out::println);
12. 
13. // > < <= >= 查询
14.         List<User> users = mongoTemplate.find(Query.query(Criteria.where("salary").gt(2600.1)), User.class);
15.         users.forEach(System.out::println);
16. 
17. // and 查询
18.         List<User> users = mongoTemplate.find(Query.query(Criteria.where("name").is("干将莫邪").and("salary").is(2500.1)), User.class);
19.         users.forEach(System.out::println);
20. 
21. //or 查询
22. Criteria criteria = new Criteria();
23.         criteria.orOperator(
24.                 Criteria.where("name").is("干将莫邪"),
25.                 Criteria.where("name").is("干将莫邪3")
26. //                Criteria.where("salary").lte(2600.1)
27.         );
28.         List<User> users = mongoTemplate.find(Query.query(criteria), User.class);
29.         users.forEach(System.out::println);
30. 
31. //and or 查询
32.         List<User> users = mongoTemplate.find(Query.query(Criteria.where("salary").is(2600.1).orOperator(Criteria.where("name").is("干将莫邪2"))), User.class);
33.         users.forEach(System.out::println);
34. 
35. //排序查询
36. Query querySort = new Query();
37.         querySort.with(Sort.by(Sort.Order.asc("salary")));
38.         List<User> users = mongoTemplate.find(querySort, User.class);
39.         users.forEach(System.out::println);
40. 
41. //分页查询
42. Query querySort = new Query();
43.         querySort.with(Sort.by(Sort.Order.asc("salary")))
44.                 .skip(1)
45.                 .limit(2);
46.         List<User> users = mongoTemplate.find(querySort, User.class);
47.         users.forEach(System.out::println);
48.     }
49. 
50. //查询总条数
51. long count = mongoTemplate.count(Query.query(Criteria.where("name").is("干将莫邪")), User.class);
52.         System.out.println("count = " + count);
53. 
54. //去重查询
55.         List<String> name = mongoTemplate.findDistinct(new Query(), "name", User.class, String.class);
56.         name.forEach(System.out::println);
57.     }

更新操作

1. //更新操作
2. @Test
3. void testUpdate(){
4. //更新符合条件的第一条数据
5. //        Update update = new Update();
6. //        update.set("salary",4000.1);
7. //        mongoTemplate.updateFirst(Query.query(Criteria.where("name").is("干将莫邪")), update,User.class);
8. 
9. //多条更新
10. //        mongoTemplate.updateMulti(Query.query(Criteria.where("name").is("干将莫邪"),update,User.class);
11. 
12. 
13. 
14. //插入更新 没有符合条件数据的时候插入数据
15. Update update = new Update();
16.         update.setOnInsert("id",10);
17.         update.set("salary",4000.1);
18. UpdateResult salary = mongoTemplate.upsert(Query.query(Criteria.where("salary").is(10000.1)), update, User.class);
19. 
20. //获取修改的数据
21.         salary.getModifiedCount();
22. //获取本次匹配的记录数
23.         salary.getMatchedCount();
24. //如果没有匹配的数据,获取新增的ID
25.         salary.getUpsertedId();
26. 
27.     }

删除操作

1. 
2. //删除操作
3. @Test
4. void testDelete(){
5. //删除所有
6. //        mongoTemplate.remove(new Query(), User.class);
7. //条件删除
8.         mongoTemplate.remove(Query.query(Criteria.where("name").is("干将莫邪3")),User.class);
9.     }
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
1月前
|
NoSQL Java MongoDB
Springboot WebFlux项目结合mongodb进行crud
这篇文章介绍了如何使用Spring Boot WebFlux框架结合MongoDB进行基本的CRUD(创建、读取、更新、删除)操作,包括项目设置、实体类和Repository的创建、控制器的实现以及配置文件的编写。
46 0
Springboot WebFlux项目结合mongodb进行crud
|
3月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些高级用法
本文探讨了在Spring Boot项目中使用MongoDB的多种方式及其高级用法。MongoDB作为一种NoSQL数据库,在某些场景下相较于SQL数据库有着独特的优势。文中详细介绍了在Spring Boot中使用MongoDB的三种主要方式:直接使用官方SDK、使用Spring JPA以及使用MongoTemplate,并对比分析了它们之间的差异。此外,文章深入讲解了Spring Data MongoDB提供的各种注解(如@Id, @Document, @Field等)以简化操作流程,并探讨了MongoTemplate监听器的应用,如设置主键值、记录日志等。
168 2
|
1月前
|
SQL NoSQL Java
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
本文介绍了如何在Spring Boot中操作NoSQL数据库MongoDB,包括在MongoDB官网创建服务器、配置Spring Boot项目、创建实体类、仓库类、服务类和控制器类,以及如何进行测试。
19 1
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
|
3月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些骚操作用法
MongoDB作为一种NoSQL数据库,在不需要传统SQL数据库的表格结构的情况下,提供了灵活的数据存储方案。在Spring Boot中可以通过官方SDK、Spring JPA或MongoTemplate等方式集成MongoDB。文章重点介绍了Spring Data MongoDB提供的注解功能,例如`@Id`、`@Document`和`@Field`等,这些注解简化了Java对象到MongoDB文档的映射。此外,文中还讨论了MongoTemplate监听器的使用,包括设置主键值和日志记录等高级特性。
231 0
SpringBoot中MongoDB的那些骚操作用法
|
3月前
|
NoSQL Java MongoDB
MongoDB 读写分离——SpringBoot读写分离
MongoDB 读写分离——SpringBoot读写分离
123 0
|
4月前
|
NoSQL Java MongoDB
Spring Boot与MongoDB的集成应用
Spring Boot与MongoDB的集成应用
|
4月前
|
存储 NoSQL Java
使用Spring Boot和MongoDB构建NoSQL应用
使用Spring Boot和MongoDB构建NoSQL应用
|
4月前
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
5月前
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库
|
5月前
|
NoSQL Java 关系型数据库
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
69 0