Mongodb之Springboot整合

1.环境

依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置

spring:
  data:
    mongodb:
      #uri: mongodb://root:root@192.168.8.128:27017/test
      host: 192.168.8.128
      port: 27017
      authentication-database: admin
      username: root
      password: root
      database: test

2.注解说明

1.@Document(collection = "实体类")
实体类跟集合对应,标注在实体类上

2.@CompoundIndexes({
    @CompoundIndex(name = "age_idx", def = "{'name': 1, 'age': -1}")
})
复合索引,加复合索引后通过复合索引字段查询将大大提高速度,标注在实体类上

3.@MongoId
主键ID,标注在字段上

4.@Indexed
声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度,标注在字段上
唯一索引的话是@Indexed(unique = true)5.@Transient
被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。

6.@Field
代表一个字段,可以不加,不加的话默认以参数名为列名。
package com.yzm.mongodb01.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.MongoId;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Document(collection = "thing")
public class Thing {

    @MongoId
    private String id;
    private String name;
    private double price;
    private Integer left;

}

3.增删改查

package com.yzm.mongodb01.controller;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.yzm.mongodb01.entity.Thing;
import org.bson.Document;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.CollectionOptions;
import org.springframework.data.mongodb.core.FindAndReplaceOptions;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@RestController
public class DemoController {

    private final MongoTemplate mongoTemplate;
    private final String firstCollection = "thing";

    public DemoController(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @GetMapping("/createCollection")
    public void createCollection() {
        // 判断集合是否存在
        System.out.println(mongoTemplate.collectionExists(Thing.class));
        System.out.println(mongoTemplate.collectionExists(firstCollection));

        CollectionOptions options = CollectionOptions.empty()
                // 创建固定大小的集合,须指定size
                .capped()
                // 集合内存大小,单位字节,这里设置10M;当内存达到限制时,第一个插入的文档会被移除
                .size(10 * 1024 * 1024)
                // 集合最大文档数,这里设置1000个;当文档数达到限制时,第一个插入的文档会被移除
                .maxDocuments(1000);
        MongoCollection<Document> collection = mongoTemplate.createCollection(Thing.class, options);
        System.out.println("collection = " + collection);
    }

    @GetMapping("/insert")
    public void insert() {
        List<Thing> list = new ArrayList<>();
        list.add(Thing.builder().name("铅笔").price(2.00).left(100).build());
        list.add(Thing.builder().name("钢笔").price(8.00).left(5).build());
        list.add(Thing.builder().name("毛笔").price(5.50).left(20).build());
        // 批量插入
        Collection<Thing> things = mongoTemplate.insertAll(list);
        things.forEach(System.out::println);
        //mongoTemplate.insert(list, Thing.class);
        //mongoTemplate.insert(list, firstCollection);
        //mongoTemplate.insert(Thing.class).all(list);
        //mongoTemplate.insert(Thing.class).bulk(list);

        // 单条插入
        Thing thing = Thing.builder().name("圆珠笔").price(5.0).left(50).build();
        System.out.println(mongoTemplate.insert(thing));
        //mongoTemplate.insert(thing, firstCollection);
        //mongoTemplate.insert(Thing.class).one(thing);
    }

    @GetMapping("/save")
    public void save() {
        // 单条插入,不同于insert,save如果主键ID已存在则是修改操作,而insert则会报错
        Thing thing = Thing.builder().name("粉笔").price(1.0).left(200).build();
        System.out.println(mongoTemplate.save(thing));
        //mongoTemplate.save(thing, firstCollection);
    }

    @GetMapping("/findAll")
    public void findAll() {
        // 查询所有
        List<Thing> things = mongoTemplate.findAll(Thing.class);
        //mongoTemplate.findAll(Thing.class, firstCollection);
        things.forEach(System.out::println);
    }

    @GetMapping("/findById")
    public void findById(Object id) {
        // 根据ID查询
        Thing thing = mongoTemplate.findById(id, Thing.class);
        //mongoTemplate.findById(id, Thing.class,firstCollection);
        System.out.println("thing = " + thing);
    }

    @GetMapping("/findOne")
    public void findOne(String name) {
        // 根据条件返回查询结果集的第一个
        Query query = new Query(Criteria.where("name").is(name));
        Thing thing = mongoTemplate.findOne(query, Thing.class);
        //mongoTemplate.findOne(query, Thing.class,firstCollection);
        System.out.println("thing = " + thing);
    }

    @GetMapping("/findByWhere")
    public void findByWhere(String name) {
        // 根据条件返回查询结果集
        Query query = new Query(Criteria.where("name").is(name));
        List<Thing> things = mongoTemplate.find(query, Thing.class);
        //mongoTemplate.find(query, Thing.class,firstCollection);
        things.forEach(System.out::println);
    }

    @GetMapping("/updateFirst")
    public void updateFirst(String oldName, String newName) {
        // 单条修改
        Query query = new Query(Criteria.where("name").is(oldName));
        Update update = Update.update("name", newName);
        UpdateResult result = mongoTemplate.updateFirst(query, update, Thing.class);
        //mongoTemplate.update(Thing.class).matching(query).apply(update).first();
        System.out.println("result = " + result);
    }

    @GetMapping("/updateMulti")
    public void updateMulti(int num1, int num2, String name) {
        // 批量修改
        Query query = new Query(Criteria.where("age").gte(num1).lte(num2));
        Update update = Update.update("name", name);
        UpdateResult result = mongoTemplate.updateMulti(query, update, Thing.class);
        //mongoTemplate.update(Thing.class).matching(query).apply(update).all();
        System.out.println("result = " + result);
    }

    @GetMapping("/upsert")
    public void upsert(int num1, int num2, String name) {
        // 存在查询文档则修改,否则插入文档
        Query query = new Query(Criteria.where("age").gte(num1).lte(num2));
        Update update = Update.update("name", name);
        UpdateResult result = mongoTemplate.upsert(query, update, Thing.class);
        //mongoTemplate.update(Thing.class).matching(query).apply(update).upsert();
        System.out.println("result = " + result);
    }

    @GetMapping("/remove")
    public void remove(String name) {
        // 移除文档
        Query query = new Query(Criteria.where("age").is(name));
        DeleteResult result = mongoTemplate.remove(query, Thing.class);
        System.out.println("result = " + result);
//        mongoTemplate.findAndRemove(query, Thing.class);
//        mongoTemplate.findAllAndRemove(query, Thing.class);
//        mongoTemplate.remove(Thing.class).matching(query).one();
    }

    @GetMapping("/page")
    public void page() {
        // 分页查询
        Query query = new Query()
                .skip(1)
                .limit(5)
                //.with(Sort.by(Sort.Order.asc("age")))
                .with(Sort.sort(Thing.class).by(Thing::getPrice).ascending());
        List<Thing> list = mongoTemplate.find(query, Thing.class);
        list.forEach(System.out::println);
    }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB是一种NoSQL数据库,而Spring Boot是一种Java框架,可以用于快速构建Web应用程序。将MongoDB与Spring Boot整合可以让我们更方便地使用MongoDB存储和检索数据。 要将MongoDB与Spring Boot整合,我们需要使用Spring Data MongoDB。Spring Data MongoDB是Spring Data项目的一部分,它提供了一种简单的方式来访问MongoDB数据库。 在Spring Boot应用程序中使用Spring Data MongoDB,我们需要添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> ``` 然后,我们需要配置MongoDB连接信息。可以在application.properties文件中添加以下配置: ``` spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=mydb ``` 这将告诉Spring Boot连接到本地MongoDB实例,使用mydb数据库。 现在,我们可以使用Spring Data MongoDB来访问MongoDB数据库。例如,我们可以定义一个简单的实体类: ``` @Document(collection = "users") public class User { @Id private String id; private String name; private int age; // getters and setters } ``` 然后,我们可以定义一个MongoDB存储库接口: ``` @Repository public interface UserRepository extends MongoRepository<User, String> { List<User> findByName(String name); } ``` 这将允许我们使用Spring Data MongoDB的内置方法来访问MongoDB数据库。例如,我们可以使用以下代码来查找名为“John”的所有用户: ``` @Autowired private UserRepository userRepository; List<User> users = userRepository.findByName("John"); ``` 这就是如何将MongoDB与Spring Boot整合的基础知识。当然,还有很多其他的功能和选项可以使用,但这应该足以让您开始使用MongoDB和Spring Boot了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值