Spring Boot 使用 MongoTemplate 操作 MongoDB
MongoDB Spring Boot Java About 3,826 words引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
添加配置
spring:
data:
mongodb:
uri: mongodb://testUser:testPassword@192.168.1.101:27017/testDB
常用注解
@Document
使用@Document
(org.springframework.data.mongodb.core.mapping.Document)标注Java
的类名对应的MongoDB
的集合名称。
@Id、@MongoId
使用@Id
(org.springframework.data.annotation.Id)或@MongoId
(低版本依赖可能需升级才有)映射MongoDB
的_id
字段,若没有使用这两个注解,则字段中名称为id
的字段将自动映射到_id
上。使用这两个注解可标注的字段类型为String
、ObjectId
(org.bson.types.ObjectId)。
@Field
使用@Field
(org.springframework.data.mongodb.core.mapping.Field)字段,将Java
类中字段名称与MongoDB
集合中字段名称不一致的字段映射成一致的。如Java
中使用了驼峰命名的startTs
字段,想要映射成MongoDB
中的start_ts
字段就可以使用@Field
完成。
@Transient
使用@Transient
(org.springframework.data.annotation.Transient)标注该字段不持久化至数据库中。
示例
@Document("test_dto")
public class TestDto {
@Id
private String id;
// @MongoId
// private String id;
@Field("create_ts")
private long createTs;
@Transient
private String ignoreProperty;
}
MongoTemplate
注入MongoTemplate
类可实现对MongoDB
的增删改查操作。
查询条件
使用Query
构建查询条件。示例如下:
_id
等于具体值
Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));
status
等于某个值,并且更新时间大于某个值
Query query = Query.query(Criteria.where("status").is("ONLINE").and("update_ts").lte(System.currentTimeMillis()));
skip
、limit
可用于分页查询,with
、Sort
、Order
可用于排序(多个Order
为组合排序)
Criteria criteria1 = Criteria.where("status").is("ONLINE");
Criteria criteria2 = Criteria.where("update_ts").lte(System.currentTimeMillis());
Query query = new Query();
query.addCriteria(criteria1);
query.addCriteria(criteria2);
query.skip(100);
query.limit(10);
query.with(Sort.by(Sort.Order.desc("_id"), Sort.Order.asc("create_ts")));
增
insert
和save
。两者区别如下:
- 插入重复数据时:
insert
报DuplicateKeyException
提示主键重复;save
对已存在的数据进行更新。 - 批处理操作时:
insert
可以一次性插入整个数据,效率较高;save
需遍历整个数据,一次插入或更新,效率较低。
public class TestService {
@Resource
private MongoTemplate mongoTemplate;
public void add(TestDto TestDto) {
mongoTemplate.insert(TestDto);
//mongoTemplate.save(TestDto);
}
}
删
可使用映射对象或Query
对象,使用remove
进行删除。
public class TestService {
@Resource
private MongoTemplate mongoTemplate;
public void delete1() {
TestDto testDto = TestDto.builder().id("5e786517e9babf45a79fda46").build();
DeleteResult deleteResult = mongoTemplate.remove(testDto);
}
public void delete2() {
Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));
DeleteResult deleteResult = mongoTemplate.remove(query, TestDto.class);
}
}
改
updateFirst
更新一个,updateMulti
更新多个。
public class TestService {
@Resource
private MongoTemplate mongoTemplate;
public void update() {
Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));
Update update = Update.update("update_ts", System.currentTimeMillis())
.set("status", "ONLINE");
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, TestDto.class);
}
}
查
find
查询集合,findOne
查询一个。
public class TestService {
@Resource
private MongoTemplate mongoTemplate;
public void queryList() {
Query query = Query.query(Criteria.where("status").is("ONLINE").and("update_ts").lte(System.currentTimeMillis()))
.skip(1000)
.limit(10)
.with(Sort.by(Sort.Order.desc("_id")));
List<TestDto> testDtos = mongoTemplate.find(query, TestDto.class);
}
public void queryOne() {
Query query = Query.query(Criteria.where("_id").is("5e786517e9babf45a79fda46"));
TestDto testDto = mongoTemplate.findOne(query, TestDto.class);
}
}
官方文档
https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#reference
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓