阿丹:
之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。
传送门:
MongoDB文档--基本概念_一单成的博客-CSDN博客
MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客
MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客
MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句_一单成的博客-CSDN博客
MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找_一单成的博客-CSDN博客
MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoTemplate完成增删改查_一单成的博客-CSDN博客
使用技术介绍:
概念说明:
spring-data-mongodb
提供 MongoTemplate
与 MongoRepository
两种操作方式MongoRepository
操作简单 缺点是不够灵活MongoTemplate
操作灵活,在项目中可以灵活使用这两种方式
MongoTemplate
MongoTemplate是Spring Data MongoDB项目的一部分,它是一个Spring的扩展,为使用MongoDB数据库的应用程序提供了抽象层。MongoTemplate提供了一个简单而强大的方法来执行各种数据库操作,而无需编写低级别的MongoDB驱动程序代码。
MongoTemplate的主要功能包括:
- 插入和更新文档:MongoTemplate提供了一种方便的方法来插入和更新MongoDB数据库中的文档。
- 查询文档:MongoTemplate提供了多种查询方法,可以使用各种查询参数来检索数据库中的文档,包括查询条件、排序、限制和投影。
- 聚合操作:MongoTemplate支持聚合框架,可以执行复杂的聚合操作,如计数、分组、求和等。
- 索引管理:MongoTemplate可以创建、删除和查询数据库索引。
- 命令和操作:MongoTemplate还支持各种数据库命令和操作,如计算数据库统计信息、执行存储过程等。
使用MongoTemplate可以简化MongoDB数据库操作的开发工作,提供更高的生产力和更好的可维护性。
MongoRepository
MongoRepository是Spring Data MongoDB项目中的另一个抽象层,它是基于MongoTemplate的更高级别的抽象。MongoRepository提供了一个基于注解的接口,用于定义与MongoDB数据库的交互。通过使用MongoRepository,你可以专注于定义数据访问逻辑,而无需编写低级别的数据库操作代码。
MongoRepository的主要功能包括:
- 查询文档:MongoRepository提供了一种方便的方法来查询数据库中的文档。通过使用注解,你可以定义查询条件、排序、限制和投影。
- 聚合操作:MongoRepository支持聚合框架,可以执行复杂的聚合操作,如计数、分组、求和等。
- 分页查询:MongoRepository提供了分页查询功能,可以限制查询结果的数量并获取下一页的结果。
- 自定义查询:如果你需要执行更复杂的查询操作,MongoRepository还提供了自定义查询的方法,可以编写存储过程或使用MongoDB的查询语言执行自定义查询。
使用MongoRepository可以使你的代码更加简洁和可维护,因为它提供了一种声明式的方式来访问MongoDB数据库。通过注解和自动实现的接口,你可以专注于实现业务逻辑,而无需关心底层的数据库操作细节。
spring-boot中使用MongoRepository进行增删改查
阿丹:
使用MongoRepository的好处是和
MyBatis-Plus很像提供了很多经过封装好的方法。很方便(对于简单的增删改查来说)。但是我发现竟然没有!!修改的封装好的用法。
1、引入依赖
核心依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
这个依赖是Spring Boot提供的用于与MongoDB数据库进行交互的starter依赖。它包含了所需的库和依赖项,以便在使用Spring Boot开发应用程序时方便地使用MongoDB。
具体来说,这个依赖提供了以下功能:
- 自动配置:Spring Boot会自动配置与MongoDB数据库的连接,包括创建Mongo客户端、设置连接属性等。
- MongoTemplate:自动配置了MongoTemplate,这是一个用于执行各种数据库操作的核心类。通过使用MongoTemplate,你可以方便地进行文档的插入、更新、查询等操作。
- MongoRepository:自动配置了MongoRepository,这是一个基于注解的接口,用于定义与MongoDB数据库的交互。通过继承MongoRepository,你可以方便地进行查询、聚合操作等。
- 模板化操作:通过使用MongoTemplate和MongoRepository,你可以以模板化的方式执行数据库操作,这使得代码更加简洁、可读性更好。
总之,通过添加这个依赖,可以方便地使用Spring Boot与MongoDB进行集成,而无需手动配置和编写低级别的数据库操作代码。
其他依赖:(如果小伙伴想直接开启一个简单的spring-boot项目可直接拿走)
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies>
2、写入连接MongoDB配置文件采用application.yml文件
spring:data:mongodb:host: 127.0.0.1 #指定MongoDB服务地址port: 27017 #指定端口,默认就为27017database: article#指定使用的数据库(集合)authentication-database: admin # 登录认证的逻辑库名username: #用户名password: #密码
注意:
如果没有设置连接的用户的话可以根据实际情况删除一部分配置文件。
相对于MySQL不一样的是:在MySQL中一个用户可以管理多个数据库,但是MongoDB每个库都要一个独立的管理用户,连接的时候需要输入对应的用户密码。
3、有关实体类的书写(有坑注意!!)
主要注解:
1、@Document,对应MongoDB中的文档,也就是数据库中的最基本的数据单元,由键值对组成,类似于JSON格式,可以存储不同字段,字段的值可以包括其他文档,数组和文档数组。
2、@Id(主键):用来将成员变量的值映射为文档的_id的值,可以看我之前的文档有讲到如何给_id赋值。
3、@Index(索引):索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,能够对数据文档中的数据进行排序。索引可以大大提高文档查询效率。
4、@Field(字段):文档中的字段,类似于MySQL中的列概念。
5、@Aggregation(聚合):聚合主要用于数据处理,例如统计平均值、求和等。
示例:
package com.adn.mongodb.common;import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;/*** 阿丹实体类* */
@Data
@Document(collection = "ExampleDB")
public class Adn {@Id@Field("_id")private Long id;//阿丹主键@Field("name")private String name;//阿丹名称@Field("gender")private String gender;//阿丹性别@Field("specialty")private String specialty;//特长描述
}
示例中的 Document就是集合的名字
注意:
一定要去写@Field("name")这个注解,映射到字段的名字,不然查到的都是空!!!
4、使用MongoRepository来完成简单增删改查
这个都是底层封装好的代码,这里直接上代码!如果有疑惑欢迎评论区讨论一下子
controller控制层
package com.adn.mongodb.controller;import com.adn.mongodb.common.Adn;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** 控制层器* */
@RestController
public class MongodbController {@Autowiredprivate MongodbService mongodbService;/*** 根据id来进行查询* */@GetMapping("/adn/{id}")public Adn adn(@PathVariable String id) {System.out.println(id);return mongodbService.adn(id);}/*** 增加数据插入数据* */@PostMapping("/save")public Adn save(@RequestBody Adn adn) {return mongodbService.save(adn);}// @RequestMapping("/adn")// public String adn() {/*** 修改* */@PutMapping("/update")public Adn update(@RequestBody Adn adn) {return mongodbService.update(adn);}/*** 插入因为没有对应的方法,所以使用单查询+删除+新增来处理* *//*** 删除* */@DeleteMapping("/delete/{id}")public void delete(@PathVariable String id) {mongodbService.delete(id);}}
service层接口
package com.adn.mongodb.service;import com.adn.mongodb.common.Adn;public interface MongodbService {Adn adn(String id);Adn save(Adn adn);Adn update(Adn adn);void delete(String id);
}
service层实现类
package com.adn.mongodb.service.Impl;import com.adn.mongodb.common.Adn;
import com.adn.mongodb.mapper.AdnMapper;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.stereotype.Service;import java.util.Optional;@Service
public class MongodbServiceImpl implements MongodbService {@Autowiredprivate AdnMapper adnMapper;@Overridepublic Adn adn(String id) {Adn res = null;Optional<Adn> byId = adnMapper.findById(id);System.out.println(byId);boolean present = byId.isPresent();if(present){res = byId.get();}return res;}@Overridepublic Adn save(Adn adn) {return adnMapper.save(adn);}@Overridepublic Adn update(Adn adn) {return adnMapper.updata(adn);}@Overridepublic void delete(String id) {adnMapper.deleteById(id);}}
dao层(我因为习惯所以写了mapper)
重点:要继承MongoRepository这个类!!!
package com.adn.mongodb.mapper;import com.adn.mongodb.common.Adn;
import org.springframework.data.mongodb.repository.MongoRepository;import java.util.Optional;public interface AdnMapper extends MongoRepository<Adn, String> {}