009、使用mongodb

一、使用mongodb

1. 添加依赖

        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>

 

2. 配置mongodb连接地址

# application.properties
spring.data.mongodb.uri=mongodb://{user}:{pwd}@{ip}:{port}/{db}

 

3. 实现转换器

比如,我们的model中使用了Money类型的属性,持久化到mongodb中就是money类型的json,从mongo中取出来,要作相应转换。主要是指一些,框架处理不了的类型转换,需要写转换器。

package com.example.mongodb;

import org.bson.Document;
import org.joda.money.CurrencyUnit;
import org.joda.money.Money;
import org.springframework.core.convert.converter.Converter;

public class MoneyReadConverter implements Converter<Document, Money> {

	@Override
	public Money convert(Document source) {
		Document moneyDocument = (Document) source.get("money");
		Document currencyDocument = (Document) moneyDocument.get("currency");
		double amount = Double.parseDouble(moneyDocument.getString("amount"));
		return Money.of(CurrencyUnit.of(currencyDocument.getString("code")), amount);
	}

}

 

实例化bean

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

 

4. 使用MongoRepository

使用 MongoRepository 要继承 org.springframework.data.mongodb.repository.MongoRepository<T, ID> 接口,其中 T 是实体类型, ID 是主键的类型。

package com.example.mongodb;

import java.util.List;

import org.springframework.data.mongodb.repository.MongoRepository;

public interface CoffeeRepository extends MongoRepository<Coffee, String> {

	List<Coffee> findByName(String name);

}

 

5. 调用

主要使用 MongoTemplate 和 MongoRepository

package com.example.mongodb;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.joda.money.CurrencyUnit;
import org.joda.money.Money;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

import lombok.extern.slf4j.Slf4j;

@SpringBootApplication
@Slf4j
public class Application implements CommandLineRunner {

	@Autowired
	private MongoTemplate mongoTemplate;
	
	@Autowired
	private CoffeeRepository coffeeRepository;

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

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

	@Override
	public void run(String... args) throws Exception {

//		mongoTemplate();
		
		Coffee coffee = new Coffee().setName("latte").setPrice(Money.of(CurrencyUnit.of("CNY"), 12))
				.setCreateTime(new Date()).setUpdateTime(new Date());
		Coffee coffee2 = new Coffee().setName("latte red").setPrice(Money.of(CurrencyUnit.of("CNY"), 15))
				.setCreateTime(new Date()).setUpdateTime(new Date());
		List<Coffee> insert = coffeeRepository.insert(Arrays.asList(coffee, coffee2));
		log.info("insert: {}", insert);
		
		Thread.sleep(1000);
		coffee2.setPrice(Money.of(CurrencyUnit.of("CNY"), 35.0));
		coffee2.setUpdateTime(new Date());
		Coffee saveOrUpdate = coffeeRepository.save(coffee2);
		log.info("saveOrUpdate: {}", saveOrUpdate);
		
		coffeeRepository.deleteAll();
		
	}

	private void mongoTemplate() throws InterruptedException {
		Coffee coffee = new Coffee().setName("espresso").setPrice(Money.of(CurrencyUnit.of("CNY"), 12))
				.setCreateTime(new Date()).setUpdateTime(new Date());
		Coffee savedCoffee = mongoTemplate.save(coffee);
		log.info("savedCoffee: {}", savedCoffee);

		List<Coffee> find = mongoTemplate.find(Query.query(Criteria.where("name").is("espresso")), Coffee.class);
		log.info("find: {}", find);

		Thread.sleep(1000);

		UpdateResult updateFirst = mongoTemplate.updateFirst(Query.query(Criteria.where("name").is("espresso")),
				new Update().set("price", Money.of(CurrencyUnit.of("CNY"), 20)).currentDate("updateTime"), Coffee.class);
		Coffee findOne = mongoTemplate.findById(savedCoffee.getId(), Coffee.class);
		log.info("updateFirst: {}, findOne: {}", updateFirst, findOne);

		DeleteResult remove = mongoTemplate.remove(findOne);
		
		log.info("remove: {}", remove);
	}

}

 

源码

Fork me on Gitee

转载于:https://my.oschina.net/tita/blog/3060450

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值