mybatis-plus ${ew.customSqlSegment} 使用的史诗级大坑
时间:2022-11-09 22:30:01
mybatis-plus ${ew.customSqlSegment} 史诗级坑
今天在使用mybatis-plus的时候偷懒${ew.customSqlSegment} 构造自定义sql结果。
${ew.customSqlSegment} 一直为“ ”。
我以为是我自己sql写错了,换方法还是不行。
select id="mySelectPage" resultType="Customer"> select * from (select a.*,concat(concat(b.name,'-'),b.employee_id) as 'uploadUserName' from customer a,user b where a.upload_user_id = b.id ) as c ${ew.customSqlSegment}
结果输出一看
System.out.println(queryWrapper.getCustomSqlSegment()); System.out.println(queryWrapper.getSqlSelect()); System.out.println(queryWrapper.getSqlSegment());
全是空
最后发现在官方备注中
/** * 获取自定义SQL 简化自定义XML复杂情况 * 使用方法
* `自定义sql` ${ew.customSqlSegment}
* 1.逻辑删除需要自己拼接条件 (以前自定义也是如此)
* 2.不支持wrapper附带实体的情况 (wrapper自带实体会更麻烦)
* 3.用法 ${ew.customSqlSegment} (不需要where标签包裹,切记!)
* 4.ew是wrapper定义别名可以自行替换
*/ public String getCustomSqlSegment() {
MergeSegments expression = getExpression(); if (Objects.nonNull(expression)) {
NormalSegmentList normal = expression.getNormal(); String sqlSegment = getSqlSegment(); if (StringUtils.isNotBlank(sqlSegment)) {
if (normal.isEmpty()) {
return sqlSegment; } else {
return Constants.WHERE + StringPool.SPACE + sqlSegment; } } } return StringPool.EMPTY; }
而我刚好触犯第二条,我直接用实体类构造的queryWrapper,所以一直是null。
被烦了一天,特此记录!!!