网上大部分是过时的博客,自己研究了一下午。新版的用法。代码如下 package com.fuli.goods.mongo; import com.fuli.goods.entity.mgdb.ComGoodsCacheEntity; import com.fuli.goods.utils.ComUtils; import com.mongodb.client.result.UpdateResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.BulkOperations; import org.springframework.data.mongodb.core.MongoTemplate; 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 org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @Component @Slf4j public class CompanyGoodsCacheDao { @Autowired private MongoTemplate mongoTemplate; /** * 创建对象 * * @param comGoodsCacheEntity */ public void savecomGoodsCacheEntity(ComGoodsCacheEntity comGoodsCacheEntity) { mongoTemplate.save(comGoodsCacheEntity); mongoTemplate.getDb(); } public ComGoodsCacheEntity findById(String id) { return mongoTemplate.findById(id,ComGoodsCacheEntity.class); } /** * 根据用户名查询对象 * * @param * @return */ public List<ComGoodsCacheEntity> findByParam(ComGoodsCacheEntity comGoodsCacheEntity) { Query query = new Query(); if(comGoodsCacheEntity.getGoodsId()!=null&&comGoodsCacheEntity.getGoodsId().intValue()!=0){ query.addCriteria(Criteria.where("goodsId").is(comGoodsCacheEntity.getGoodsId())); } if(comGoodsCacheEntity.getCompanyId()!=null&&comGoodsCacheEntity.getCompanyId().intValue()!=0){ query.addCriteria(Criteria.where("companyId").is(comGoodsCacheEntity.getCompanyId())); } if(comGoodsCacheEntity.getIsShow()!=null){ query.addCriteria(Criteria.where("isShow").is(comGoodsCacheEntity.getIsShow())); } if(comGoodsCacheEntity.getTypeId()!=null&&comGoodsCacheEntity.getTypeId().intValue()!=0){ query.addCriteria(Criteria.where("typeId").is(comGoodsCacheEntity.getTypeId())); } if(comGoodsCacheEntity.getMaxSalePrice()!=null&&comGoodsCacheEntity.getMinSalePrice().compareTo(BigDecimal.ZERO)!=0){ query.addCriteria(Criteria.where("goodsSalePrice").lt(comGoodsCacheEntity.getMaxSalePrice())); } if(comGoodsCacheEntity.getMinSalePrice()!=null&&comGoodsCacheEntity.getMinSalePrice().compareTo(BigDecimal.ZERO)!=0){ query.addCriteria(Criteria.where("goodsSalePrice").is(comGoodsCacheEntity.getMinSalePrice())); } List<ComGoodsCacheEntity> list = mongoTemplate.find(query, ComGoodsCacheEntity.class); return list; } /** * 更新对象 * * @param comGoodsCacheEntity */ public long updatecomGoodsCacheEntity(ComGoodsCacheEntity comGoodsCacheEntity) { Query query = new Query(Criteria.where("companyId").is(comGoodsCacheEntity.getCompanyId()).andOperator(Criteria.where("goodsId").is(comGoodsCacheEntity.getGoodsId()))); Update update = new Update().set("goodsPrice", comGoodsCacheEntity.getGoodsPrice()) .set("goodsSalePrice", comGoodsCacheEntity.getGoodsSalePrice()) .set("goodsMarketPrice", comGoodsCacheEntity.getGoodsMarketPrice()) .set("IntegralPrice", comGoodsCacheEntity.getIntegralPrice()) .set("isShow", comGoodsCacheEntity.getIsShow()) .set("profitRate", comGoodsCacheEntity.getProfitRate()) .set("sort", comGoodsCacheEntity.getSort()) .set("goodsName",comGoodsCacheEntity.getGoodsName()) .set("typeId", comGoodsCacheEntity.getTypeId()); //更新查询返回结果集的第一条 UpdateResult result = mongoTemplate.updateFirst(query, update, ComGoodsCacheEntity.class); //更新查询返回结果集的所有 // mongoTemplate.updateMulti(query,update,comGoodsCacheEntityEntity.class); if(result != null) return result.getModifiedCount(); else return 0; } /** * 删除对象 * * @param id */ public void deletecomGoodsCacheEntityById(Long id) { Query query = new Query(Criteria.where("_id").is(id)); mongoTemplate.remove(query, ComGoodsCacheEntity.class); } /** * 批量更新 * * @param * @return */ public int bathUpdate(List<ComGoodsCacheEntity> lists) { List<ComGoodsCacheEntity> tlist=new ArrayList<>(); for(int i=0;i<lists.size();i++){ tlist.add(lists.get(i)); if(tlist!=null&&tlist.size()>10000){ try { doUpdate(tlist); }catch (Exception e){ e.printStackTrace(); log.error("批量更新公司商品错误!{}",e.getMessage()); } tlist=new ArrayList<>(); } } if(tlist!=null&&tlist.size()>0){ doUpdate(tlist); } return 1; } /** * 批量插入 * * @param * @return */ public int bathInsert(List<ComGoodsCacheEntity> comGoodsCacheEntitys) { List<ComGoodsCacheEntity> tlist=new ArrayList<>(); for(ComGoodsCacheEntity cacheEntity:comGoodsCacheEntitys){ tlist.add(cacheEntity); if(tlist.size()>=10000){ mongoTemplate.insertAll(tlist); tlist=new ArrayList<>(); } } if(tlist!=null && tlist.size()>0){ mongoTemplate.insertAll(tlist); } return 1; } public void doUpdate(List<ComGoodsCacheEntity> cacheEntities){ String collectionName= ComUtils.determineCollectionName(ComGoodsCacheEntity.class); BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.ORDERED, Object.class, collectionName); cacheEntities.parallelStream().forEach(comGoods -> { Criteria criteria=Criteria.where("companyId").is(comGoods.getCompanyId()).and("goodsId").is(comGoods.getGoodsId()); Update update = new Update(); //更新内容 update.set("goodsName",comGoods.getGoodsName()); update.set("goodsPrice", comGoods.getGoodsPrice()); update.set("goodsSalePrice", comGoods.getGoodsSalePrice()); update.set("goodsMarketPrice", comGoods.getGoodsMarketPrice()); update.set("IntegralPrice", comGoods.getIntegralPrice()); update.set("isShow", comGoods.getIsShow()); update.set("profitRate", comGoods.getProfitRate()); update.set("sort", comGoods.getSort()); update.set("typeId", comGoods.getTypeId()); bulkOps.updateOne(Query.query(criteria), update); }); bulkOps.execute(); } }
public class ComUtils { public static String determineCollectionName(Class<?> entityClass) { if (entityClass == null) { throw new InvalidDataAccessApiUsageException( "No class parameter provided, entity collection can't be determined!"); } String collName = entityClass.getSimpleName(); if(entityClass.isAnnotationPresent(Document.class)) { Document document = entityClass.getAnnotation(Document.class); collName = document.collection(); } else { collName = collName.replaceFirst(collName.substring(0, 1) ,collName.substring(0, 1).toLowerCase()) ; } return collName; } }