环境说明

  • 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
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
WHERE ( su.username LIKE '%12%' OR um.username LIKE '%12%' OR um.nickname LIKE '%12%' )

问题说明

Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘ew.customSqlSegment’.

因我在查询条件中使用了customSqlSegment,所以报错了。

版本为:Mybatis Plus 3.0-RC3

原因

Mybatis Plus版本过低的问题,需要版本大于或等于3.0.7

解决

  1. 不升版本改查询条件中的customSqlSegmentsqlSegment
    改为如下即可
    <if test="ew.sqlSegment != null and ew.sqlSegment != ''">
    WHERE ${ew.sqlSegment}
    </if>
  2. 升级版本到3.0.7以上

参考文献