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 }

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

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

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

在这里插入图片描述

先增加这两个数据;

引入依赖和填写配置:

<dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.6.10</version>
        </dependency>
        <!--mongodb-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version>2.6.10</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

有密码连接的:

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

创建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;
}

_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<Stu,Long>,第二个参数是id属性的包装类  */
@Repository
public interface StuRepository extends MongoRepository<Stu,Long> {

    Stu findStuById(Long id); //此方法不用实现,mongodb帮我们根据我们的名字去实现方法
    //findStuById等方法要按照一定的约束来才可以帮我们实现,查询以findxxxBy等
}


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);
}

实现类:

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;
    }
}


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;
    }

}


此时数据库数据如下:

在这里插入图片描述

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

在这里插入图片描述

发现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);

    }

}

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);
}

实现类:

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是更新
    }
}

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<Stu,Long>,第二个参数是id属性的包装类  */
@Repository
public interface StuRepository extends MongoRepository<Stu,Long> {

    Stu findStuById(Long id);

}

测试:

在这里插入图片描述

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

修改:

在这里插入图片描述

查:

在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值