0%

【MongoDB】SpringBoot整合MongoDB

SpringBoot整合MongoDB


1 环境准备

  • 依赖

    1
    2
    3
    4
    5
    <!-- mongodb -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
  • 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    spring:
    data:
    mongodb:
    uri: mongodb://root:123456@127.0.0.1:27017/myTest?authSource=admin
    # mongodb://[用户名]:[密码]@[ip地址]:[端口]/[集合名]?authSource=admin

    # 或者
    spring:
    data:
    mongodb:
    database: myTest
    host: 127.0.0.1
    port: 27017
    username: root
    password: 123456
    authentication-database: admin
  • 使用

    • 注入MongoTemplate,使用里面的方法即可

2 集合操作

1
2
3
4
5
6
7
8
// 判断集合是否存在
public boolean collectionExists(String collectionName);

// 创建集合
public MongoCollection<Document> createCollection(String collectionName);

// 删除集合
public void dropCollection(String collectionName);

3 文档操作

  • 实体类注解
  • @Document:作用在类上,value为集合名
  • @Id: 作用在变量上,映射文档中_id的键的值
  • @Filed:作用在变量上,value是文档中除了注解以外的键名,默认value为变量名
  • @Transient: 作用在变量上,指定变量不会被序列化存储在mongodb中

3.1 插入文档

1
2
3
4
5
// 插入
public <T> T insert(T objectToSave);

// 批量插入
public <T> Collection<T> insert(Collection<? extends T> batchToSave, Class<?> entityClass) ;

3.2 查询文档

1
2
3
4
5
6
7
8
9
10
11
12
//查询
public <T> List<T> find(Query query, Class<T> entityClass);

// 例:条件查询
List<Employee> employees = mongoTemplate.find(new Query(Criteria.where("age").gt(15)), Employee.class);

// 例:排序
List<Employee> employees = mongoTemplate.find(new Query().with(Sort.by(Sort.Order.desc("age"))), Employee.class);

// 例:分页
List<Employee> employees = mongoTemplate.find(new Query().skip(1).limit(1), Employee.class);

  • 注意
  • 查询中Query的参数为Criteria,可以直接在Criteria拼接条件,方法名跟mongosh操作基本一致,就不多展开
  • 查询的Query对象可以换成BasicQuery,传参为字符串,可以像用mongosh一样,写拼接条件让后传入

3.3 更新文档

1
2
3
4
5
6
7
8
9
10
11
// 更新第一条
public UpdateResult updateFirst(Query query, UpdateDefinition update, Class<?> entityClass);

// 更新全部
public UpdateResult updateMulti(Query query, UpdateDefinition update, Class<?> entityClass);

// 更新不存在则插入
public UpdateResult upsert(Query query, UpdateDefinition update, Class<?> entityClass);

// 演示
mongoTemplate.updateFirst(new Query(Criteria.where("_id").is("1")), Update.update("username", "咕料2333"), Employee.class);

3.4 删除文档

1
2
// 删除文档
public DeleteResult remove(Query query, Class<?> entityClass);