SpringBoot——整合MongoDB详解

这篇具有很好参考价值的文章主要介绍了SpringBoot——整合MongoDB详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引入依赖

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

配置文件

spring:
  data:
    mongodb:
      host: 127.0.0.1
      database: test
      port: 27017
      # 也可以使用uri   mongodb://127.0.0.1:27017/test

创建实体类

public class Student implements Serializable{
    
    @Id
    private String studentId;
    
    private String studentName;
    
    private Integer studentAge;
    
    private Double studentScore;
    
    private Date studentBirthday;

    public Student(String studentId, String studentName, Integer studentAge, Double studentScore, Date studentBirthday) {
        this.studentId = studentId;
        this.studentName = studentName;
        this.studentAge = studentAge;
        this.studentScore = studentScore;
        this.studentBirthday = studentBirthday;
    }

    public Student() {
    }

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public Integer getStudentAge() {
        return studentAge;
    }

    public void setStudentAge(Integer studentAge) {
        this.studentAge = studentAge;
    }

    public Double getStudentScore() {
        return studentScore;
    }

    public void setStudentScore(Double studentScore) {
        this.studentScore = studentScore;
    }

    public Date getStudentBirthday() {
        return studentBirthday;
    }

    public void setStudentBirthday(Date studentBirthday) {
        this.studentBirthday = studentBirthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                "studentId='" + studentId + '\'' +
                ", studentName='" + studentName + '\'' +
                ", studentAge=" + studentAge +
                ", studentScore=" + studentScore +
                ", studentBirthday=" + studentBirthday +
                '}';
    }
}

dao层

1、JPA方式
/**
 * @Author: acton_zhang
 * @Date: 2023/5/9 12:41 上午
 * @Version 1.0
 * JPA方式
 * 继承MongoRepository即可,不需要实现类
 */
public interface StudentRepository extends MongoRepository<Student, String> {
}

测试:

import data.dao.StudentRepository;
import data.domain.Student;


import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.*;


import java.util.*;

/**
 * @Author: acton_zhang
 * @Date: 2023/5/9 12:44 上午
 * @Version 1.0
 */
@SpringBootTest
public class StudentRepositoryTest {

    @Autowired
    private StudentRepository studentRepository;

    /**
     * 插入单条数据
     */
    @Test
    public void insertOne() {
        Student student = new Student("009", "tom", 18, 88.2d, new Date());
        studentRepository.insert(student);
    }

    /**
     * 插入多条数据
     */
    @Test
    public void insertMany() {
        Student student1 = new Student("002", "jerry", 19, 38.2d, new Date());
        Student student2 = new Student("003", "mike", 20, 78.2d, new Date());
        List<Student> list = new ArrayList<>();
        list.add(student1);
        list.add(student2);
        studentRepository.insert(list);
    }

    /**
     * 修改数据
     */
    @Test
    public void update() {
        Optional<Student> op = studentRepository.findById("001");
        Student student = op.get();
        student.setStudentAge(222);
        studentRepository.save(student);
    }

    /**
     * 查询数据
     */
    @Test
    public void query() {
        //根据Id查询单个对象
        Optional<Student> stuOp = studentRepository.findById("001");
        System.out.println(stuOp.get());

        //根据字段查询单个对象
        Student student = new Student();
        student.setStudentAge(19);
        Optional<Student> stuOp1 = studentRepository.findOne(Example.of(student));
        System.out.println(stuOp1.get());

        //根据id列表查询多个对象
        Iterable<Student> itStu = studentRepository.findAllById(Arrays.asList(new String[]{"001", "002"}));
        Iterator<Student> itor = itStu.iterator();
        while (itor.hasNext())
            System.out.println(itor.next());

        //查询所有
        List<Student> all = studentRepository.findAll();

        //查询所有并排序
        List<Student> all1 = studentRepository.findAll(Sort.by(Sort.Order.desc("studentId"), Sort.Order.asc("studentName")));
        for (Student stu : all1)
            System.out.println(stu);

        //根据条件查询所有并排序
        Student student1 = new Student();
        student1.setStudentName("tom");
        List<Student> all2 = studentRepository.findAll(Example.of(student1), Sort.by(Sort.Order.desc("studentId"), Sort.Order.asc("studentName")));
        for (Student stu : all2)
            System.out.println(stu);

        //根据条件查询所有并排序,且分页
        Pageable pageable = PageRequest.of(0, 2);
        Page<Student> all3 = studentRepository.findAll(pageable);
        List<Student> content = all3.getContent();
        for (Student stu : content)
            System.out.println(stu);
    }

    /**
     * 其他操作
     */
    @Test
    public void other() {
        //count
        long count = studentRepository.count();
        System.out.println(count);
        Student student = new Student();
        student.setStudentAge(18);
        long count1 = studentRepository.count(Example.of(student));
        System.out.println(count1);

        //exists
        boolean exists = studentRepository.exists(Example.of(student));
        System.out.println(exists);
        boolean b = studentRepository.existsById("001");
        System.out.println(b);
    }


    /**
     * 删除操作
     */
    @Test
    public void remove() {
        //根据id删除单个对象
        studentRepository.deleteById("001");

        //根据字段删除
        Student student = new Student();
        student.setStudentAge(20);
        studentRepository.delete(student);

        //删除所有
        studentRepository.deleteAll();

        //根据字段删除多个
        Student student1 = new Student();
        student1.setStudentName("jerry");
        List<Student> list = new ArrayList<>();
        list.add(student);
        list.add(student1);
        studentRepository.deleteAll(list);
    }
}
2、MongoTemplate方式

dao接口:

public interface StudentDao {

    //插入单个对象
    void addOne(Student student);

    //根据id删除单个对象
    void deleteOneById(String  studentId);

    //修改单个对象
    void updateOne(Student student);

    //根据id获取单个对象
    Student findOneById(String studentId);
    
    //获取全部学生
    List<Student> findAll();
}

实现类:

public class StudentDaoImpl implements StudentDao {

    @Autowired
    private MongoTemplate mongoTemplate;


    @Override
    public void addOne(Student student) {
        mongoTemplate.save(student);
    }

    @Override
    public void deleteOneById(String studentId) {
        Student stu = mongoTemplate.findById(studentId, Student.class);
        if (stu != null)
            mongoTemplate.remove(stu);

    }

    @Override
    public void updateOne(Student student) {
        mongoTemplate.save(student);

    }

    @Override
    public Student findOneById(String studentId) {
        return mongoTemplate.findById(studentId, Student.class);
    }

    @Override
    public List<Student> findAll() {
        return mongoTemplate.findAll(Student.class);
    }
}

测试类:

@SpringBootTest
public class StudentDaoTest {

    @Autowired
    private StudentDao studentDao;

    @Test
    void addOneStudent(){
//        插入10行
        for (Integer count = 0; count < 10; count++) {
            Student student = new Student();
            student.setStudentId("study_"+count);
            student.setStudentName("Echo"+count);
            student.setStudentAge(count);
            student.setStudentScore(98.5-count);
            student.setStudentBirthday(new Date());
            studentDao.addOne(student);
        }
    }

    @Test
    void deleteOneStudentByStudentId(){
//        删除id为study_0的学生
        studentDao.deleteOneById("study_0");
    }

    @Test
    void updateOneStudent(){
//        修改id为study_1的Student年龄为21
        Student student = studentDao.findOneById("study_1");
        student.setStudentAge(21);
        studentDao.updateOne(student);

    }

    @Test
    void getOneStudentByStudentId(){
        System.out.println(studentDao.findOneById("study_1"));
    }

    @Test
    void getAllStudent(){
        List<Student> studentList = studentDao.findAll();
        studentList.forEach(System.out::println);
    }
}

MongoTemplate

1、查询

is查询:

Query query = new Query();
// where...is... 相当于 where ? = ?
query.addCriteria(Criteria.where("数据库字段名").is("你的参数"));
// findOne 返回的是一个对象 Class代表你的表对应的映射类
mongoTemplate.findOne(query, Class.class);
// find 返回的是数组
mongoTemplate.find(query, Class.class);

in查询:

ArrayList<String> list = new ArrayList<>();
// list代表你的数据
Query query = Query.query(Criteria.where("数据库字段").in(list));
mongoTemplate.find(query, Class.class);


// 如果想要查询指定的数据是否在数据库的数组中,可以用以下方法
Query query = Query.query(Criteria.where("数据库字段(数组)").is("你的数组"));

字符模糊查询:

Query query = Query.query(Criteria.where("name").regex("小"));

指定字段不返回:

query.fields().exclude("field");

数组中添加或删除一条数据:

Query query = Query.query(Criteria.where("_id").is("id"));
Update update = new Update();
// push方法可以在数组中添加一条数据
// pull方法可以在数组中删除一条数据
// update.pull()
update.push("字段名称", "data");
mongoTemplate.updateFirst(query, update, Class.class);

批量添加:

ArrayList<Class> list = new ArrayList<>();
mongoTemplate.insert(list, Class.class);

数组查询:

数组格式:
{
    name:"小明",
    age:13,
    friends:[
        {
            name:"小王",
            age:12
        },
        {
            name:"小李",
            age:18
        }
    ]
}


当要查询朋友中姓名为小王时
Query query = new Query();
query.addCriteria(Criteria.where("friends.$.name").is("小王"));
mongoTemplate.find(query, User.class);


同样更新时也是一样,但是注意,更新时查询条件需要添加
query.addCriteria(Criteria.where("friends").elemMatch(Criteria.where("name").is("小王"));
Update update = Update.update("friends.$.friends", "小赵");

数字字符串排序操作

对数据库中数字字符串排序:
加上这一行就行了 亲身体验
query.collation(Collation.of("zh").numericOrdering(true));
还有根据字符串排序时又是顺序并不是我们所想的字典序,加上下面这个也ok
query.collation(Collation.of("zh"));

分页:

//分页
query.limit(10);
//排序
Sort sort=Sort.by(Sort.Direction.DESC,"timestamp");
query.with(sort);

criteria:文章来源地址https://www.toymoban.com/news/detail-670526.html

关键字 解释
eq 等于,第一个参数是对象属性,第二个参数是值
allEq 参数为一个Map对象,相当于多个eq的叠加
gt 大于
ge 大于等于
lt 小于
le 小于等于
between 在两个值之间Expression.between(“age”,new Integer(10),new Integer(20));
like like查询
in in查询
2、更新
User user = new User();
user.setId("5d1312aeb1829c279c6c256b");
user.setName("admin");
user.setAddress("测试");

Query query = Query.query(Criteria.where("_id").is("5d1312aeb1829c279c6c256b"));
Update update = Update.update("name","zs");
//  更新一条数据
mongoTemplate.updateFirst(query,update, User.class);
mongoTemplate.updateFirst(query,update, "mongodb_user");
mongoTemplate.updateFirst(query,update, User.class,"mongodb_user");
//  更新多条数据
mongoTemplate.updateMulti(query,update, User.class);
mongoTemplate.updateMulti(query,update,"mongodb_user");
mongoTemplate.updateMulti(query,update, User.class,"mongodb_user");
//  更新数据,如果数据不存在就新增
mongoTemplate.upsert(query,update, User.class);
mongoTemplate.upsert(query,update,"mongodb_user");
mongoTemplate.upsert(query,update, User.class,"mongodb_user");
3、插入
List<User> list = new ArrayList<>();
User user= new User();//
user.setName("admin");
user.setAddress("测试");
list.add(user);

//  保存对象到mongodb
mongoTemplate.save(user);
mongoTemplate.insert(user);
//  根据集合名称保存对象到mongodb
mongoTemplate.save(user,"mongodb_user");
mongoTemplate.insert(user,"mongodb_user");
//  根据集合名称保存list到mongodb
mongoTemplate.save(list,"mongodb_user");
mongoTemplate.insert(list,"mongodb_user");
mongoTemplate.insert(list,User.class);
4、删除
List<MongoDbJavaTest> list = new ArrayList<>();
User user= new User();
user.setId("5d1312aeb1829c279c6c256b");
list.add(user);

Query query = Query.query(Criteria.where("_id").in("5d1312aeb1829c279c6c256b","5d13133ab1829c29d02ce29c"));
//  根据条件删除
mongoTemplate.remove(query);
mongoTemplate.remove(user);
mongoTemplate.remove(User.class);
//  根据条件删除(可删除多条)
mongoTemplate.remove(query,User.class,"mongodb_user");

到了这里,关于SpringBoot——整合MongoDB详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 整合 MongoDB 实战

    MongoDB是一种NoSQL数据库,而Spring Boot是一个用于快速构建Java应用程序的开发框架。本文将介绍如何使用Spring Boot整合MongoDB,实现数据的持久化和操作。通过本文的学习,读者将了解到Spring Boot和MongoDB的基本概念和用途,并理解为什么选择使用它们进行整合。 在开始整合之前,

    2024年02月14日
    浏览(44)
  • 【MongoDB】SpringBoot整合MongoDB

    引入依赖: 1.1 创建集合 创建一个 ”products“ 集合,如果不存在则创建,存在则不创建。 1.2 删除集合 @Document 修饰范围:用在类上 作用:用来映射这个类的一个对象为 mongo 中一条文档数据 属性:{value、collection} 用来指定操作的集合名称 @Id 修饰范围:用在成员变量、方法上

    2024年02月16日
    浏览(50)
  • SpringBoot 整合 MongoDB 连接 阿里云MongoDB

      注:spring-boot-starter-data-mongodb 2.7.5;jdk 1.8  阿里云MongoDB是 副本集实例的 在网上查找了一番,大多数都是教连接本地mongodb或者linux上的mongodb 阿里云上有java版连接教程,但它不是SpringBoot方法配置的,是手动写死的很不方便。 通过程序代码连接MongoDB副本集实例 下面进行配置

    2024年02月14日
    浏览(48)
  • MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查

    阿丹:         之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。 MongoDB文档--基本概念_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客 MongoDB文档--基本安装-linu

    2024年02月14日
    浏览(47)
  • SpringBoot整合MongoDB

    提示:以下是本篇文章正文内容,MongoDB 系列学习将会持续更新 ①添加 SpringData 依赖: ②配置 yml 文件 ,官方连接配置文档 方式一: 方式二: ③直接注入 MongoTemplate 进行操作 回到目录… @Document 修饰范围 :用在类上。 作用 :用来映射这个类的一个对象为 Mongo 中一条文档

    2023年04月26日
    浏览(37)
  • SpringBoot——整合Mongodb

    Mongdb是一个开源,高性能, 无模式的文档型数据库 ,NoSQL数据库产品中的一种,是 最像 关系型数据库的非关系型数据库。 用户数据 存储位置:数据库 特征:永久性存储,修改频率极低 游戏装备数据 存储位置:数据库, MongDB 特征:永久性存储与临时存储相结合,修改频率

    2024年02月10日
    浏览(35)
  • MongoDB - 整合 SpringBoot 操作全流程

    目录 一、MongoDB 整合 SpringBoot 1.1、引入依赖 1.2、配置文件 1.3、集合操作 1.4、相关注解 1.5、文档操作 1.5.1、查询 1.5.2、更新 1.5.3、删除 uri 格式为: mongodb://ip 地址:mongodb 端口号/集合名 Ps:以 demo 集合为例 a)创建集合 b)删除集合 a)@Document 修饰范围:在类上. 作用:映射当

    2024年01月17日
    浏览(33)
  • springboot整合redis,MongoDB,Elasticsearch(ES)

    目录  springboot整合redis 连接Redis 字符串操作 哈希表操作 列表操作 集合操作 有序集合操作 lettcus与jedis的区别  springboot整合MongoDB 新增数据 查询数据 更新数据 删除数据  springboot整合Elasticsearch(ES) 创建ElasticsearchRepository 创建实体类 增删改查 搜索 Spring Boot整合Redis,需要使

    2024年02月05日
    浏览(39)
  • SpringBoot 如何使用 Spring Data MongoDB 访问 MongoDB

    在现代应用程序开发中,许多应用都依赖于数据库来存储和检索数据。MongoDB 是一个流行的 NoSQL 数据库,而 Spring Boot 是一个广泛使用的 Java 开发框架。本文将介绍如何使用 Spring Boot 和 Spring Data MongoDB 来访问和操作 MongoDB 数据库。 MongoDB 是一个开源的 NoSQL 数据库,它以文档的

    2024年02月07日
    浏览(41)
  • SpringBoot--中间件技术-3:整合mongodb,整合ElasticSearch,附案例含代码(简单易懂)

    实现步骤: pom文件导坐标 yaml配置文件配置mongodb: 随便建一个pojo 测试: 装配MongoTemplate模板类,调用方法 整合MongoDB总结: 导坐标 写配置文件 核心类MongoTemplate调用 前提准备:数据库+ES 数据库建表语句: 实现步骤: pom文件到坐标 yaml配置文件 创建实体类: 对应数据库表

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包