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

第七天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不包含任意转换的是默认使用的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值