zero0r1

导航

Spring 中使用Jode-Money 与 mongoDB

 
//gradle 引入joda-money
implementation 'org.joda:joda-money:1.0.1'
//引入mongoDB
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

 

MoneyReadConverter.class

public class MoneyReadConverter implements Converter<Document, Money> {
    @Override
    public Money convert(Document source) {
        Document money = (Document) source.get("money");
        double amount = Double.parseDouble(money.getString("amount"));
        String currency = ((Document) money.get("currency")).getString("code");
        return Money.of(CurrencyUnit.of(currency), amount);
    }
}

 

  

spring run

 

@SpringBootApplication
@Slf4j
public class MongoDemoApplication implements ApplicationRunner {

   //更具类型注入bean
    @Autowired
   //byName 注入mongoTemplate(多个bean,使用此方式)
    @Qualifier(value = "mongoTemplate")
    private MongoTemplate mongoTemplate;

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

    //注入一个自定义bean 相关信息可以查看:
   //package org.springframework.boot.autoconfigure.data.mongo;

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

    @Override
    public void run(ApplicationArguments args) throws Exception {
     //保存mongoDB
        Coffee espresso = Coffee.builder()
                .name("espresso")
                .price(Money.of(CurrencyUnit.of("CNY"), 20.0))
                .createTime(new Date())
                .updateTime(new Date()).build();
        Coffee saved = mongoTemplate.save(espresso);
        log.info("Coffee {}", saved);

        List<Coffee> list = mongoTemplate.find(
                Query.query(Criteria.where("name").is("espresso")), Coffee.class);
        log.info("Find {} Coffee", list.size());
        list.forEach(c -> log.info("Coffee {}", c));

        //更新mongoDB
        UpdateResult result = mongoTemplate.updateFirst(query(where("name").is("espresso")),
                new Update().set("price", Money.ofMajor(CurrencyUnit.of("CNY"), 30))
                        .currentDate("updateTime"),
                Coffee.class);
        log.info("Update Result: {}", result.getModifiedCount());
        Coffee updateOne = mongoTemplate.findById(saved.getId(), Coffee.class);
        log.info("Update Result: {}", updateOne);

    }

 

posted on 2019-08-12 23:38  zero0r1  阅读(445)  评论(0编辑  收藏  举报