没用好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); 。。。 }