学习笔记@玩转Spring全家桶
课程内容来自极客时间玩转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不包含任意转换的是默认使用的