添加application.yaml配置文件org.springframework.boot spring-boot-starter-parent2.3.8.RELEASE org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-data-mongodborg.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest com.alibaba fastjson1.2.75
server:
port: 8081
spring:
data:
mongodb:
host: 192.168.70.149
port: 27017
database: dev
## 开启自动驼峰命名,低于 @Feild优先级
field-naming-strategy: org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy
## 打印nosql日志
logging:
level:
org:
springframework:
data:
mongodb:
core: debug
添加java配置类
@Configuration
public class MongoConfig {
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory mongoDbFactory, MongoMappingContext mongoMappingContext) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory);
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}
新建实体对象
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.time.LocalDateTime;
import java.util.List;
@document("bill")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BillDetail {
private String id;
private String billNo;
private String province;
private String city;
private String county;
private LocalDateTime createdTime;
private Integer price;
private String username;
private String sex;
@Field("productInfos")
private List productInfos;
}
注意,实体对象的基本类型 一定要用包装类型,用Integer 而 不用Int,原因Integer默认值为Null,Int默认值0,新增对象时若不显式复制,int类型price会默认插入0,而Integer类型时,不会插入。
验证代码: BillDetail billDetail = new BillDetail();
String suffix = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSSSS"));
billDetail.setBillNo("0304"+ suffix);
billDetail.setCity("深圳市");
billDetail.setProvince("广东省");
BillDetail insert = mongoTemplate.insert(billDetail);
String id = insert.getId();
log.info("插入文档返回id:{}",id);
当price类型为Int时,本次执行效果
{ _id: ObjectId("616e85fd4d87d14b28004360"),
bill_no: '03042021101916465376100',
province: '广东省',
city: '深圳市',
price: 0,
sex: 0,
_class: 'com.vm.data.entity.BillDetail' }
当price类型为Int时,本次执行效果
{ _id: ObjectId("616e8eafb592682589d63af8"),
bill_no: '03042021101917235899000',
province: '广东省',
city: '深圳市',
_class: 'com.vm.data.entity.BillDetail' }
配置文件和配置类效果解释
打印NoSql日志:
去掉_class字段和驼峰命名



