MongoRepository

本文详细介绍了MongoRepository的使用,包括介绍、简单使用、自定义查询方法(等值、分页、范围、模糊等查询)以及MongoRepository自带的增删改查功能,帮助开发者更好地在Java中操作MongoDB。
摘要由CSDN通过智能技术生成

一、介绍

MongoRepository是一个接口,与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个MongoDB集合中的文档数据进行增删改查,示例如下所示:

import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface xxxRepository extends MongoRepository<T, ID> {

}

在我们继承MongoRepository接口时,该接口中第一个参数T为该仓库在Mongo中要操作的bean类,第二个参数ID表示该bean类的唯一标识的类型,一般为ObjectId

使用MongoRepository接口时,为了更好的开发,建议引入下述依赖包,如下所示:

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

二、简单使用

前面做了一个简单的介绍以及引入了依赖包,接着我们需要在application.yml文件中配置如下: 

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/test

在MongoDB的test库中创建集合grade,如下图所示: 

接着再构建一个文档对象类Grade和属性类Student:

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.List;

@Data
@Document(value = "grade")
public class Grade {

    @Id
    private Integer id;

    @Field(value = "grade_name")
    private String gradeName;

    @Field(value = "students")
    private List<Student> students;
}
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Field;

@Data
public class Student {

    @Field(value = "student_id")
    private int studentId;

    @Field(value = "student_name")
    private String name;
}

导入下述数据到test库的集合grade中:

[{
  "_id": 1,
  "grade_name": "爱情公寓一年级1班",
  "students": [
    {
      "student_id": 1001,
      "student_name": "曾小贤"
    },
    {
      "student_id": 1002,
      "student_name": "张伟"
    },
    {
      "student_id": 1003,
      "student_name": "诸葛大力"
    }
  ],
  "_class": "com.example.demo.mongo.Grade"
},
{
  "_id": 2,
  "grade_name": "爱情公寓一年级2班",
  "students": [
    {
      "student_id": 2001,
      "student_name": "吕子乔"
    },
    {
      "student_id": 2002,
      "student_name": "咖喱酱"
    },
    {
      "student_id": 2003,
      "student_name": "胡一菲"
    }
  ],
  "_class": "com.example.demo.mongo.Grade"
}]

特别说明:上述数据中的_class属性这个不用理会,因为集合中的文档对象是和类对象Grade做了映射,所以这个地方最好配置一下这个类对象的全路径。 

创建GradeRepository接口,其继承了MongoRepository这个接口,第一个参数为文档对象类Grade,第二个参数为ObjectId: 

import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface GradeRepository extends MongoRepository<Grade, ObjectId> {


}

构建测试类: 

package com.example.demo;

import com.example.demo.mongo.Grade;
import com.example.demo.mongo.GradeRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class GradeApplicationTests {

    @Autowired
    private GradeRepository gradeRepository;

    /**
     * 查询出所有数据
     */
    @Test
    void queryAll() {
        List<Grade> gradeList = gradeRepository.findAll();
        System.out.println(gradeList);
    }
}

执行上述测试代码,其输出内容如下:

[Grade(id=1, gradeName=爱情公寓一年级1班, 
students=[Student(studentId=1001, name=曾小贤), 
Student(studentId=1002, name=张伟), 
Student(studentId=1003, name=诸葛大力)]), 
Grade(id=2, gradeName=爱情公寓一年级2班, 
students=[Student(studentId=2001, name=吕子乔), 
Student(studentId=2002, name=咖喱酱), 
Student(studentId=2003, name=胡一菲)])]

可以看到前面我们只是继承了MongoRepository这个接口,然后什么也没有做,直接在测试类中使用GradeRepository的一些方法,接着数据就查询出来了。那么这个是由于MongoRepository接口中已经实现了一些基本的增删改查功能,我们直接调用相关的方法就可以。

三、自定义查询方法

MongoRepository接口中实现的只是最基本的增删改查的功能,要想增加额外的查询方法,可以按照以下规则定义接口的方法。自定义查询方法,格式为“findBy+字段名+方法后缀”,方法传进的参数即字段的值。 

3.1 等值查询

这是最简单的自定义查询方法,在MongoDB中的原生查询语句如下:

db.grade.find({"_id":1});
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface GradeRepository extends MongoRepository<Grade, ObjectId> {

    Grade findById(int id) ;
}
import com.example.demo.mongo.Grade;
import com.example.demo.mongo.GradeRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class GradeApplicationTests {

    @Autowired
    private GradeRepository gradeRepository;

    @Test
    void query(){
        Grade grade = gradeRepository.findById(1);
        System.out.println(grade);
    }
}

3.2 分页查询 

自定义查询方法中是支持分页查询,通过传进一个Pageable对象,返回Page集合。

为了测试该自定义的分页查询方法,因此在Grade集合中新增一条数据,如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值