From 81cea3a5b222a771e857311ea739f9e6c2fc8d98 Mon Sep 17 00:00:00 2001 From: admin <570810310@qq.com> Date: Mon, 22 Feb 2021 15:54:42 +0800 Subject: [PATCH] 1.0.9 --- .../com/github/yulichang/common/README.md | 2 + .../support/AliasLambdaQueryWrapper.java | 32 ++++++++ .../common/support/AliasQueryWrapper.java | 30 +++++++ .../github/yulichang/common/support/README.md | 82 +++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 src/main/java/com/github/yulichang/common/support/AliasLambdaQueryWrapper.java create mode 100644 src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java create mode 100644 src/main/java/com/github/yulichang/common/support/README.md diff --git a/src/main/java/com/github/yulichang/common/README.md b/src/main/java/com/github/yulichang/common/README.md index 481f406..705f7a7 100644 --- a/src/main/java/com/github/yulichang/common/README.md +++ b/src/main/java/com/github/yulichang/common/README.md @@ -2,6 +2,8 @@ [官方自定义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不支持表别名和多实体泛型,扩展能力有限,对此就行了优化 + ### 使用方法 #### 如需单独使用 请拷贝以下6个类 diff --git a/src/main/java/com/github/yulichang/common/support/AliasLambdaQueryWrapper.java b/src/main/java/com/github/yulichang/common/support/AliasLambdaQueryWrapper.java new file mode 100644 index 0000000..1663b15 --- /dev/null +++ b/src/main/java/com/github/yulichang/common/support/AliasLambdaQueryWrapper.java @@ -0,0 +1,32 @@ +package com.github.yulichang.common.support; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; + +/** + * 字段添加别名 + * + * @author yulichang + */ +public class AliasLambdaQueryWrapper extends LambdaQueryWrapper { + /** + * 字段别名 + */ + private String alias; + + public AliasLambdaQueryWrapper setAlias(String alias) { + this.alias = alias; + return this; + } + + /** + * 重写字段序列化方法 + */ + @Override + protected String columnToString(SFunction column, boolean onlyColumn) { + String as = super.columnToString(column, onlyColumn); + return StringUtils.isBlank(alias) ? as : (alias + StringPool.DOT + as); + } +} diff --git a/src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java b/src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java new file mode 100644 index 0000000..c4b5eed --- /dev/null +++ b/src/main/java/com/github/yulichang/common/support/AliasQueryWrapper.java @@ -0,0 +1,30 @@ +package com.github.yulichang.common.support; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; + +/** + * 字段添加别名 + * + * @author yulichang + */ +public class AliasQueryWrapper extends QueryWrapper { + /** + * 字段别名 + */ + private String alias; + + public AliasQueryWrapper setAlias(String alias) { + this.alias = alias; + return this; + } + + /** + * 重写字段序列化方法 + */ + @Override + protected String columnToString(String column) { + return StringUtils.isBlank(alias) ? column : (alias + StringPool.DOT + 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 new file mode 100644 index 0000000..c708b4f --- /dev/null +++ b/src/main/java/com/github/yulichang/common/support/README.md @@ -0,0 +1,82 @@ +## 别名wrapper用法 + +[官方自定义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不支持表别名和多实体泛型,扩展能力有限,对此就行了优化 + +原理: +AliasQueryWrapper继承QueryWrapper +AliasLambdaQueryWrapper继承LambdaQueryWrapper +这两个类重写了父类字段序列化方法columnToString,添加别名 + +### 使用方法 + +#### AliasLambdaQueryWrapper + +注解: + +```java + +@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}") + UserDTO userLeftJoin(@Param(Constants.WRAPPER) Wrapper queryWrapper); +} +``` + +或者xml + +``` + +``` + +使用wrapper: + +```java +class MpJoinTest { + @Resource + private UserMapper userMapper; + + @Test + void test() { + UserDTO userDTO = userMapper.userLeftJoin(new AliasLambdaQueryWrapper() + .setAlias("u") //指定别名,要与注解或xml中的别名保持一致 + .eq(UserDO::getId, "1") + .like(UserDO::getSex, "3")); + } +} +``` + +对应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 ?) +``` + +#### AliasQueryWrapper + +mybatis-plus原生的QueryWrapper也是可以实现别名的,但是没有统一的转换方法,开发时容易忽略 + +AliasQueryWrapper.setAlias("u").eq("id", 1); +等效与 +QueryWrapper.eq("u.id", 1); + +AliasQueryWrapper别名一次设置全局通用,不需要每个字段都加别名 + +QQ群:1022221898 \ No newline at end of file