没用好mybatisplus的Wrapper,我真难为情啊
背景
我们的springboot应用程序的持久层,是用jeecgboot框架生成的代码。mybatisplus版本是3.1.2。
在一次对当前程序的sql性能优化时,我重写了BaseMapper的selectPage方法。其中,为Wrapper<T>参数加上了id限制,以提高sql执行性能。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface SbhPlatOrderMapper extends BaseMapper<SbhPlatOrder> {
@Override
default IPage<SbhPlatOrder> selectPage(IPage<SbhPlatOrder> page, @Param(Constants.WRAPPER) Wrapper<SbhPlatOrder> queryWrapper){
PrePageDto prePageDto = selectCountCache(queryWrapper);
page.setTotal(prePageDto.getRowCount());
if (prePageDto.getRowCount()>0) {
if (queryWrapper instanceof LambdaQueryWrapper) {
((LambdaQueryWrapper<SbhPlatOrder>) queryWrapper).between(SbhPlatOrder::getId, prePageDto.getMinId(), prePageDto.getMaxId());
} else if (queryWrapper instanceof QueryWrapper) {
((QueryWrapper<SbhPlatOrder>) queryWrapper).lambda().between(SbhPlatOrder::getId, prePageDto.getMinId(), prePageDto.getMaxId());
}
page.setRecords(selectPageList((page.getCurrent() - 1) * page.getSize(), page.getSize(), queryWrapper));
}
return page;
}
@Cacheable(cacheNames = RedisConfig.SBH_PLAT_ORDER_COUNT_CACHE_KEY,
key = "T(com.emax.zhenghe.common.util.security.MD5Util).md5Encode(#queryWrapper.customSqlSegment)")
PrePageDto selectCountCache(@Param(Constants.WRAPPER) Wrapper<SbhPlatOrder> queryWrapper);
。。。
}


