mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
update
This commit is contained in:
parent
6792627b8b
commit
b6419c55bf
202
README.md
202
README.md
@ -1,6 +1,7 @@
|
|||||||
# mybatis-plus-join
|
# mybatis-plus-join
|
||||||
|
|
||||||
支持连表查询的[mybatis-plus](https://gitee.com/baomidou/mybatis-plus)
|
支持连表查询的[mybatis-plus](https://gitee.com/baomidou/mybatis-plus)
|
||||||
|
只做增强,不做修改,可以使用原生mybatis-plus全部的功能
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
|
|
||||||
@ -8,7 +9,8 @@
|
|||||||
|
|
||||||
### 方法一
|
### 方法一
|
||||||
|
|
||||||
1. 在项目中添加依赖,依赖已经包含了mybatis-plus3.4.2,依赖后无需再次引入mybatis-plus
|
1. 在项目中添加依赖,依赖已经包含了mybatis-plus-boot-starter<3.4.2><br>
|
||||||
|
依赖后无需再次引入mybatis-plus
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -20,26 +22,24 @@
|
|||||||
|
|
||||||
2. 配置插件,添加MyJoinInterceptor
|
2. 配置插件,添加MyJoinInterceptor
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
@Configuration
|
||||||
@Configuration
|
public class MybatisPlusConfig {
|
||||||
public class MybatisPlusConfig {
|
/**
|
||||||
|
* 启用连表拦截器
|
||||||
/**
|
*/
|
||||||
* 启用连表拦截器
|
@Bean
|
||||||
*/
|
public MybatisPlusInterceptor paginationInterceptor() {
|
||||||
@Bean
|
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||||
public MybatisPlusInterceptor paginationInterceptor() {
|
//分页插件
|
||||||
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
|
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
|
||||||
//分页插件
|
//连表插件
|
||||||
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
|
interceptor.addInnerInterceptor(new MyJoinInterceptor());
|
||||||
//连表插件
|
//可以添加多租户或其他插件
|
||||||
mybatisPlusInterceptor.addInnerInterceptor(new MyJoinInterceptor());
|
return mybatisPlusInterceptor;
|
||||||
//可以添加多租户或其他插件
|
}
|
||||||
return mybatisPlusInterceptor;
|
|
||||||
}
|
}
|
||||||
}
|
```
|
||||||
```
|
|
||||||
|
|
||||||
### 使用
|
### 使用
|
||||||
|
|
||||||
@ -65,6 +65,8 @@ public class MybatisPlusConfig {
|
|||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|select(String)|支持|<font color=red>**支持**|不支持|
|
|select(String)|支持|<font color=red>**支持**|不支持|
|
||||||
|select(lambda)|不支持|仅支持主表lambda|所有表lambda|
|
|select(lambda)|不支持|仅支持主表lambda|所有表lambda|
|
||||||
|
|join(String)|支持|支持|不支持|
|
||||||
|
|join(lambda)|不支持|不支持|支持|
|
||||||
|条件String|支持|不支持|不支持|
|
|条件String|支持|不支持|不支持|
|
||||||
|条件lambda|不支持|仅支持主表lambda|所有表lambda|
|
|条件lambda|不支持|仅支持主表lambda|所有表lambda|
|
||||||
|
|
||||||
@ -72,8 +74,8 @@ MyQueryWrapper相当于mp的QueryWrapper
|
|||||||
MyLambdaQueryWrapper相当于mp的LambdaQueryWrapper
|
MyLambdaQueryWrapper相当于mp的LambdaQueryWrapper
|
||||||
|
|
||||||
两者可以无缝切换
|
两者可以无缝切换
|
||||||
MyQueryWrapper.lambda() -> MyLambdaQueryWrapper
|
MyQueryWrapper.lambda() ===> MyLambdaQueryWrapper
|
||||||
MyLambdaQueryWrapper.stringQuery() -> MyQueryWrapper
|
MyLambdaQueryWrapper.stringQuery() ===> MyQueryWrapper
|
||||||
|
|
||||||
## MyQueryWrapper和MyLambdaQueryWrapper
|
## MyQueryWrapper和MyLambdaQueryWrapper
|
||||||
|
|
||||||
@ -102,22 +104,24 @@ class test {
|
|||||||
|
|
||||||
对应sql
|
对应sql
|
||||||
|
|
||||||
```sql
|
```
|
||||||
SELECT t.id,
|
SELECT
|
||||||
t.name,
|
t.id,
|
||||||
t.sex,
|
t.name,
|
||||||
t.head_img,
|
t.sex,
|
||||||
addr.tel,
|
t.head_img,
|
||||||
addr.address,
|
addr.tel,
|
||||||
a.province
|
addr.address,
|
||||||
FROM user t
|
a.province
|
||||||
LEFT JOIN user_address addr on t.id = addr.user_id
|
FROM
|
||||||
RIGHT JOIN area a on addr.area_id = a.id
|
user t
|
||||||
|
LEFT JOIN user_address addr on t.id = addr.user_id
|
||||||
|
RIGHT JOIN area a on addr.area_id = a.id
|
||||||
WHERE (
|
WHERE (
|
||||||
t.id > ?
|
t.id > ?
|
||||||
AND t.sex = ?
|
AND t.sex = ?
|
||||||
AND addr.tel LIKE ?
|
AND addr.tel LIKE ?
|
||||||
AND a.province <= ?)
|
AND a.province <= ?)
|
||||||
```
|
```
|
||||||
|
|
||||||
说明:
|
说明:
|
||||||
@ -152,17 +156,20 @@ class test {
|
|||||||
|
|
||||||
对应sql
|
对应sql
|
||||||
|
|
||||||
```sql
|
```
|
||||||
SELECT t.id,
|
SELECT
|
||||||
t.name,
|
t.id,
|
||||||
t.sex,
|
t.name,
|
||||||
t.head_img,
|
t.sex,
|
||||||
addr.tel,
|
t.head_img,
|
||||||
addr.address,
|
addr.tel,
|
||||||
a.province
|
addr.address,
|
||||||
FROM user t
|
a.province
|
||||||
LEFT JOIN user_address addr on t.id = addr.user_id
|
FROM
|
||||||
RIGHT JOIN area a on addr.area_id = a.id LIMIT ?,?
|
user t
|
||||||
|
LEFT JOIN user_address addr on t.id = addr.user_id
|
||||||
|
RIGHT JOIN area a on addr.area_id = a.id
|
||||||
|
LIMIT ?,?
|
||||||
```
|
```
|
||||||
|
|
||||||
### 还可以这么操作,但不建议
|
### 还可以这么操作,但不建议
|
||||||
@ -180,7 +187,7 @@ class test {
|
|||||||
//行列转换
|
//行列转换
|
||||||
.select("CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex")
|
.select("CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex")
|
||||||
//求和函数
|
//求和函数
|
||||||
.select("sum(a.province) as province")
|
.select("sum(a.province) AS province")
|
||||||
//自定义数据集
|
//自定义数据集
|
||||||
.leftJoin("(select * from user_address) addr on t.id = addr.user_id")
|
.leftJoin("(select * from user_address) addr on t.id = addr.user_id")
|
||||||
.rightJoin("area a on addr.area_id = a.id")
|
.rightJoin("area a on addr.area_id = a.id")
|
||||||
@ -195,31 +202,32 @@ class test {
|
|||||||
|
|
||||||
对应sql
|
对应sql
|
||||||
|
|
||||||
```mysql
|
```
|
||||||
SELECT t.id,
|
SELECT
|
||||||
t.name,
|
t.id,
|
||||||
t.sex,
|
t.name,
|
||||||
t.head_img,
|
t.sex,
|
||||||
addr.tel,
|
t.head_img,
|
||||||
addr.address,
|
addr.tel,
|
||||||
CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex,
|
addr.address,
|
||||||
sum(a.province) as province
|
CASE t.sex WHEN '男' THEN '1' ELSE '0' END AS sex,
|
||||||
FROM user t
|
sum(a.province) AS province
|
||||||
LEFT JOIN (select * from user_address) addr on t.id = addr.user_id
|
FROM
|
||||||
RIGHT JOIN area a on addr.area_id = a.id
|
user t
|
||||||
WHERE t.id = ?
|
LEFT JOIN (select * from user_address) addr on t.id = addr.user_id
|
||||||
AND addr.tel LIKE ?
|
RIGHT JOIN area a on addr.area_id = a.id
|
||||||
AND a.province <= ?)
|
WHERE (
|
||||||
|
t.id = ?
|
||||||
|
AND addr.tel LIKE ?
|
||||||
|
AND a.province <= ?)
|
||||||
ORDER BY
|
ORDER BY
|
||||||
addr.id
|
addr.id DESC
|
||||||
DESC
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## MyJoinLambdaQueryWrapper用法
|
## MyJoinLambdaQueryWrapper用法
|
||||||
|
|
||||||
MyJoinLambdaQueryWrapper与上面连个Wrapper不同,是一套新的支持多表的wrapper
|
MyJoinLambdaQueryWrapper与上面连个Wrapper不同,是一套新的支持多表的wrapper
|
||||||
MyQueryWrapper是基于QueryWrapper扩展的
|
MyQueryWrapper是基于QueryWrapper扩展的 MyLambdaQueryWrapper是基于LambdaQueryWrapper扩展的
|
||||||
MyLambdaQueryWrapper是基于LambdaQueryWrapper扩展的
|
|
||||||
而LambdaQueryWrapper由于泛型约束,不支持扩展成多表的lambdaWrapper
|
而LambdaQueryWrapper由于泛型约束,不支持扩展成多表的lambdaWrapper
|
||||||
|
|
||||||
#### MyJoinLambdaQueryWrapper示例
|
#### MyJoinLambdaQueryWrapper示例
|
||||||
@ -249,22 +257,24 @@ class test {
|
|||||||
|
|
||||||
对应sql
|
对应sql
|
||||||
|
|
||||||
```sql
|
```
|
||||||
SELECT user.id,
|
SELECT
|
||||||
user.name,
|
user.id,
|
||||||
user.sex,
|
user.name,
|
||||||
user.head_img,
|
user.sex,
|
||||||
user_address.tel,
|
user.head_img,
|
||||||
user_address.address AS userAddress,
|
user_address.tel,
|
||||||
area.province,
|
user_address.address AS userAddress,
|
||||||
area.city
|
area.province,
|
||||||
FROM user
|
area.city
|
||||||
LEFT JOIN user_address ON user_address.user_id = user.id
|
FROM
|
||||||
LEFT JOIN area ON area.id = user_address.area_id
|
user
|
||||||
|
LEFT JOIN user_address ON user_address.user_id = user.id
|
||||||
|
LEFT JOIN area ON area.id = user_address.area_id
|
||||||
WHERE (
|
WHERE (
|
||||||
user.id = ?
|
user.id = ?
|
||||||
AND user_address.tel LIKE ?
|
AND user_address.tel LIKE ?
|
||||||
AND user.id > ?)
|
AND user.id > ?)
|
||||||
```
|
```
|
||||||
|
|
||||||
说明:
|
说明:
|
||||||
@ -302,18 +312,20 @@ class test {
|
|||||||
|
|
||||||
对应sql
|
对应sql
|
||||||
|
|
||||||
```mysql
|
```
|
||||||
SELECT user.id,
|
SELECT
|
||||||
user.name,
|
t.id,
|
||||||
user.sex,
|
t.name,
|
||||||
user.head_img,
|
t.sex,
|
||||||
user_address.tel,
|
t.head_img,
|
||||||
user_address.address AS userAddress,
|
t1.tel,
|
||||||
area.province,
|
t1.address AS userAddress,
|
||||||
area.city
|
t2.province,
|
||||||
FROM user
|
t2.city
|
||||||
LEFT JOIN user_address ON user_address.user_id = user.id
|
FROM
|
||||||
LEFT JOIN area ON area.id = user_address.area_id
|
user t
|
||||||
|
LEFT JOIN user_address t1 ON t1.user_id = t.id
|
||||||
|
LEFT JOIN area t2 ON t2.id = t1.area_id
|
||||||
LIMIT ?,?
|
LIMIT ?,?
|
||||||
```
|
```
|
||||||
|
|
||||||
|
14
pom.xml
14
pom.xml
@ -33,7 +33,7 @@
|
|||||||
<jdkVersion>1.8</jdkVersion>
|
<jdkVersion>1.8</jdkVersion>
|
||||||
<jdkVersion.test>1.8</jdkVersion.test>
|
<jdkVersion.test>1.8</jdkVersion.test>
|
||||||
</properties>
|
</properties>
|
||||||
|
<!-- only dependency mybatis-plus-boot-starter -->
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
@ -41,16 +41,8 @@
|
|||||||
<version>3.4.2</version>
|
<version>3.4.2</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>cglib</groupId>
|
|
||||||
<artifactId>cglib</artifactId>
|
|
||||||
<version>3.3.0</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
@ -103,7 +95,7 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<serverId>ossrh</serverId>
|
<serverId>ossrh</serverId>
|
||||||
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
||||||
<!-- <autoReleaseAfterClose>true</autoReleaseAfterClose>-->
|
<!-- <autoReleaseAfterClose>true</autoReleaseAfterClose>-->
|
||||||
<stagingProgressTimeoutMinutes>30</stagingProgressTimeoutMinutes>
|
<stagingProgressTimeoutMinutes>30</stagingProgressTimeoutMinutes>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
@ -174,7 +166,7 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<serverId>ossrh</serverId>
|
<serverId>ossrh</serverId>
|
||||||
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
||||||
<!-- <autoReleaseAfterClose>true</autoReleaseAfterClose>-->
|
<!-- <autoReleaseAfterClose>true</autoReleaseAfterClose>-->
|
||||||
<stagingProgressTimeoutMinutes>30</stagingProgressTimeoutMinutes>
|
<stagingProgressTimeoutMinutes>30</stagingProgressTimeoutMinutes>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
@ -27,7 +27,7 @@ import java.util.stream.Collectors;
|
|||||||
* <p>
|
* <p>
|
||||||
* sqlSelect 由覆盖改为追加
|
* sqlSelect 由覆盖改为追加
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("all")
|
||||||
public class MyLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyLambdaQueryWrapper<T>>
|
public class MyLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyLambdaQueryWrapper<T>>
|
||||||
implements Query<MyLambdaQueryWrapper<T>, T, SFunction<T, ?>>, MyJoin<MyLambdaQueryWrapper<T>> {
|
implements Query<MyLambdaQueryWrapper<T>, T, SFunction<T, ?>>, MyJoin<MyLambdaQueryWrapper<T>> {
|
||||||
|
|
||||||
@ -96,7 +96,12 @@ public class MyLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyLambda
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
@Override
|
@Override
|
||||||
public final MyLambdaQueryWrapper<T> select(SFunction<T, ?>... columns) {
|
public final MyLambdaQueryWrapper<T> select(SFunction<T, ?>... columns) {
|
||||||
if (ArrayUtils.isNotEmpty(columns)) {
|
return select(true, columns);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SafeVarargs
|
||||||
|
public final MyLambdaQueryWrapper<T> select(boolean condition, SFunction<T, ?>... columns) {
|
||||||
|
if (condition && ArrayUtils.isNotEmpty(columns)) {
|
||||||
String s = columnsToString(false, columns);
|
String s = columnsToString(false, columns);
|
||||||
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
||||||
this.sqlSelect.setStringValue(s);
|
this.sqlSelect.setStringValue(s);
|
||||||
@ -109,7 +114,12 @@ public class MyLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyLambda
|
|||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final MyLambdaQueryWrapper<T> select(String... columns) {
|
public final MyLambdaQueryWrapper<T> select(String... columns) {
|
||||||
if (ArrayUtils.isNotEmpty(columns)) {
|
return select(true, columns);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SafeVarargs
|
||||||
|
public final MyLambdaQueryWrapper<T> select(boolean condition, String... columns) {
|
||||||
|
if (condition && ArrayUtils.isNotEmpty(columns)) {
|
||||||
String s = String.join(StringPool.COMMA, columns);
|
String s = String.join(StringPool.COMMA, columns);
|
||||||
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
||||||
this.sqlSelect.setStringValue(s);
|
this.sqlSelect.setStringValue(s);
|
||||||
@ -133,35 +143,47 @@ public class MyLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyLambda
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public MyLambdaQueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
public MyLambdaQueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
||||||
if (entityClass == null) {
|
return select(true, entityClass, predicate);
|
||||||
entityClass = getEntityClass();
|
}
|
||||||
} else {
|
|
||||||
setEntityClass(entityClass);
|
public MyLambdaQueryWrapper<T> select(boolean condition, Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
||||||
}
|
if (condition) {
|
||||||
Assert.notNull(entityClass, "entityClass can not be null");
|
if (entityClass == null) {
|
||||||
String s = TableInfoHelper.getTableInfo(entityClass).chooseSelect(predicate);
|
entityClass = getEntityClass();
|
||||||
List<String> list = Arrays.stream(s.split(StringPool.COMMA)).map(i -> Constant.TABLE_ALIAS + StringPool.DOT + i).collect(Collectors.toList());
|
} else {
|
||||||
String join = String.join(StringPool.COMMA, list);
|
setEntityClass(entityClass);
|
||||||
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
}
|
||||||
this.sqlSelect.setStringValue(join);
|
Assert.notNull(entityClass, "entityClass can not be null");
|
||||||
} else {
|
String s = TableInfoHelper.getTableInfo(entityClass).chooseSelect(predicate);
|
||||||
this.sqlSelect.setStringValue(this.getSqlSelect() + StringPool.COMMA + join);
|
List<String> list = Arrays.stream(s.split(StringPool.COMMA)).map(i -> Constant.TABLE_ALIAS + StringPool.DOT + i).collect(Collectors.toList());
|
||||||
|
String join = String.join(StringPool.COMMA, list);
|
||||||
|
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
||||||
|
this.sqlSelect.setStringValue(join);
|
||||||
|
} else {
|
||||||
|
this.sqlSelect.setStringValue(this.getSqlSelect() + StringPool.COMMA + join);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final MyLambdaQueryWrapper<T> selectAll(Class<T> clazz) {
|
public final MyLambdaQueryWrapper<T> selectAll(Class<T> clazz) {
|
||||||
TableInfo info = TableInfoHelper.getTableInfo(clazz);
|
return selectAll(true, clazz);
|
||||||
List<String> list = new ArrayList<>();
|
}
|
||||||
if (info.havePK()) {
|
|
||||||
list.add(Constant.TABLE_ALIAS + StringPool.DOT + info.getKeyColumn());
|
public final MyLambdaQueryWrapper<T> selectAll(boolean condition, Class<T> clazz) {
|
||||||
}
|
if (condition) {
|
||||||
list.addAll(info.getFieldList().stream().map(i -> Constant.TABLE_ALIAS + StringPool.DOT + i.getColumn()).collect(Collectors.toList()));
|
TableInfo info = TableInfoHelper.getTableInfo(clazz);
|
||||||
String join = String.join(StringPool.COMMA, list);
|
List<String> list = new ArrayList<>();
|
||||||
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
if (info.havePK()) {
|
||||||
this.sqlSelect.setStringValue(join);
|
list.add(Constant.TABLE_ALIAS + StringPool.DOT + info.getKeyColumn());
|
||||||
} else {
|
}
|
||||||
this.sqlSelect.setStringValue(this.getSqlSelect() + StringPool.COMMA + join);
|
list.addAll(info.getFieldList().stream().map(i -> Constant.TABLE_ALIAS + StringPool.DOT + i.getColumn()).collect(Collectors.toList()));
|
||||||
|
String join = String.join(StringPool.COMMA, list);
|
||||||
|
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
||||||
|
this.sqlSelect.setStringValue(join);
|
||||||
|
} else {
|
||||||
|
this.sqlSelect.setStringValue(this.getSqlSelect() + StringPool.COMMA + join);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
@ -80,32 +80,50 @@ public class MyQueryWrapper<T> extends AbstractWrapper<T, String, MyQueryWrapper
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MyQueryWrapper<T> select(String... columns) {
|
public MyQueryWrapper<T> select(String... columns) {
|
||||||
if (ArrayUtils.isNotEmpty(columns)) {
|
return select(true, columns);
|
||||||
this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
|
}
|
||||||
|
|
||||||
|
public MyQueryWrapper<T> select(boolean condition, String... columns) {
|
||||||
|
if (condition) {
|
||||||
|
if (ArrayUtils.isNotEmpty(columns)) {
|
||||||
|
this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MyQueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
public MyQueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
||||||
super.setEntityClass(entityClass);
|
return select(true, entityClass, predicate);
|
||||||
this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
|
}
|
||||||
|
|
||||||
|
public MyQueryWrapper<T> select(boolean condition, Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
||||||
|
if (condition) {
|
||||||
|
super.setEntityClass(entityClass);
|
||||||
|
this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
|
||||||
|
}
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public final MyQueryWrapper<T> selectAll(Class<T> clazz) {
|
public final MyQueryWrapper<T> selectAll(Class<T> clazz) {
|
||||||
TableInfo info = TableInfoHelper.getTableInfo(clazz);
|
return selectAll(true, clazz);
|
||||||
List<String> list = new ArrayList<>();
|
}
|
||||||
if (info.havePK()) {
|
|
||||||
list.add(Constant.TABLE_ALIAS + StringPool.DOT + info.getKeyColumn());
|
public final MyQueryWrapper<T> selectAll(boolean condition, Class<T> clazz) {
|
||||||
}
|
if (condition) {
|
||||||
list.addAll(info.getFieldList().stream().map(i -> Constant.TABLE_ALIAS + StringPool.DOT + i.getColumn()).collect(Collectors.toList()));
|
TableInfo info = TableInfoHelper.getTableInfo(clazz);
|
||||||
String join = String.join(StringPool.COMMA, list);
|
List<String> list = new ArrayList<>();
|
||||||
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
if (info.havePK()) {
|
||||||
this.sqlSelect.setStringValue(join);
|
list.add(Constant.TABLE_ALIAS + StringPool.DOT + info.getKeyColumn());
|
||||||
} else {
|
}
|
||||||
this.sqlSelect.setStringValue(this.getSqlSelect() + StringPool.COMMA + join);
|
list.addAll(info.getFieldList().stream().map(i -> Constant.TABLE_ALIAS + StringPool.DOT + i.getColumn()).collect(Collectors.toList()));
|
||||||
|
String join = String.join(StringPool.COMMA, list);
|
||||||
|
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
||||||
|
this.sqlSelect.setStringValue(join);
|
||||||
|
} else {
|
||||||
|
this.sqlSelect.setStringValue(this.getSqlSelect() + StringPool.COMMA + join);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,9 @@ import com.github.yulichang.toolkit.MyLambdaUtils;
|
|||||||
import com.github.yulichang.wrapper.interfaces.MyLambdaJoin;
|
import com.github.yulichang.wrapper.interfaces.MyLambdaJoin;
|
||||||
import com.github.yulichang.wrapper.interfaces.MySFunctionQuery;
|
import com.github.yulichang.wrapper.interfaces.MySFunctionQuery;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -23,7 +25,7 @@ import java.util.stream.Collectors;
|
|||||||
/**
|
/**
|
||||||
* copy {@link com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper}
|
* copy {@link com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper}
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("all")
|
||||||
public class MyJoinLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyJoinLambdaQueryWrapper<T>>
|
public class MyJoinLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyJoinLambdaQueryWrapper<T>>
|
||||||
implements MySFunctionQuery<MyJoinLambdaQueryWrapper<T>>, MyLambdaJoin<MyJoinLambdaQueryWrapper<T>> {
|
implements MySFunctionQuery<MyJoinLambdaQueryWrapper<T>>, MyLambdaJoin<MyJoinLambdaQueryWrapper<T>> {
|
||||||
|
|
||||||
@ -99,7 +101,12 @@ public class MyJoinLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyJo
|
|||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final <S> MyJoinLambdaQueryWrapper<T> select(SFunction<S, ?>... columns) {
|
public final <S> MyJoinLambdaQueryWrapper<T> select(SFunction<S, ?>... columns) {
|
||||||
if (ArrayUtils.isNotEmpty(columns)) {
|
return select(true, columns);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SafeVarargs
|
||||||
|
public final <S> MyJoinLambdaQueryWrapper<T> select(boolean condition, SFunction<S, ?>... columns) {
|
||||||
|
if (condition && ArrayUtils.isNotEmpty(columns)) {
|
||||||
for (SFunction<S, ?> s : columns) {
|
for (SFunction<S, ?> s : columns) {
|
||||||
selectColumns.add(new SelectColumn(MyLambdaUtils.getEntityClass(s), MyLambdaUtils.getColumn(s), null));
|
selectColumns.add(new SelectColumn(MyLambdaUtils.getEntityClass(s), MyLambdaUtils.getColumn(s), null));
|
||||||
}
|
}
|
||||||
@ -109,30 +116,49 @@ public class MyJoinLambdaQueryWrapper<T> extends MyAbstractLambdaWrapper<T, MyJo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <E> MyJoinLambdaQueryWrapper<T> select(Class<E> entityClass, Predicate<TableFieldInfo> predicate) {
|
public <E> MyJoinLambdaQueryWrapper<T> select(Class<E> entityClass, Predicate<TableFieldInfo> predicate) {
|
||||||
TableInfo info = TableInfoHelper.getTableInfo(entityClass);
|
return select(true, entityClass, predicate);
|
||||||
Assert.notNull(info, "table can not be find");
|
}
|
||||||
info.getFieldList().stream().filter(predicate).collect(Collectors.toList()).forEach(
|
|
||||||
i -> selectColumns.add(new SelectColumn(entityClass, i.getColumn(), null)));
|
public <E> MyJoinLambdaQueryWrapper<T> select(boolean condition, Class<E> entityClass, Predicate<TableFieldInfo> predicate) {
|
||||||
|
if (condition) {
|
||||||
|
TableInfo info = TableInfoHelper.getTableInfo(entityClass);
|
||||||
|
Assert.notNull(info, "table can not be find");
|
||||||
|
info.getFieldList().stream().filter(predicate).collect(Collectors.toList()).forEach(
|
||||||
|
i -> selectColumns.add(new SelectColumn(entityClass, i.getColumn(), null)));
|
||||||
|
}
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public final <S, X> MyJoinLambdaQueryWrapper<T> selectAs(SFunction<S, ?> columns, SFunction<X, ?> alias) {
|
public final <S, X> MyJoinLambdaQueryWrapper<T> selectAs(SFunction<S, ?> columns, SFunction<X, ?> alias) {
|
||||||
selectColumns.add(new SelectColumn(MyLambdaUtils.getEntityClass(columns), MyLambdaUtils.getColumn(columns), MyLambdaUtils.getName(alias)));
|
return selectAs(true, columns, alias);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final <S, X> MyJoinLambdaQueryWrapper<T> selectAs(boolean condition, SFunction<S, ?> columns, SFunction<X, ?> alias) {
|
||||||
|
if (condition) {
|
||||||
|
selectColumns.add(new SelectColumn(MyLambdaUtils.getEntityClass(columns), MyLambdaUtils.getColumn(columns), MyLambdaUtils.getName(alias)));
|
||||||
|
}
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final MyJoinLambdaQueryWrapper<T> selectAll(Class<?> clazz) {
|
public final MyJoinLambdaQueryWrapper<T> selectAll(Class<?> clazz) {
|
||||||
TableInfo info = TableInfoHelper.getTableInfo(clazz);
|
return selectAll(clazz);
|
||||||
Assert.notNull(info, "table can not be find -> %s", clazz);
|
}
|
||||||
if (info.havePK()) {
|
|
||||||
selectColumns.add(new SelectColumn(clazz, info.getKeyColumn(), null));
|
public final MyJoinLambdaQueryWrapper<T> selectAll(boolean condition, Class<?> clazz) {
|
||||||
|
if (condition) {
|
||||||
|
TableInfo info = TableInfoHelper.getTableInfo(clazz);
|
||||||
|
Assert.notNull(info, "table can not be find -> %s", clazz);
|
||||||
|
if (info.havePK()) {
|
||||||
|
selectColumns.add(new SelectColumn(clazz, info.getKeyColumn(), null));
|
||||||
|
}
|
||||||
|
info.getFieldList().forEach(c ->
|
||||||
|
selectColumns.add(new SelectColumn(clazz, c.getColumn(), null)));
|
||||||
}
|
}
|
||||||
info.getFieldList().forEach(c ->
|
|
||||||
selectColumns.add(new SelectColumn(clazz, c.getColumn(), null)));
|
|
||||||
return typedThis;
|
return typedThis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSqlSelect() {
|
public String getSqlSelect() {
|
||||||
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
if (StringUtils.isBlank(sqlSelect.getStringValue())) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user