MongoDB学习笔记(五) | 青训营笔记

254 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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);