From c124ac63c94f0cb75977c9a9e0a48e0470f9d012 Mon Sep 17 00:00:00 2001 From: admin <570810310@qq.com> Date: Mon, 22 Feb 2021 16:34:25 +0800 Subject: [PATCH] 1.0.9 --- .../common/support/AliasQueryWrapper.java | 6 ++- .../github/yulichang/common/support/README.md | 46 ++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java b/src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java index c4b5eed..eb523b7 100644 --- a/src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java +++ b/src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java @@ -25,6 +25,10 @@ public class AliasQueryWrapper extends QueryWrapper { */ @Override protected String columnToString(String column) { - return StringUtils.isBlank(alias) ? column : (alias + StringPool.DOT + column); + if (column.lastIndexOf(StringPool.DOT) < 0) { + return StringUtils.isBlank(alias) ? column : (alias + StringPool.DOT + column); + } else { + return column; + } } } diff --git a/src/main/java/com/github/yulichang/common/support/README.md b/src/main/java/com/github/yulichang/common/support/README.md index c708b4f..13ac02c 100644 --- a/src/main/java/com/github/yulichang/common/support/README.md +++ b/src/main/java/com/github/yulichang/common/support/README.md @@ -2,7 +2,7 @@ [官方自定义sql](https://mp.baomidou.com/guide/wrapper.html#%E4%BD%BF%E7%94%A8-wrapper-%E8%87%AA%E5%AE%9A%E4%B9%89sql) -官方提供的自定义sql不支持表别名和多实体泛型,扩展能力有限,对此就行了优化 +官方提供的自定义sql不支持表别名和多实体泛型,扩展能力有限,对此就行了优化 原理: AliasQueryWrapper继承QueryWrapper @@ -75,8 +75,50 @@ mybatis-plus原生的QueryWrapper也是可以实现别名的,但是没有统一 AliasQueryWrapper.setAlias("u").eq("id", 1); 等效与 -QueryWrapper.eq("u.id", 1); +QueryWrapper.eq("u.id", 1); AliasQueryWrapper别名一次设置全局通用,不需要每个字段都加别名 +说明: +对于非主表字段查询也是支持的 + +```java +class MpJoinTest { + @Resource + private UserMapper userMapper; + + @Test + void test() { + UserDTO userDTO = userMapper.userLeftJoin(new AliasQueryWrapper<>() + .setAlias("u") + .eq("id", "1") + .like("sex", "3") + .eq("ua.tel", "10086") //如果查询字段中有点(.)则不会添加别名 + .like("ua.address", "北京")); + } +} +``` +对应sql: +``` +select + u.*, + ua.tel +from user u + left join user_address ua on u.id = ua.user_id +WHERE ( + u.id = ? + AND u.sex LIKE ? + AND ua.tel = ? + AND ua.address LIKE ?) +``` + +注意:如果你喜欢骚操作,请使用原生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