diff --git a/src/main/java/com/github/yulichang/common/support/alias/AliasLambdaQueryWrapper.java b/src/main/java/com/github/yulichang/common/support/alias/AliasLambdaQueryWrapper.java index 856a63e..f92afcf 100644 --- a/src/main/java/com/github/yulichang/common/support/alias/AliasLambdaQueryWrapper.java +++ b/src/main/java/com/github/yulichang/common/support/alias/AliasLambdaQueryWrapper.java @@ -7,6 +7,14 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction; /** * 字段添加别名 + * 使用方法: + *

+ * select t.* from table t ${ew.customSqlSegmentAlias("t")} + *

+ * 注意: + * 官方的自定义sql是ew.customSqlSegment,不带括号,是属性 + * 带别名的是 ew.customSqlSegment("t") 带括号,是方法 + * 括号中的别名必须带双引号 * * @author yulichang */ @@ -16,11 +24,6 @@ public class AliasLambdaQueryWrapper extends LambdaQueryWrapper { */ private String alias; - public AliasLambdaQueryWrapper setAlias(String alias) { - this.alias = alias; - return this; - } - /** * 重写字段序列化方法 */ @@ -29,4 +32,9 @@ public class AliasLambdaQueryWrapper extends LambdaQueryWrapper { String as = super.columnToString(column, onlyColumn); return StringUtils.isBlank(alias) ? as : (alias + StringPool.DOT + as); } + + public String customSqlSegment(String alias) { + this.alias = alias; + return super.getCustomSqlSegment(); + } } diff --git a/src/main/java/com/github/yulichang/common/support/alias/README.md b/src/main/java/com/github/yulichang/common/support/alias/README.md index 2c26b1a..bd809e2 100644 --- a/src/main/java/com/github/yulichang/common/support/alias/README.md +++ b/src/main/java/com/github/yulichang/common/support/alias/README.md @@ -17,6 +17,8 @@ AliasLambdaQueryWrapper继承LambdaQueryWrapper #### AliasLambdaQueryWrapper +[感谢mybatis-plus PR 中的一位老哥的想法,以及实现](https://gitee.com/baomidou/mybatis-plus/pulls/137) + 注解: ```java @@ -24,7 +26,7 @@ AliasLambdaQueryWrapper继承LambdaQueryWrapper @Mapper public interface UserMapper extends BaseMapper { - @Select("select u.*,ua.tel from user u left join user_address ua on u.id = ua.user_id ${ew.customSqlSegment}") + @Select("select u.*,ua.tel from user u left join user_address ua on u.id = ua.user_id ${ew.customSqlSegment(\"u\")}") UserDTO userLeftJoin(@Param(Constants.WRAPPER) Wrapper queryWrapper); } ``` @@ -39,10 +41,15 @@ public interface UserMapper extends BaseMapper { from user u left join user_address ua on u.id = ua.user_id - ${ew.customSqlSegment} + ${ew.customSqlSegment("u")} ``` +注意: +官方的自定义sql是ew.customSqlSegment,不带括号,是属性 +带别名的是 ew.customSqlSegment("t"),带括号,是方法 +括号中的别名必须带双引号 + 使用wrapper: ```java @@ -53,7 +60,6 @@ class MpJoinTest { @Test void test() { UserDTO userDTO = userMapper.userLeftJoin(new AliasLambdaQueryWrapper() - .setAlias("u") //指定别名,要与注解或xml中的别名保持一致 .eq(UserDO::getId, "1") .like(UserDO::getSex, "3")); } @@ -102,7 +108,9 @@ class MpJoinTest { } } ``` + 对应sql: + ``` select u.*, @@ -118,11 +126,11 @@ WHERE ( 注意:如果你喜欢骚操作,请使用原生QueryWrapper 举例: + * .eq("(select sex from user where id = u.id)", "男") * .eq("count(u.id)", 1) 不建议在QueryWrapper中使用sql或函数 除非你不考虑后续的维护和sql调优 - QQ群:1022221898 \ No newline at end of file