<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> <version>2.5.15</version> </dependency>根据这个依赖包生成一个工具类
时间: 2025-07-06 09:31:44 浏览: 1
<think>嗯,用户让我根据Spring Boot的MongoDB依赖生成一个工具类。首先,我需要确认这个依赖的具体版本是2.5.15,所以相关的Spring Data MongoDB的API应该对应那个版本。接下来,用户可能需要一个封装了常用CRUD操作的工具类,方便直接使用,而不需要每次都写模板代码。
首先,工具类通常会用@Configuration注解,确保被Spring管理。然后,需要注入MongoTemplate,因为这是Spring Data MongoDB的核心类,用于操作数据库。不过,用户可能希望工具类静态方法,这样不需要注入实例就能调用方法,但Spring的Bean默认不是静态的,所以可能需要通过静态变量和@PostConstruct来初始化。
然后,考虑常用的方法,比如保存文档、根据ID查询、查询所有、更新、删除,以及分页和排序。分页和排序的话,需要处理Pageable和Sort对象,或者让用户传入页码和每页数量。此外,可能需要处理异常,但用户可能希望工具类不处理异常,直接抛出,由调用方处理。
另外,字段名的处理,比如将Java字段名转换为MongoDB的字段名,可能需要使用Spring的API,比如MappingContext。还有,更新操作需要使用Update对象来构建更新语句,比如set、push等操作。
需要注意的是,工具类是否应该被实例化,通常工具类会私有化构造方法,防止被实例化。静态方法需要访问MongoTemplate,所以需要用@Autowired注入一个静态实例,或者通过setter方法设置。在Spring中,直接注入静态变量可能有问题,所以可能需要用@PostConstruct在初始化时赋值。
另外,分页查询需要先查询总数,再查询当前页的数据,所以需要两个查询:一个count和一个find。排序的话,可以整合到分页参数中,或者在方法参数里单独处理。
可能还需要考虑泛型的使用,让工具类可以处理不同的实体类。每个方法可能需要接受Class<T>参数来确定集合名称和类型。
现在,把这些思路整理成一个工具类,包含常用的方法,并且使用MongoTemplate的API来实现。同时,确保代码符合Spring Boot 2.5.15版本的特性,不会有废弃的方法。最后,给用户一个示例,说明如何使用这个工具类,比如自动注入然后调用方法。</think>我将为您演示如何编写一个基于`spring-boot-starter-data-mongodb`的MongoDB工具类,包含常用CRUD操作和分页查询功能:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class MongoUtil {
private static MongoTemplate mongoTemplate;
@Autowired
public void setMongoTemplate(MongoTemplate mongoTemplate) {
MongoUtil.mongoTemplate = mongoTemplate;
}
//------------------------ 基础CRUD ------------------------
/**
* 保存文档(新增或更新)
* @param document 文档对象
*/
public static <T> T save(T document) {
return mongoTemplate.save(document);
}
/**
* 根据ID查询
* @param id 文档ID
* @param entityClass 实体类类型
*/
public static <T> T findById(String id, Class<T> entityClass) {
return mongoTemplate.findById(id, entityClass);
}
/**
* 查询所有文档
* @param entityClass 实体类类型
*/
public static <T> List<T> findAll(Class<T> entityClass) {
return mongoTemplate.findAll(entityClass);
}
//------------------------ 条件查询 ------------------------
/**
* 条件查询
* @param criteria 查询条件
* @param entityClass 实体类类型
*/
public static <T> List<T> findByCriteria(Criteria criteria, Class<T> entityClass) {
Query query = new Query(criteria);
return mongoTemplate.find(query, entityClass);
}
/**
* 分页查询
* @param criteria 查询条件
* @param pageable 分页参数
* @param entityClass 实体类类型
*/
public static <T> Page<T> findPage(Criteria criteria, Pageable pageable, Class<T> entityClass) {
Query query = new Query(criteria).with(pageable);
long total = mongoTemplate.count(query, entityClass);
List<T> list = mongoTemplate.find(query, entityClass);
return new PageImpl<>(list, pageable, total);
}
//------------------------ 更新操作 ------------------------
/**
* 更新第一个匹配的文档
* @param criteria 查询条件
* @param update 更新操作
* @param entityClass 实体类类型
*/
public static <T> void updateFirst(Criteria criteria, Update update, Class<T> entityClass) {
Query query = new Query(criteria);
mongoTemplate.updateFirst(query, update, entityClass);
}
//------------------------ 删除操作 ------------------------
/**
* 根据ID删除文档
* @param id 文档ID
* @param entityClass 实体类类型
*/
public static <T> void deleteById(String id, Class<T> entityClass) {
mongoTemplate.remove(new Query(Criteria.where("id").is(id)), entityClass);
}
}
```
工具类特点说明:
1. **依赖注入处理**
- 使用`@Component`声明为Spring组件
- 通过setter方法实现静态`MongoTemplate`注入
2. **核心功能包含**
- 基础CRUD:`save()`, `findById()`, `findAll()`
- 条件查询:支持Criteria组合条件
- 分页查询:返回Spring Data规范的Page对象
- 更新操作:支持Update对象链式操作
- 删除操作:支持ID删除
3. **使用示例**
```java
// 注入使用
public class UserService {
// 保存文档
public User createUser(User user) {
return MongoUtil.save(user);
}
// 分页查询
public Page<User> getUsers(int page, int size) {
Criteria criteria = Criteria.where("age").gt(18);
Pageable pageable = PageRequest.of(page, size, Sort.by("createTime"));
return MongoUtil.findPage(criteria, pageable, User.class);
}
}
```
4. **扩展建议**
- 添加索引管理方法(创建/删除索引)
- 增加聚合管道操作方法
- 添加批量写入操作
- 增加字段存在性校验等工具方法
使用注意事项:
1. 实体类需要添加`@Document`注解指定集合名称
2. 文档ID字段建议使用`@Id`注解标注
3. 分页查询需自行处理排序参数
4. 更新操作需使用Spring的Update对象
该工具类封装了常见的MongoDB操作,通过静态方法调用简化了模板代码,同时保持了Spring Data MongoDB的灵活性。
阅读全文
相关推荐


















