注意:Mybatis Plus 3.0.7 版本才开始用【自定义sql】+【QueryWrapper】,低版本不能使用,还是老实写SQL进行条件拼接
1、源码分析
在
Wrapper<T>
接口中就有如下方法
/**
* 获取自定义SQL 简化自定义XML复杂情况
* 使用方法:自定义sql + ${ew.customSqlSegment}
* 1.逻辑删除需要自己拼接条件 (之前自定义也同样)
* 2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦)
* 3.用法 ${ew.customSqlSegment} (不需要where标签包裹,切记!)
* 4.ew是wrapper定义别名,可自行替换
*/
public abstract String getCustomSqlSegment();
在
AbstractWrapper
抽象类中进行了实现
@Override
public String getCustomSqlSegment() {
// MergeSegments 为 返回 合并 SQL 片段
MergeSegments expression = getExpression();
if (Objects.nonNull(expression)) {
NormalSegmentList normal = expression.getNormal();
String sqlSegment = getSqlSegment();
if (StringUtils.isNotEmpty(sqlSegment)) {
if (normal.isEmpty()) {
return sqlSegment;
} else {
return concatWhere(sqlSegment);