学习笔记@某Spring视频
第七天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 表示由MongoDB托管
中可以指定collection
// 若未加 @Document ,该 bean save 到 mongo 的 user collection
// 若添加 @Document ,则 save 到 reUser collection
@Document(collection="reUser")
@Id
MongoDB根据Id进行auto-sharding处理各种数据分片的复杂性
Spring中访问MongoDB
运行程序,可以看到配置及输出info
使用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 {
//逻辑代码
···
}
MongoTemplate在引入依赖后直接使用即可,用于样例代码中出现了自定义类型Money类,所以需要MongoCustomConversions注入MoneyReadConverter的Bean进行增强
而后mongoTemplate的save方法就可以直接保存
mongoTemplate的find(query(Criteria.where(“字段”).is(“查找的内容”)),Coffee.class);就可直接查询
还有updateFirst、findById等许多事务的模板方法封装好了在mongoTemplate中
使用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);
}
CoffeeRepository接口 继承MongoRepository后就可以使用其中的方法像JPA一样
在使用的类注入CoffeeRepository
coffeeRepository中封装有insert、save、findAll许多方法,还可以自己实现findByName方法
题外话:为什么注入MongoCustomConversions的Bean
MoneyReadConverter方法把document转换成money
在spring data mongoDB 是怎么在spring boot中配置的
spring boot autoconfig
下的 data 下的 mongo 下的mongoDataAutoConfiguration
发现中间传入一个mongoCustomConvertions,不包含任何转换,所以我们只要把自己定义的转换传入,就可以替换
而且还标注了ConditionalOnMissingBean注解,就是没有Bean不包含任意转换的是默认使用的