阿丹:
之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。
概念说明:
spring-data-mongodb
提供 MongoTemplate
与 MongoRepository
两种操作方式MongoRepository
操作简单 缺点是不够灵活MongoTemplate
操作灵活,在项目中可以灵活使用这两种方式
MongoTemplate
MongoTemplate是Spring Data MongoDB项目的一部分,它是一个Spring的扩展,为使用MongoDB数据库的应用程序提供了抽象层。MongoTemplate提供了一个简单而强大的方法来执行各种数据库操作,而无需编写低级别的MongoDB驱动程序代码。
MongoTemplate的主要功能包括:
使用MongoTemplate可以简化MongoDB数据库操作的开发工作,提供更高的生产力和更好的可维护性。
MongoRepository
MongoRepository是Spring Data MongoDB项目中的另一个抽象层,它是基于MongoTemplate的更高级别的抽象。MongoRepository提供了一个基于注解的接口,用于定义与MongoDB数据库的交互。通过使用MongoRepository,你可以专注于定义数据访问逻辑,而无需编写低级别的数据库操作代码。
MongoRepository的主要功能包括:
使用MongoRepository可以使你的代码更加简洁和可维护,因为它提供了一种声明式的方式来访问MongoDB数据库。通过注解和自动实现的接口,你可以专注于实现业务逻辑,而无需关心底层的数据库操作细节。
MongoRepository进行增删改查
阿丹:
使用MongoRepository的好处是和
MyBatis-Plus很像提供了很多经过封装好的方法。很方便(对于简单的增删改查来说)。但是我发现竟然没有!!修改的封装好的用法。
核心依赖:
org.springframework.boot
spring-boot-starter-data-mongodb
这个依赖是Spring Boot提供的用于与MongoDB数据库进行交互的starter依赖。它包含了所需的库和依赖项,以便在使用Spring Boot开发应用程序时方便地使用MongoDB。
具体来说,这个依赖提供了以下功能:
总之,通过添加这个依赖,可以方便地使用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
spring:
data:
mongodb:
host: 127.0.0.1 #指定MongoDB服务地址
port: 27017 #指定端口,默认就为27017
database: article#指定使用的数据库(集合)
authentication-database: admin # 登录认证的逻辑库名
username: #用户名
password: #密码
注意:
如果没有设置连接的用户的话可以根据实际情况删除一部分配置文件。
相对于MySQL不一样的是:在MySQL中一个用户可以管理多个数据库,但是MongoDB每个库都要一个独立的管理用户,连接的时候需要输入对应的用户密码。
主要注解:
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")这个注解,映射到字段的名字,不然查到的都是空!!!
MongoRepository来完成简单增删改查
这个都是底层封装好的代码,这里直接上代码!如果有疑惑欢迎评论区讨论一下子
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);
}
}
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);
}
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);
}
}
重点:要继承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 {
}