一.maven引包
<!-- mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
二.mongo连接
yml配置
spring:
data:
mongodb:
uri: mongodb://root(账号):123456(密码)@192.168.2.1:2000/demo(库名)
三.实体类
实体类加上注解@Document, mongo存储的结果就是文档 , collection里填的是我们映射的表名 ,
特别要注意的就是mongo的id类型是ObjectId
@Document(collection = "order_sale_order_usd")
public class MongoSaleOrderUSD {
private ObjectId id;
private Long saleOrderId;
private Long saleOrderProductId;
/**
* 企业id
*/
private Long entId;
/**
* 客户经理id
*/
private Long customerManagerId;
/**
* 客户经理
*/
private String customerManagerName;
......
......(省略getter setter)
}
三.按条件查询列表
直接上代码
List<Criteria> criteriaList = new ArrayList<>();
// 1.企业信息
Criteria entCriteria = Criteria.where("entId").is(userSessionVO.getCurrentEntId());
criteriaList.add(entCriteria);
// 2.业务类型
List<Long> businessTypeList = condition.getBusinessTypeList();
if (!CollectionUtils.isEmpty(businessTypeList)) {
criteriaList.add(Criteria.where("businessType").in(businessTypeList));
}
// 3.订单状态
List<Integer> saleOrderStatusList = condition.getSaleOrderStatusList();
if (!CollectionUtils.isEmpty(saleOrderStatusList)) {
criteriaList.add(Criteria.where("saleOrderStatus").in(saleOrderStatusList));
}
// 10.供应商(表里存储的是一个list)
if (condition.getSupplierId() != null) {
criteriaList.add(Criteria.where("purchaseOrderList")
.elemMatch(Criteria.where("supplierId").is(condition.getSupplierId())));
}
// 8.销售合同号(模糊查询)
String saleContractCode = condition.getSaleContractCode();
if (StringUtils.isNotBlank(saleContractCode)) {
Pattern pattern = SqlUtil.mongoFullLikeWithEscape(saleContractCode);
criteriaList.add(Criteria.where("saleContractCode").regex(pattern));
}
.....(省略部分条件)
Criteria criteria = new Criteria();
Criteria[] criteriaArray = new Criteria[criteriaList.size()];
criteria.andOperator(criteriaList.toArray(criteriaArray));
Query query = Query.query(criteria);
// 排序规则
Sort sort = null;
// 排序
if (!CollectionUtils.isEmpty(saleOrderQueryVO.getQueryOrderList())) {
for (BaseQueryOrderVO baseQueryOrderVO : saleOrderQueryVO.getQueryOrderList()) {
Integer order = baseQueryOrderVO.getOrder();
String field = baseQueryOrderVO.getField();
if (sort == null) {
sort = Sort.by(order == 0 ? Sort.Direction.ASC : Sort.Direction.DESC, field);
continue;
}
sort.and(Sort.by(order == 0 ? Sort.Direction.ASC : Sort.Direction.DESC, field));
}
}
query.with(sort == null ? Sort.by(Sort.Direction.DESC, "createTime", "saleOrderId") : sort);
// 封装了mongoTemplate.find()
List<MongoSaleOrderUSD> mongoSaleOrderList = mongoSaleOrderDao.selectList(pageInfo, query);
注 😃同一层级的Criteria 只能有一个andOperation 或者orOperation,所以多个条件一定要放在一个andOperation 或者orOperation里面
1.查询list里面对象的条件是看上面第十个(存储的是一个list)
2.模糊查询(特殊字符转义)
public static Pattern mongoFullLikeWithEscape(String param) {
if (StringUtils.isBlank(param)) {
return null;
}
return Pattern.compile(StringUtil.concat("^.*", mongoFormatWithEscape(param), ".*$"), Pattern.CASE_INSENSITIVE);
}
下次有时间在介绍一下聚合统计