Java使用MongoDB数据库存储BigDecimal类型的数据

直接使用BigDecimal类型存储数据到MongoDB里面会变成数组,最后查询的数据会报错,需要做一下转换。

报错信息:

"Cannot convert [0.00] of type class java.util.ArrayList into an instance of class java.math.BigDecimal! Implement a custom Converter<class java.util.ArrayList, class java.math.BigDecimal> and register it with the CustomConversions. Parent object was:

 解决方案:

import org.bson.types.Decimal128;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.ReadingConverter;
import org.springframework.data.convert.WritingConverter;

import java.math.BigDecimal;

/**
 * BigDecimal转Decimal128
 *
 */
@ReadingConverter
@WritingConverter
public class BigDecimalToDecimal128Converter implements Converter<BigDecimal, Decimal128> {
    @Override
    public Decimal128 convert(BigDecimal source) {
        return new Decimal128(source);
    }
}
import org.bson.types.Decimal128;
import org.springframework.core.convert.converter.Converter;

import java.math.BigDecimal;

/**
 * Decimal128转BigDecimal
 *
 */
public class Decimal128ToBigDecimalConverter implements Converter<Decimal128, BigDecimal> {
    @Override
    public BigDecimal convert(Decimal128 source) {
        return source.bigDecimalValue();
    }
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.convert.*;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;

import java.util.ArrayList;
import java.util.List;


@Configuration
public class MongodbConfig {

    /**
     * 自定义转换
     *
     * @param mongoMappingContext mongoMappingContext
     * @param factory             factory
     * @return 转换
     */
    @Bean
    public MappingMongoConverter mappingMongoConverter(MongoMappingContext mongoMappingContext,
                                                       MongoDatabaseFactory factory) {
        mongoMappingContext.setAutoIndexCreation(true);
        mongoMappingContext.afterPropertiesSet();
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
        MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
        converter.setTypeMapper(new DefaultMongoTypeMapper(null));
        List<Object> list = new ArrayList<>();
        list.add(new BigDecimalToDecimal128Converter());
        list.add(new Decimal128ToBigDecimalConverter());
        converter.setCustomConversions(new MongoCustomConversions(list));
        return converter;
    }

    /**
     * 上下文
     *
     * @return 上下文
     */
    @Bean
    public MongoMappingContext mongoMappingContext() {
        return new MongoMappingContext();
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java操作MongoDB数据库的基本方法,包括连接数据库、插入数据、查询数据、更新数据和删除数据等操作: 1.连接数据库 ```java // 导入MongoDB驱动包 import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; // 连接MongoDB数据库 MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); ``` 2.插入数据 ```java // 导入MongoDB驱动包 import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; // 连接MongoDB数据库 MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); // 获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("users"); // 插入数据 Document document = new Document("name", "张三").append("age", 18).append("gender", "男"); collection.insertOne(document); ``` 3.查询数据 ```java // 导入MongoDB驱动包 import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; // 连接MongoDB数据库 MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); // 获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("users"); // 查询数据 FindIterable<Document> findIterable = collection.find(); for (Document document : findIterable) { System.out.println(document.toJson()); } ``` 4.更新数据 ```java // 导入MongoDB驱动包 import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import com.mongodb.client.result.UpdateResult; import com.mongodb.client.model.Filters; import com.mongodb.client.model.Updates; // 连接MongoDB数据库 MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); // 获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("users"); // 更新数据 UpdateResult updateResult = collection.updateOne(Filters.eq("name", "张三"), Updates.set("age", 20)); System.out.println("更新的数据条数:" + updateResult.getModifiedCount()); ``` 5.删除数据 ```java // 导入MongoDB驱动包 import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.model.Filters; // 连接MongoDB数据库 MongoClient mongoClient = new MongoClient("localhost", 27017); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); // 获取集合 MongoCollection<Document> collection = mongoDatabase.getCollection("users"); // 删除数据 DeleteResult deleteResult = collection.deleteOne(Filters.eq("name", "张三")); System.out.println("删除的数据条数:" + deleteResult.getDeletedCount()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值