mybatis-plus 泛型传参,100行代码变10行
概要
做了一个功能。需要把基础数据的几十个类数据复制一份出来,当然这也不是什么难事,就是重复的代码一直拷贝复制拷贝复制,太繁琐了。那就需要解决一个问题,那就是:动态构建查询条件的泛型方法。不说了 直接上代码。
技术细节
private void copyListBeanNotNull2Bean(Long oldCompanyId,Long newCompanyId,Class<? extends BaseComEntity> pojoClass){
String []mapperClassNameArr = pojoClass.getName().split("\\.");
String mapperClassName = org.thymeleaf.util.StringUtils.unCapitalize(mapperClassNameArr[mapperClassNameArr.length-1])+ "Mapper";
EnhanceBaseMapper baseMapper = (EnhanceBaseMapper) SpringContextUtil.getBean(mapperClassName);
List<? extends BaseComEntity> oldList = selectByCompanyAndDelTag(oldCompanyId, baseMapper,pojoClass);
List<Object> newList = new ArrayList<>();
oldList.forEach(obj -> {
obj.setId(IdUtil.CreateSnowFlakeId());
obj.setCompanyId(newCompanyId);
newList.add(obj);
});
if(!newList.isEmpty()){
baseMapper.batchInsertSelective(newList);
}
}
public <T extends BaseComEntity> List<T> selectByCompanyAndDelTag(Long oldComId, BaseMapper<T> baseMapper,Class<T> entityType ) {
LambdaQueryWrapper<T> queryWrapper = new LambdaQueryWrapper<>(entityType);
queryWrapper.eq(T::getCompanyId, oldComId)
.eq(T::getDelTag, false);
return baseMapper.selectList(queryWrapper);
}
小结
怎么样。这样是不是比你直接复制粘贴几十个类,再一个个去selectList简单多了呀。
###技术分享###