SpringBoot整合MongoDB

环境搭建

创建项目

创建一个SpringBoot应用
在这里插入图片描述
在这里插入图片描述

引入依赖

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

添加连接配置

#连接mongodb
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.username=admin
spring.data.mongodb.password=123456
spring.data.mongodb.database=xiang


集合操作

创建集合

     @Resource
    private  MongoTemplate mongoTemplate;


    /**
     * 创建集合
     */
    @Test
    void testCreateCollection() {
        mongoTemplate.createCollection("demo");
    }

在这里插入图片描述
若插入的集合已经存在,则会抛出异常
在这里插入图片描述

    @Resource
    private  MongoTemplate mongoTemplate;


    /**
     * 创建集合
     */
    @Test
    void testCreateCollection() {
        //判断集合集合是否存在
        if (!mongoTemplate.collectionExists("demo")){
            mongoTemplate.createCollection("demo");
        }
    }


删除集合

    /**
     * 删除集合
     */
    @Test
    void testDelCollection() {
        //判断集合集合是否存在
        if (mongoTemplate.collectionExists("demo")) {
            mongoTemplate.dropCollection("demo");
        }
    }


文档操作

相关注解

  • @Document
    修饰范围:用在类上
    作用: 用来映射这个类的一个对象为mongo中一条文档数据
    属性:(value . collection )用来指定操作的集合名称

  • @Id
    **修饰范围:**用在成员变量、方法上
    **作用:**用来将成员变量的值映射为文档的_id的值

  • @Field
    修饰范围:用在成员变量、方法上。
    作用:用来将成员变量以及值映射为文档中一个key、value对
    属性:( name , value )用来指定在文档中 key的名称,默认为成员变量名

  • @Transient
    修饰范围:用在成员变量、方法上
    **作用:**用来指定改成员变量,不参与文档的序列化

创建实体


import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;


//mongoDB中demo集合的一条文档
@Document(value = "demo")
public class User {

    @Id
    private Integer id;

    private String name;

    private Double salary;

    private Date birthday;

    public User() {
    }

    public User(Integer id, String name, Double salary, Date birthday) {
        this.id = id;
        this.name = name;
        this.salary = salary;
        this.birthday = birthday;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                ", birthday=" + birthday +
                '}';
    }
}

添加文档

    @Test
    void testAddCollection() {
        /**
         * save:   批处理数据时,,对已经存在数据进行更新。需要遍历整个数据
         * insert: 插入重复数据的时候,insert报错主键重复DuplicateKeyException,一次性插入多条数据,效率高
         */
        User xiang = new User(1, "xiang", 5000.0, new Date());
        //mongoTemplate.save(xiang);
        mongoTemplate.insert(xiang);
    }


在这里插入图片描述
在这里插入图片描述

查询文档

    /**
     * 查询集合
     */
    @Test
    void testQuery() {

        // 查询全部文档
        List<User> userList = mongoTemplate.findAll(User.class);
        //List<User> userList1 = mongoTemplate.findAll(User.class,"user");
        userList.forEach(System.out::println);

        //根据id查询
        User byId = mongoTemplate.findById(1, User.class);
        System.out.println(byId);

        //条件查询
        Query query = new Query();
        List<User> users = mongoTemplate.find(query, User.class);

        //等值查询
        Query query1 = new Query(Criteria.where("name").is("xiang"));
        List<User> userList1 = mongoTemplate.find(query, User.class);

        // > ,< ,>= ,<=
        Query query2 = new Query(Criteria.where("age").lt(23)); //age < 23
        Query query3 = new Query(Criteria.where("age").lte(23)); //age <= 23
        Query query4 = new Query(Criteria.where("age").gt(23)); //age > 23
        Query query5 = new Query(Criteria.where("age").gte(23)); //age >= 23

        //and 查询
        Query query6 = new Query(Criteria.where("age").lt(23).and("salary").lt(3000)); //age < 23 and salary < 3000
        Query query7 = new Query(Criteria.where("age").lt(23).orOperator(Criteria.where("salary").lt(3000))); //age < 23 or salary < 3000


        List<User> userList6 = mongoTemplate.find(query6, User.class);
        List<User> userList7 = mongoTemplate.find(query6, User.class);


        //排序
        Query querySort = new Query();
        querySort.with(Sort.by(Sort.Order.desc("salary"))); //工资降序
        List<User> userList2 = mongoTemplate.find(querySort, User.class);

        //分页
        Query queryPage = new Query();
        querySort.with(Sort.by(Sort.Order.desc("salary"))).skip(0).limit(10); //分页
        List<User> userList3 = mongoTemplate.find(queryPage, User.class);

        //总条数
        long count = mongoTemplate.count(new Query(), User.class);
        //去重  查询对象 去重字段 操作集合 返回类型
        mongoTemplate.findDistinct(new Query(),"name",User.class,String.class);

        //json字符串查询
        Query base = new BasicQuery("{'name':'xiang'}");
        Query base1 = new BasicQuery("{$or:[{'name':'xiang'}]}");
        List<User> userList4 = mongoTemplate.find(base, User.class);

    }

文档更新


    /**
     * 更新文档
     */
    @Test
    void testUpdate(){
        Query query = new Query(Criteria.where("name").is("xiang"));
        Update update = new Update();
        update.setOnInsert("id",1); //如果插入不用默认的id
        update.set("salary",99999.0);
        //更新符合条件的一条数据
        mongoTemplate.updateFirst(query,update,User.class);
        // 更新多条
        mongoTemplate.updateFirst(query,update,User.class);
        // 插入更新,没有符合条件的就插入这条数据。
        UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
        upsert.getModifiedCount(); //获取修改的记录
        upsert.getMatchedCount(); //本次匹配的记录
    }

文档删除

    /**
     * 删除文档
     */
    @Test
    void testDel(){
        //删除全部
        //DeleteResult remove = mongoTemplate.remove(new Query(), User.class);
        // 条件删除
        mongoTemplate.remove(new Query(Criteria.where("name").is("xiang")), User.class);
    }

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值