一、前言

  Spring Boot集成MongoDB非常简单,主要为加依赖加配置编码

二、说明

环境说明:

  • JDK版本为15(1.8+即可)
  • Spring Boot 2.4.1

三、集成步骤

3.1 添加依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.4.1</version>
</dependency>

3.2添加配置

spring:
# mongo连接
data:
mongodb:
uri: mongodb://mydb:mydb@127.0.0.1:27017/mydb

四、案例

4.1 基于MongoRepository实现对MongoDB的操作

4.1.1 新建客户实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id; @Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
// 客户
public class Customer { // 主键ID
// 此种方式ID需要自己设定
@Id
private String id; // // 主键ID
// // 采用此种方式会自动生成ID
// private ObjectId id; // 名字
private String firstName; // 姓氏
private String lastName;
}

4.1.2 新建客户仓库并实现MongoDB仓库

import com.ruiyicloud.bbfbusiness.entity.mongo.Customer;
import org.springframework.data.mongodb.repository.MongoRepository; import java.util.List; public interface CustomerRepository extends MongoRepository<Customer, String> { /**
* 根据名字查找客户
* @param firstName 名字
* @return
*/
Customer findByFirstName(String firstName); /**
* 根据姓氏查找客户
* @param lastName 姓氏
* @return
*/
List<Customer> findByLastName(String lastName); }

4.1.3 创建控制器,对接口方法进行测试

import com.ruiyicloud.bbfbusiness.entity.mongo.Customer;
import com.ruiyicloud.bbfbusiness.service.mongo.CustomerRepository;
import com.ruiyicloud.comm.result.Result;
import com.ruiyicloud.comm.result.ResultGenerator;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*; import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Optional; import static com.ruiyicloud.comm.utils.check.CheckUtil.notNull; /**
* <p>
* MongoDB相关操作
* </p>
*
* @author wanggx_ruiyi
* @since 2021-01-19
*/
@Api(description="MongoDB相关操作",tags={"MongoDB"})
@RestController
@RequestMapping("/api/v1/mongo/mongoTest")
public class MongoTestController {
@Resource
private CustomerRepository customerRepository; @InitBinder
protected void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
} /**
* @create wanggx_ruiyi 2021-01-19 新增客户信息
* @param customer 客户模型
* @return
*/
@ApiOperation(value="新增",notes = "新增")
@PostMapping("/add")
public Result<Customer> add(@ApiParam(name = "customer", value = "客户模型", required = true) @RequestBody Customer customer) { notNull(customer, "输入参数不能为空"); return ResultGenerator.genSuccessResult(customerRepository.save(customer));
} /**
* @create wanggx_ruiyi 2021-01-19 批量新增客户信息
* @param customerList 客户模型列表
* @return
*/
@ApiOperation(value="批量新增",notes = "批量新增")
@PostMapping("/batchAdd")
public Result<List<Customer>> batchAdd(
@ApiParam(name = "customerList", value = "客户模型", required = true) @RequestBody List<Customer> customerList) { notNull(customerList, "输入参数不能为空"); return ResultGenerator.genSuccessResult(customerRepository.saveAll(customerList));
} /**
* @create wanggx_ruiyi 2021-01-19 根据名字查找客户
* @param firstName 名字
* @return
*/
@ApiOperation(value="根据名字查找客户",notes = "根据名字查找客户")
@PostMapping("/findByFirstName")
public Result<Customer> findByFirstName(
@ApiParam(name = "firstName", value = "名字", required = true) @RequestParam String firstName) { notNull(firstName, "输入参数不能为空"); return ResultGenerator.genSuccessResult(customerRepository.findByFirstName(firstName));
} /**
* @create wanggx_ruiyi 2021-01-19 根据姓氏查找客户
* @param lastName 姓氏
* @return
*/
@ApiOperation(value="根据姓氏查找客户",notes = "根据姓氏查找客户")
@PostMapping("/findByLastName")
public Result<List<Customer>> findByLastName(
@ApiParam(name = "lastName", value = "姓氏", required = true) @RequestParam String lastName) { notNull(lastName, "输入参数不能为空"); return ResultGenerator.genSuccessResult(customerRepository.findByLastName(lastName));
} /**
* @create wanggx_ruiyi 2021-01-19 根据id查找客户
* @param id 数据id
* @return
*/
@ApiOperation(value="根据id查找客户",notes = "根据id查找客户")
@PostMapping("/findById")
public Result<Customer> findById(
@ApiParam(name = "id", value = "数据ID", required = true) @RequestParam String id) { notNull(id, "输入参数不能为空"); Optional<Customer> customer = customerRepository.findById(id);
return ResultGenerator.genSuccessResult(customer.isPresent() ? customer.get() : null);
} /**
* @create wanggx_ruiyi 2021-01-19 根据id判断客户是否存在
* @param id 数据id
* @return
*/
@ApiOperation(value="根据id判断客户是否存在",notes = "根据id判断客户是否存在")
@PostMapping("/existsById")
public Result<Boolean> existsById(
@ApiParam(name = "id", value = "数据ID", required = true) @RequestParam String id) { notNull(id, "输入参数不能为空"); return ResultGenerator.genSuccessResult(customerRepository.existsById(id));
} /**
* @create wanggx_ruiyi 2021-01-19 查找所有客户
* @return
*/
@ApiOperation(value="查找所有客户",notes = "查找所有客户")
@PostMapping("/findAll")
public Result<List<Customer>> findAll() { return ResultGenerator.genSuccessResult(customerRepository.findAll());
} /**
* @create wanggx_ruiyi 2021-01-19 查找所有客户(排序)
* @return
*/
@ApiOperation(value="查找所有客户(排序)",notes = "查找所有客户(排序)")
@PostMapping("/findAllBySort")
public Result<List<Customer>> findAllBySort() { return ResultGenerator.genSuccessResult(customerRepository.findAll(Sort.by("id")));
} }

4.2 基于通用MyBatis Mapper插件的Service接口的实现

4.2.1 创建MongonService接口

import org.springframework.data.domain.Pageable;
import java.util.List;

/**
* MongonService 层 基础接口,其他有关mongo的Service 接口 请继承该接口
*/
public interface MongonService<T> {
/**
* 持久化
* @param model
*/
void save(T model);

/**
* 批量持久化
* @param models
*/
void save(List<T> models);

/**
* 通过_id刪除
* @param id
*/
void deleteById(String id);

/**
* 批量删除
* @param models
*/
void deleteAll(List<T> models);

/**
* 更新每个实体--需自己实现
* @param model
* @return
*/
int update(T model);

/**
* 通过ID查找
* @param id
* @return
*/
T findById(String id);

/**
* 获取所有
* @return
*/
List<T> findAll();

/**
* 通过分页查询
* @param pageable
* @return
*/
List<T> findByPage(Pageable pageable);
}

4.2.2 创建AbstractMongoService抽象类实现MongonService接口

import com.ruiyicloud.bbfbusiness.service.mongo.MongonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query; import java.lang.reflect.ParameterizedType;
import java.util.List; /**
* 基于通用MyBatis Mapper插件的Service接口的实现
*/
public abstract class AbstractMongoService<T> implements MongonService<T> { /**
* 由springboot自动注入,默认配置会产生mongoTemplate这个bean
*/
@Autowired
private MongoTemplate mongoTemplate; // 当前泛型真实类型的Class
private Class<T> modelClass; public AbstractMongoService() {
// 返回表示由该类对象表示的实体(类、接口、基元类型或void)的直接超类的类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
// 返回表示此类型的实际类型参数的类型对象数组。
modelClass = (Class<T>) pt.getActualTypeArguments()[0];
} /**
* 插入一个集合
*/
@Override
public void save(List<T> models) {
mongoTemplate.insertAll(models);
} /**
* 查找全部
*/
@Override
public List<T> findAll() {
return mongoTemplate.findAll(modelClass);
} /**
* 根据id得到对象
*/
@Override
public T findById(String id) {
return mongoTemplate.findById(id, modelClass);
// return mongoTemplate.findOne(new Query(Criteria.where("_id").is(id)), modelClass);
} /**
* 插入
*/
@Override
public void save(T model) {
mongoTemplate.insert(model);
} /**
* 根据id删除
*/
@Override
public void deleteById(String id) {
T model = findById(id);
mongoTemplate.remove(model);
// Criteria criteria = Criteria.where("_id").is(id);
// Query query = new Query(criteria);
// mongoTemplate.remove(query,modelClass);
} /**
* 批量删除
*
* @param models
*/
@Override
public void deleteAll(List<T> models) {
for (T model : models) {
mongoTemplate.remove(model);
}
} /**
* 分页查找
* pageable代表分页bean
*/
@Override
public List<T> findByPage(Pageable pageable) {
Query query = new Query();
List<T> list = mongoTemplate.find(query.with(pageable), modelClass);
return list;
}
}

4.2.3 使用示例

// Service 示例代码
public interface EmrFileInfoService extends MongonService<EmrFileInfo>{}
// Service impl 示例代码
@Service
public class EmrFileInfoServiceImpl extends AbstractMongoService<EmrFileInfo> implements EmrFileInfoService {}

五、总结

  总的来说,Spring Boot集成MongoDB非常简单。

最新文章

  1. 数据结构:链表(python版)续:带有尾节点引用的单链表
  2. SAM/BAM文件处理
  3. 免费馅饼——G
  4. C#经典机试题(猫叫)
  5. Ubuntu安装SSH服务
  6. hdu 5210 Delete
  7. 深入浅出ES6(九):学习Babel和Broccoli,马上就用ES6
  8. java 对象序列化
  9. linux使用共享内存通信的进程同步退出问题
  10. [课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)
  11. shell中的特殊变量和函数传参
  12. 关于阻止PROE联网的一些想法!
  13. flex基础示例
  14. Alpha冲刺四
  15. [js]使用百度编辑器uediter时遇到的一些问题(span,div等被过滤)
  16. python中序列化模块json和pickle
  17. 【读书笔记】iOS-使用传感器
  18. ubuntu 系统判断优盘的指定文件存在
  19. JavaScript数组倒序函数reverse()
  20. Spring 系列教程之自定义标签的解析

热门文章

  1. postgresql 函数集合
  2. SpringBoot 获取微信小程序openid
  3. java 深拷贝与浅拷贝机制详解
  4. 【MyBatis】MyBatis 入门
  5. PAT甲级 Perfect Sequence (25) 记忆化搜索
  6. SQL Server解惑&mdash;&mdash;查询条件IN中能否使用变量
  7. 摆脱 996——GitHub 热点速览 v.21.03
  8. 【Linux】CentOS7中修改中文字符集
  9. Kubernetes CoreDNS 状态是 CrashLoopBackOff 报错
  10. 入门OJ:扫雪