Spring中访问MongoDB-Spring入门学习笔记14

课程内容来自极客时间玩转Spring全家桶,侵私删,链接如下
https://time.geekbang.org/course/intro/100023501

第七天1/2

MongoDB使用前准备

NoSQL

四大块:KV类型的Redis和Memcache、
文档类型的MongoDB与Couchbase、
列存储HBase还有Cassandra、
图数据库Neo4j

MongoDB数据库

通过Spring Data MongoDB来支持
像JDBCTemplate ,Spring Data 提供有MongoDB template
像JPA repository ,Spring Data 提供有 MongoDB repository

注解

@Document类似@Entity
@Id
MongoDB根据Id进行auto-sharding处理各种数据分片的复杂性

初始化MongoDB的库和权限

上一次笔记中已经配置好了用户名与密码root
先启动容器

docker start mongo

然后启动bash,连接DB

docker exec -it mongo bash
mongo -u root -p root

创建库springbucks(其实是使用此库,但系统会自动创建)

use springbucks

依行输入创建用户及权限

 db.createUser(
  {
  user: "springbucks",
  pwd: "springbucks",
  roles: [
  { role: "readWrite", db: "springbucks" }
  ]
  }

在这里插入图片描述

Spring中访问MongoDB

运行程序,可以看到配置及输出info
在这里插入图片描述
通过cmd连接到数据库可以看到文档型数据库存储的插入信息
在这里插入图片描述

使用MongoTemplate

MongoDB Template中@Id 的注解是springframework.data.annotation.Id 而不是JPA中的Id

在application.properties中配置spring.data.mongodb.uri=来指定数据库

伪代码

@SpringBootApplication
@Slf4j
public class MongoDemoApplication implements ApplicationRunner {
    
    
	@Autowired
	private MongoTemplate mongoTemplate;

	public static void main(String[] args) {
    
    
		SpringApplication.run(MongoDemoApplication.class, args);
	}

	@Bean
	public MongoCustomConversions mongoCustomConversions() {
    
    
		return new MongoCustomConversions(Arrays.asList(new MoneyReadConverter()));
	}

	@Override
	public void run(ApplicationArguments args) throws Exception {
    
    
	
    //逻辑代码
	···
	}

使用MongoRepository

加上EnableMongoRepositories注解开启支持

伪代码

@Slf4j
@SpringBootApplication
@EnableMongoRepositories
public class MongoRepositoryDemoApplication implements CommandLineRunner {
    
    
	@Autowired
	private CoffeeRepository coffeeRepository;

	public static void main(String[] args) {
    
    
		SpringApplication.run(MongoRepositoryDemoApplication.class, args);
	}

	@Bean
	public MongoCustomConversions mongoCustomConversions() {
    
    
		return new MongoCustomConversions(Arrays.asList(new MoneyReadConverter()));
	}

	@Override
	public void run(String... args) throws Exception {
    
    
	    //逻辑代码
	···
	}

CoffeeRepository 类

package geektime.spring.data.mongodemo.repository;

import geektime.spring.data.mongodemo.model.Coffee;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;

public interface CoffeeRepository extends MongoRepository<Coffee, String> {
    
    
    List<Coffee> findByName(String name);
}

题外话:为什么注入MongoCustomConversions的Bean

MoneyReadConverter方法把document转换成money

在spring data mongoDB 是怎么在spring boot中配置的

spring boot autoconfig
下的 data 下的 mongo 下的mongoDataAutoConfiguration

发现中间传入一个mongoCustomConvertions,不包含任何转换,所以我们只要把自己定义的转换传入,就可以替换

而且还标注了ConditionalOnMissingBean注解,就是没有Bean不包含任意转换的是默认使用的
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43596589/article/details/112833963