• springboot整合MongoDB进行增删改查(详细)


    mongodb中文手册地址:

    https://www.mongodb.org.cn/tutorial/

    创建springboot项目:

    项目名称:springboot_mongodb

    数据库准备:

    启动mongodb,然后创建一个数据库和集合:

    > use mydb  #使用这个数据库mydb,没有则自动创建
    switched to db mydb
    > db   #显示当前所在的数据
    mydb
    > db.createCollection("stu")   #创建集合,相当于创建表stu
    { "ok" : 1 }
    > db.stu.save({"id":1,"name":"tom","age":88})   #向集合中插入一行数据
    WriteResult({ "nInserted" : 1 })
    > db.stu.find()   #查询 集合中的所有数据
    { "_id" : ObjectId("62ecb249ee5d91af9b348550"), "id" : 1, "name" : "tom", "age" : 88 }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    用可视化工具看:
    在这里插入图片描述

    或者这样再插入一条数据:

    db.stu.save({“_id”:2,“name”:“bbb”,“age”:33})
    结果如下:

    在这里插入图片描述

    先增加这两个数据;

    引入依赖和填写配置:

    
            
            
                org.springframework.boot
                spring-boot-starter-web
                2.6.10
            
            
            
                org.springframework.boot
                spring-boot-starter-data-mongodb
                2.6.10
            
            
            
                org.projectlombok
                lombok
                1.18.18
            
            
                org.springframework.boot
                spring-boot-starter
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    application.properties:
    我这里是llinux中的docker安转mongodb,mydb为我的数据库名字,没有密码和用户名,

    #mongo配置,地址,端口号,数据库名字
    spring.data.mongodb.host=192.168.211.111
    spring.data.mongodb.port=27017
    spring.data.mongodb.database=mydb
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    有密码连接的:

    spring:
      data:
        mongodb:
          uri: mongodb://用户名:密码@服务器IP:端口/数据库名
          # 上方为明确指定某个数据的用户进行连接
          # 也可以使用admin 数据库中的用户进行连接  统一到admin 数据库进行认证
          # admin 用户认证 url 写法: mongodb://账户:密码%40@ip:端口/数据库名?
          authSource=admin&authMechanism=SCRAM-SHA-1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    创建repository包,service包,controller包,entity包:

    在这里插入图片描述

    创建实体类Stu:

    package com.fan.springboot_mongodb.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Document(collection = "stu")  //类似于@Table标签,用于指明数据库表名/集合名
    public class Stu {
        @Id
        private Long id;
        private String name;
        private Integer age;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    _id映射层中如何处理字段
    MongoDB 要求所有文档的字段拥有_id 。如果您不提供,驱动程序将分配ObjectId一个生成的值。当您使用 时MappingMongoConverter,某些规则会控制 Java 类中的属性如何映射到该_id字段:

    用@Id注释的属性或字段 将会自动 映射到该_id字段
    即我们可以这样认为,属性的id就是对应数据库中的_id,查询的时候传入id,将来查的是_id

    repository层,即mapper/dao层:

    此接口继承extends MongoRepository基本接口:

    package com.fan.springboot_mongodb.repository;
    
    import com.fan.springboot_mongodb.entity.Stu;
    import org.springframework.data.mongodb.repository.MongoRepository;
    import org.springframework.stereotype.Repository;
    
    /*接口继承此接口MongoRepository,第二个参数是id属性的包装类  */
    @Repository
    public interface StuRepository extends MongoRepository {
    
        Stu findStuById(Long id); //此方法不用实现,mongodb帮我们根据我们的名字去实现方法
        //findStuById等方法要按照一定的约束来才可以帮我们实现,查询以findxxxBy等
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    MongoRepository接口定义了基本的一些curd方法:类似于mybatis-plus中的BaseMapper接口
    在这里插入图片描述

    service层:

    package com.fan.springboot_mongodb.service;
    
    import com.fan.springboot_mongodb.entity.Stu;
    
    public interface StuService {
        //定义一个查询方法
        Stu findStuById(Long id);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    实现类:

    package com.fan.springboot_mongodb.service.impl;
    
    import com.fan.springboot_mongodb.entity.Stu;
    import com.fan.springboot_mongodb.repository.StuRepository;
    import com.fan.springboot_mongodb.service.StuService;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    @Service
    public class StuServiceImpl implements StuService {
        //注入dao
        @Resource
        private StuRepository stuRepository;
    
        @Override
        public Stu findStuById(Long id) {
            Stu stu = stuRepository.findStuById(id);
            return stu;
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    controller层:

    package com.fan.springboot_mongodb.controller;
    
    import com.fan.springboot_mongodb.entity.Stu;
    import com.fan.springboot_mongodb.service.StuService;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.annotation.Resource;
    
    @RestController
    public class StuController {
        //注入service
        @Resource
        private StuService stuService;
    
        @GetMapping("/findStuById/{id}")
        public Stu findStuById(@PathVariable Long id){
            Stu stuById = stuService.findStuById(id);
            return stuById;
        }
    
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    此时数据库数据如下:

    在这里插入图片描述

    测试:
    在这里插入图片描述

    在这里插入图片描述

    发现id=1查不出来,从这里看出来我们的id进了数据库会被传值给_id主键;

    其他增删改查方法:

    controller:

    package com.fan.springboot_mongodb.controller;
    
    import com.fan.springboot_mongodb.entity.Stu;
    import com.fan.springboot_mongodb.service.StuService;
    import org.springframework.web.bind.annotation.*;
    
    import javax.annotation.Resource;
    
    @RestController
    public class StuController {
        //注入service
        @Resource
        private StuService stuService;
    
        @GetMapping("/findStuById/{id}")
        public Stu findStuById(@PathVariable Long id){
            Stu stuById = stuService.findStuById(id);
            return stuById;
        }
        //增加
        @PostMapping("/saveStu")
        public void saveStu(@RequestBody Stu stu){
             stuService.saveStu(stu);
    
        }
        //删除
        @DeleteMapping("/deleteStuById/{id}")
        public void deleteStuById(@PathVariable Long id){
            stuService.deleteStuById(id);
    
        }
        //修改
        @PutMapping("/updateStu")
        public void updateStu(@RequestBody Stu stu){
            stuService.updateStu(stu);
    
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    service:

    package com.fan.springboot_mongodb.service;
    
    import com.fan.springboot_mongodb.entity.Stu;
    
    public interface StuService {
        //定义一个查询方法
        Stu findStuById(Long id);
    
        void saveStu(Stu stu);
    
        void deleteStuById(Long id);
    
        void updateStu(Stu stu);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    实现类:

    package com.fan.springboot_mongodb.service.impl;
    
    import com.fan.springboot_mongodb.entity.Stu;
    import com.fan.springboot_mongodb.repository.StuRepository;
    import com.fan.springboot_mongodb.service.StuService;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    @Service
    public class StuServiceImpl implements StuService {
        //注入dao
        @Resource
        private StuRepository stuRepository;
    
        @Override
        public Stu findStuById(Long id) {
            Stu stu = stuRepository.findStuById(id);
            return stu;
        }
    
        @Override
        public void saveStu(Stu stu) {
            stuRepository.save(stu);//MongonRepository底层封装了save方法
        }
    
        @Override
        public void deleteStuById(Long id) {
            stuRepository.deleteById(id);//deleteById是底层封装好的
        }
    
        @Override
        public void updateStu(Stu stu) {
            stuRepository.save(stu);//当stu中包含数据库中有的id的时候,save是更新
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    dao层:

    package com.fan.springboot_mongodb.repository;
    
    import com.fan.springboot_mongodb.entity.Stu;
    import org.springframework.data.mongodb.repository.MongoRepository;
    import org.springframework.stereotype.Repository;
    
    /*接口继承此接口MongoRepository,第二个参数是id属性的包装类  */
    @Repository
    public interface StuRepository extends MongoRepository {
    
        Stu findStuById(Long id);
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    测试:

    在这里插入图片描述

    删除:
    在这里插入图片描述

    修改:

    在这里插入图片描述

    查:

    在这里插入图片描述

  • 相关阅读:
    C# new 和 override 的区别
    EAV模型(实体-属性-值)的设计和低代码的处理方案(2)--数据的查询处理
    三台服务器使用docker搭建redis一主二从三哨兵,概念-搭建-整合springboot【保姆级】
    MFC Windows 程序设计[138]之黑白钢琴键(附源码)
    Linux替换默认源(yum报错 [Errno 14] curl#7)
    原三高搜索条件-多选问题
    Vue入门介绍
    数智化重塑冷链物流行业,SaaS云系统开发方案赋能冷链企业实现高效运营
    用DIV+CSS技术设计的美食主题网站(web前端网页制作课作业)美食餐饮网站设计与实现(HTML+CSS+JavaScript)
    【系统架构设计】计算机公共基础知识: 6 知识产权与标准化
  • 原文地址:https://blog.csdn.net/weixin_38568503/article/details/126167107