Mybatis Plus 多条件分页查询
环境说明
- Mybatis Plus 3.0-RC3 or later
- Spring Boot 2.1.3.RELEASE
步骤说明
Controller@SysLog(MODULE = "sys", REMARK = "根据条件查询所有运营中心账户表列表")
@ApiOperation("根据条件查询所有运营中心账户表列表")
@GetMapping(value = "/list")
@PreAuthorize("hasAuthority('sys:sysOperationsCenter:read')")
public Object getSysOperationsCenterByPage(
SysOperationsCenter entity,
@RequestParam(value = "keyword", defaultValue = "") String keyword,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize
) {
try {
QueryWrapper<SysOperationsCenter> queryWrapper = new QueryWrapper<>(entity);
if (StringUtils.isNotBlank(keyword)) {
queryWrapper.and(wrapper -> wrapper.like("su.username", keyword)
.or()
.like("um.username", keyword)
.or()
.like("um.nickname", keyword));
}
return new CommonResult().success(ISysOperationsCenterService.findByPage(new Page<SysOperationsCenter>(pageNum, pageSize), queryWrapper));
} catch (Exception e) {
log.error("根据条件查询所有运营中心账户表列表:%s", e.getMessage(), e);
}
return new CommonResult().failed();
}
IService/**
* 获取分页
* @param page
* @param queryWrapper
* @return
*/
IPage<SysOperationsCenter> findByPage(IPage<SysOperationsCenter> page, @Param("ew") QueryWrapper<SysOperationsCenter> queryWrapper);
ServiceImpl@Override
public IPage<SysOperationsCenter> findByPage(IPage<SysOperationsCenter> page, QueryWrapper<SysOperationsCenter> queryWrapper) {
return sysOperationsCenterMapper.findByPage(page, queryWrapper);
}
Mapper<select id="findByPage" resultType="com.zscat.mallplus.sys.entity.SysOperationsCenter">
SELECT soc.*,
su.username as userName,
um.username as memberUsername,
um.nickname as memberNickname
FROM sys_operations_center soc
LEFT JOIN sys_user su ON soc.user_id = su.id
LEFT JOIN ums_member um on soc.member_id = um.id
<if test="ew.sqlSegment != null and ew.sqlSegment != ''">
WHERE ${ew.sqlSegment}
</if>
</select>
执行日志
Execute SQL: |
问题说明
Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘ew.customSqlSegment’.
因我在查询条件中使用了customSqlSegment,所以报错了。
版本为:Mybatis Plus 3.0-RC3
原因
Mybatis Plus版本过低的问题,需要版本大于或等于3.0.7
解决
- 不升版本改查询条件中的
customSqlSegment
为sqlSegment
改为如下即可<if test="ew.sqlSegment != null and ew.sqlSegment != ''">
WHERE ${ew.sqlSegment}
</if> - 升级版本到3.0.7以上