MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查

阿丹:

        之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。

使用技术介绍:

        概念说明:

        spring-data-mongodb 提供 MongoTemplate 与 MongoRepository两种操作方式
MongoRepository 操作简单 缺点是不够灵活
MongoTemplate 操作灵活,在项目中可以灵活使用这两种方式

MongoTemplate 

        MongoTemplate是Spring Data MongoDB项目的一部分,它是一个Spring的扩展,为使用MongoDB数据库的应用程序提供了抽象层。MongoTemplate提供了一个简单而强大的方法来执行各种数据库操作,而无需编写低级别的MongoDB驱动程序代码。

MongoTemplate的主要功能包括:

  1. 插入和更新文档:MongoTemplate提供了一种方便的方法来插入和更新MongoDB数据库中的文档。
  2. 查询文档:MongoTemplate提供了多种查询方法,可以使用各种查询参数来检索数据库中的文档,包括查询条件、排序、限制和投影。
  3. 聚合操作:MongoTemplate支持聚合框架,可以执行复杂的聚合操作,如计数、分组、求和等。
  4. 索引管理:MongoTemplate可以创建、删除和查询数据库索引。
  5. 命令和操作:MongoTemplate还支持各种数据库命令和操作,如计算数据库统计信息、执行存储过程等。

使用MongoTemplate可以简化MongoDB数据库操作的开发工作,提供更高的生产力和更好的可维护性。

MongoRepository

MongoRepository是Spring Data MongoDB项目中的另一个抽象层,它是基于MongoTemplate的更高级别的抽象。MongoRepository提供了一个基于注解的接口,用于定义与MongoDB数据库的交互。通过使用MongoRepository,你可以专注于定义数据访问逻辑,而无需编写低级别的数据库操作代码。

MongoRepository的主要功能包括:

  1. 查询文档:MongoRepository提供了一种方便的方法来查询数据库中的文档。通过使用注解,你可以定义查询条件、排序、限制和投影。
  2. 聚合操作:MongoRepository支持聚合框架,可以执行复杂的聚合操作,如计数、分组、求和等。
  3. 分页查询:MongoRepository提供了分页查询功能,可以限制查询结果的数量并获取下一页的结果。
  4. 自定义查询:如果你需要执行更复杂的查询操作,MongoRepository还提供了自定义查询的方法,可以编写存储过程或使用MongoDB的查询语言执行自定义查询。

使用MongoRepository可以使你的代码更加简洁和可维护,因为它提供了一种声明式的方式来访问MongoDB数据库。通过注解和自动实现的接口,你可以专注于实现业务逻辑,而无需关心底层的数据库操作细节。

spring-boot中使用MongoRepository进行增删改查

阿丹:

        使用MongoRepository的好处是和 MyBatis-Plus很像提供了很多经过封装好的方法。很方便(对于简单的增删改查来说)。但是我发现竟然没有!!修改的封装好的用法。

1、引入依赖

 核心依赖:


            org.springframework.boot
            spring-boot-starter-data-mongodb

这个依赖是Spring Boot提供的用于与MongoDB数据库进行交互的starter依赖。它包含了所需的库和依赖项,以便在使用Spring Boot开发应用程序时方便地使用MongoDB。

具体来说,这个依赖提供了以下功能:

  1. 自动配置:Spring Boot会自动配置与MongoDB数据库的连接,包括创建Mongo客户端、设置连接属性等。
  2. MongoTemplate:自动配置了MongoTemplate,这是一个用于执行各种数据库操作的核心类。通过使用MongoTemplate,你可以方便地进行文档的插入、更新、查询等操作。
  3. MongoRepository:自动配置了MongoRepository,这是一个基于注解的接口,用于定义与MongoDB数据库的交互。通过继承MongoRepository,你可以方便地进行查询、聚合操作等。
  4. 模板化操作:通过使用MongoTemplate和MongoRepository,你可以以模板化的方式执行数据库操作,这使得代码更加简洁、可读性更好。

总之,通过添加这个依赖,可以方便地使用Spring Boot与MongoDB进行集成,而无需手动配置和编写低级别的数据库操作代码。

其他依赖:(如果小伙伴想直接开启一个简单的spring-boot项目可直接拿走)


        
            org.springframework.boot
            spring-boot-starter-data-mongodb
        
        
            org.projectlombok
            lombok
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-tomcat
            provided
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

2、写入连接MongoDB配置文件采用application.yml文件

spring:
  data:
    mongodb:
      host: 127.0.0.1 #指定MongoDB服务地址
      port: 27017 #指定端口,默认就为27017
      database: article#指定使用的数据库(集合)
      authentication-database: admin # 登录认证的逻辑库名
      username:  #用户名
      password:  #密码

注意:

        如果没有设置连接的用户的话可以根据实际情况删除一部分配置文件。

        相对于MySQL不一样的是:在MySQL中一个用户可以管理多个数据库,但是MongoDB每个库都要一个独立的管理用户,连接的时候需要输入对应的用户密码。

3、有关实体类的书写(有坑注意!!)

主要注解:

         1、@Document,对应MongoDB中的文档,也就是数据库中的最基本的数据单元,由键值对组成,类似于JSON格式,可以存储不同字段,字段的值可以包括其他文档,数组和文档数组。

        2、@Id(主键):用来将成员变量的值映射为文档的_id的值,可以看我之前的文档有讲到如何给_id赋值。

        3、@Index(索引):索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,能够对数据文档中的数据进行排序。索引可以大大提高文档查询效率。

        4、@Field(字段):文档中的字段,类似于MySQL中的列概念。

        5、@Aggregation(聚合):聚合主要用于数据处理,例如统计平均值、求和等。

示例:

package com.adn.mongodb.common;

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;

/**
 * 阿丹实体类
 * */
@Data
@Document(collection = "ExampleDB")
public class Adn {
    @Id
    @Field("_id")
    private Long id;//阿丹主键
    @Field("name")
    private String name;//阿丹名称
    @Field("gender")
    private String gender;//阿丹性别
    @Field("specialty")
    private String specialty;//特长描述
}

示例中的 Document就是集合的名字

注意:

        一定要去写@Field("name")这个注解,映射到字段的名字,不然查到的都是空!!!

4、使用MongoRepository来完成简单增删改查

这个都是底层封装好的代码,这里直接上代码!如果有疑惑欢迎评论区讨论一下子 

controller控制层

package com.adn.mongodb.controller;

import com.adn.mongodb.common.Adn;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 控制层器
 * */
@RestController
public class MongodbController {
    @Autowired
    private MongodbService mongodbService;


    /**
     * 根据id来进行查询
     * */
    @GetMapping("/adn/{id}")
    public Adn  adn(@PathVariable String  id) {
        System.out.println(id);
        return mongodbService.adn(id);
    }
    /**
     * 增加数据插入数据
     * */
    @PostMapping("/save")
    public Adn  save(@RequestBody Adn adn) {
        return mongodbService.save(adn);
    }
    // @RequestMapping("/adn")
    // public String adn() {

    /**
     * 修改
     * */
    @PutMapping("/update")
    public Adn update(@RequestBody Adn adn) {

        return mongodbService.update(adn);
    }
    /**
     * 插入因为没有对应的方法,所以使用单查询+删除+新增来处理
     * */

    /**
     * 删除
     * */
    @DeleteMapping("/delete/{id}")
    public void delete(@PathVariable String id) {
        mongodbService.delete(id);
    }


}

service层接口

package com.adn.mongodb.service;

import com.adn.mongodb.common.Adn;

public interface MongodbService {
    Adn adn(String id);


    Adn save(Adn adn);

    Adn update(Adn adn);

    void delete(String id);
}

service层实现类

package com.adn.mongodb.service.Impl;

import com.adn.mongodb.common.Adn;
import com.adn.mongodb.mapper.AdnMapper;
import com.adn.mongodb.service.MongodbService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class MongodbServiceImpl implements MongodbService {
    @Autowired
    private AdnMapper adnMapper;
    @Override
    public Adn adn(String id) {
        Adn res = null;
        Optional byId = adnMapper.findById(id);
        System.out.println(byId);
        boolean present = byId.isPresent();
        if(present){
            res = byId.get();
        }
        return res;
    }

    @Override
    public Adn save(Adn adn) {
        return adnMapper.save(adn);
    }

    @Override
    public Adn update(Adn adn) {
        return adnMapper.updata(adn);
    }

    @Override
    public void delete(String id) {
        adnMapper.deleteById(id);
    }


}

dao层(我因为习惯所以写了mapper)

重点:要继承MongoRepository这个类!!!

package com.adn.mongodb.mapper;

import com.adn.mongodb.common.Adn;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.Optional;

public interface AdnMapper extends MongoRepository {
    
}

你可能感兴趣的:(mongodb,mongodb,数据库)