mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
1.0.9
This commit is contained in:
parent
fd49a1fafc
commit
81cea3a5b2
@ -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个类
|
||||
|
@ -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<T> extends LambdaQueryWrapper<T> {
|
||||
/**
|
||||
* 字段别名
|
||||
*/
|
||||
private String alias;
|
||||
|
||||
public AliasLambdaQueryWrapper<T> setAlias(String alias) {
|
||||
this.alias = alias;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重写字段序列化方法
|
||||
*/
|
||||
@Override
|
||||
protected String columnToString(SFunction<T, ?> column, boolean onlyColumn) {
|
||||
String as = super.columnToString(column, onlyColumn);
|
||||
return StringUtils.isBlank(alias) ? as : (alias + StringPool.DOT + as);
|
||||
}
|
||||
}
|
@ -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<T> extends QueryWrapper<T> {
|
||||
/**
|
||||
* 字段别名
|
||||
*/
|
||||
private String alias;
|
||||
|
||||
public AliasQueryWrapper<T> setAlias(String alias) {
|
||||
this.alias = alias;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重写字段序列化方法
|
||||
*/
|
||||
@Override
|
||||
protected String columnToString(String column) {
|
||||
return StringUtils.isBlank(alias) ? column : (alias + StringPool.DOT + column);
|
||||
}
|
||||
}
|
82
src/main/java/com/github/yulichang/common/support/README.md
Normal file
82
src/main/java/com/github/yulichang/common/support/README.md
Normal file
@ -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<UserDO> {
|
||||
|
||||
@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
|
||||
|
||||
```
|
||||
<select id="userLeftJoin" resultType="UserDTO">
|
||||
select
|
||||
u.*,
|
||||
ua.tel
|
||||
from
|
||||
user u
|
||||
left join user_address ua on u.id = ua.user_id
|
||||
${ew.customSqlSegment}
|
||||
</select>
|
||||
```
|
||||
|
||||
使用wrapper:
|
||||
|
||||
```java
|
||||
class MpJoinTest {
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
UserDTO userDTO = userMapper.userLeftJoin(new AliasLambdaQueryWrapper<UserDO>()
|
||||
.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
|
Loading…
x
Reference in New Issue
Block a user