From fd2829f5d62d94a85dcc2b677e58b0a5922d95b2 Mon Sep 17 00:00:00 2001
From: admin <570810310@qq.com>
Date: Mon, 15 Mar 2021 10:56:03 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B7=9F=E6=96=B0=E5=88=AB=E5=90=8D=E7=94=A8?=
=?UTF-8?q?=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../support/alias/AliasLambdaQueryWrapper.java | 18 +++++++++++++-----
.../yulichang/common/support/alias/README.md | 16 ++++++++++++----
2 files changed, 25 insertions(+), 9 deletions(-)
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