广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >SpringBoot——整合MongoDB详解
  • 902
分享到

SpringBoot——整合MongoDB详解

mongodbspringbootjava 2023-09-01 10:09:19 902人浏览 独家记忆
摘要

引入依赖 org.springframework.boot spring-boot-starter-data-mongoDB 配置文件 spring: data: monGodb:

引入依赖

<dependency>   <groupId>org.springframework.bootgroupId>   <artifactId>spring-boot-starter-data-mongoDBartifactId>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方式

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.*;@SpringBootTestpublic 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);    }}

测试类:

@SpringBootTestpublic 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));还有根据字符串排序时又是顺序并不是我们所想的字典序,加上下面这个也okquery.collation(Collation.of("zh"));

分页:

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

criteria:

关键字解释
eq等于,第一个参数是对象属性,第二个参数是值
allEq参数为一个Map对象,相当于多个eq的叠加
gt大于
ge大于等于
lt小于
le小于等于
between在两个值之间Expression.between(“age”,new Integer(10),new Integer(20));
likelike查询
inin查询

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);//  保存对象到mongodbmongoTemplate.save(user);mongoTemplate.insert(user);//  根据集合名称保存对象到mongodbmongoTemplate.save(user,"mongodb_user");mongoTemplate.insert(user,"mongodb_user");//  根据集合名称保存list到mongodbmongoTemplate.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");

来源地址:https://blog.csdn.net/cold___play/article/details/130570308

--结束END--

本文标题: SpringBoot——整合MongoDB详解

本文链接: https://www.lsjlt.com/news/388111.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot——整合MongoDB详解
    引入依赖 org.springframework.boot spring-boot-starter-data-mongodb 配置文件 spring: data: mongodb: ...
    99+
    2023-09-01
    mongodb spring boot java
  • SpringBoot整合MongoDB的步骤详解
    目录项目结构:1.pom引入mongodb依赖2 配置application.properties3.创建mongodb文档映射实体类SpringBoot中MongoDB常用注解:4...
    99+
    2022-11-12
  • SpringBoot整合之SpringBoot整合MongoDB的详细步骤
    目录一、创建项目,选择依赖二、引入相关依赖(非必要)三、如果是第一次使用MongoDB,首先先创建用户四、定义核心配置文件六、创建dao层,这里的dao层有两种写法MongoDB 是...
    99+
    2022-11-12
  • springboot整合mongodb
    目录1.MongoDB的安装和简介1.1简介1.2安装1.3配置环境变量和检查安装情况2.springboot集成mongodb2.1pom文件中maven的引入2.2properties文件配置2.3dao层的编写2....
    99+
    2023-03-31
    Java Springboot整合mongodb mongodb的安装使用
  • springboot整合mongodb并实现crud步骤详解
    整合 首先我们得使用springboot整合咱们的mongodb,第一步,当然是引入依赖啦 <!--mybatis--> <dependency> ...
    99+
    2022-11-12
  • SpringBoot整合MyBatisPlus详解
    目录1.什么是springboot自动装配?2.springboot注解:3.springboot整合mybatisplus实现增删改查1.什么是springboot自动装配? 自动...
    99+
    2023-05-16
    Java SpringBoot SpringBoot整合MyBatisPlus
  • SpringBoot整合Thymeleaf详解
    目录 Thymeleaf基本介绍基本语法th:text文本替换th:if和th:unless文本替换th:each foreach循环th:id、th:value、th:c...
    99+
    2022-11-13
  • Springboot整合security详解
    目录前言配置依赖用户配置1.内存用户存储2.数据库用户存储3.LDAP用户存储4.自定义用户存储拦截配置前言 在进行框架选型时最常用的选择就是在Spring security 和Sh...
    99+
    2022-11-13
  • SpringBoot整合redis及mongodb的详细过程
    目录一、先看Redis的使用:1. 在pom.XML中添加Redis相关依赖项2. 在application.properties中添加Redis的相关配置3. 新建 service/RedisService 接口及其实...
    99+
    2022-10-23
  • SpringBoot整合MongoDB完整实例代码
    目录一、新建项目二、docker-compose 配置mongoDB三、SpringBoot配置MongoDB问题:Exception authenticating MongoCre...
    99+
    2022-11-13
  • springboot如何进行整合mongodb
    springboot如何进行整合mongodb,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。准备工作安装 MongoDBjdk 1.8maven 3.0idea环境依赖在p...
    99+
    2023-06-19
  • springboot整合mybatis流程详解
    目录1.mybatis是什么2.整合2.1 导入依赖2.2 创建包和类2.3 在application.yaml配置mybatis3.使用注解版mybaits4.实战过程1.myba...
    99+
    2022-11-13
  • SpringBoot如何整合nacos详解
    目录一、什么是nacos二、快速使用三、启动nacos四、项目整合nacos一、什么是nacos nacos支持基于dns和基于rpc的服务发现,可以作为springCloud的注册...
    99+
    2022-11-12
  • SpringBoot整合Canal方法详解
    目录pom.xml 添加 canal.client 依赖业务功能处理简单连接程序单次获取数据循环获取数据解析 storeValue 值不同的类型进行不同的处理一次性获取多条数据ack...
    99+
    2022-12-21
    SpringBoot整合Canal SpringBoot Canal
  • SpringBoot整合Swagger教程详解
    目录一、关于 Swagger二、Swagger 的安装1、下载 Swagger2、安装 Swagger三、Swagger 的使用1、编写接口2、启用 Swagger3、查看接口文档四...
    99+
    2023-05-15
    SpringBoot整合Swagger SpringBoot Swagger
  • SpringBoot整合Quartz方法详解
    目录基础依赖cron表达式通用内存任务工程启动时就在执行的任务手动控制某个任务定义任务借助Web-Controller去开启该任务持久化配置Quartz为我们准备了sql数据表暂停任...
    99+
    2023-05-17
    SpringBoot整合Quartz SpringBoot Quartz
  • springboot详解整合swagger方案
    目录1、Swagger简介2、整合步骤1、Swagger简介 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 官网: (...
    99+
    2022-11-13
  • SpringBoot详解整合JWT教程
    目录1、概述2、优势所在3、结构组成3.1、标头(Header)3.2、有效负载(Payload)3.3、签名(Signature)4、Spring boot整合JWT 导入依赖1、...
    99+
    2022-11-13
  • SpringBoot整合MongoDB的实现代码
    目录一、添加Maven依赖二、application.yml配置三、代码中使用Mongo1.Mongo适用场景2.以我最近博客开发的一个联系我为例(这里我使用Mongo)MongoD...
    99+
    2022-11-12
  • SpringBoot整合MongoDB的实现步骤
    目录一、技术介绍 1.MongoDB是什么? 二、使用步骤 1.引入maven库 2.具体使用示例 3.配置文件 4.单元测试 总结 一、技术介绍 1.MongoDB是什么? M...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作