这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
前面学习记录了MongoDB数据库控制台的一些操作命令,本节记录如何用java语言操作数据库,也就是MongoDB整合SpringBoot。
一.环境搭建
- 引入依赖
<!--MongoDB-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- 配置
#MongoDB
spring.data.mongodb.uri=mongodb://localhost:27017/text
- 搭建完毕后会自动往工厂注入MongoTemplate
二.集合操作
- 创建集合
@Test
public void testCreateCollection(){
boolean exists = mongoTemplate.collectionExists("products");
if(!exists){
mongoTemplate.createCollection("products");
}
}
- 删除集合
@Test
public void testDropCollection(){
boolean exists = mongoTemplate.collectionExists("products");
if(exists){
mongoTemplate.dropCollection("products");
}
}
三.相关注解
@Document- 修饰范围:用在类上
- 作用:映射这个类的一个对象为mongo中一条文档数据
- 属性:(value、collection)用来指定操作的集合名称
@Id- 修饰范围:用在成员变量、方法上
- 作用:将成员变量的值映射为文档的_id的值
@Field- 修饰范围:用在成员变量、方法上
- 作用:将成员变量以及映射为文档中过一个key、value对
- 属性:(name,value)用来指定在文档中key的名称,默认为成员变量名
@Transient- 修饰范围:用在成员变量、方法上
- 作用:用来指定成员变量,不参与文档的序列化
四.文档操作
1.添加
@Test
public void testSave(){
//User user = new User(100, "纱雾", 9999.9, new Date());
//mongoTemplate.save(user);
User user1 = new User(101, "休比", 9999.9, new Date());
mongoTemplate.insert(user1);
}
- save和insert的区别
- 插入重复数据时,save会自动更新,insert则会报DuplicateKeyException提示主键重复
- insert支持批量插入
2.更新
//更新的内容
Update update = new Update().set("salary", 100000.7);
update.setOnInsert("_id", 102);//设置插入更新的id
//1.更新符合条件的第一条数据
//UpdateResult updateResult = mongoTemplate.updateFirst(new Query(), update, User.class);
//2.多条更新
//UpdateResult updateResult = mongoTemplate.updateMulti(new Query(), update, User.class);
//3.插入更新:无符合条件的内容是自动插入
//UpdateResult updateResult =mongoTemplate.upsert(Query.query(Criteria.where("salary").is(1000)), update,User.class);
3.删除
//1.删除所有
//mongoTemplate.remove(new Query(),User.class);
//2.条件删除
//DeleteResult deleteResult = mongoTemplate.remove(Query.query(Criteria.where("_id").is(102)), User.class);
4.查询
- 查询所有
List<User> users = mongoTemplate.findAll(User.class);
List<User> users = mongoTemplate.findAll(User.class,"users");
- 基于id查询1个
User user = mongoTemplate.findById(100, User.class);
- 条件查询
List<User> users = mongoTemplate.find(Query.query(Criteria.where("username").is("纱雾")), User.class);