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
a1a04a2216
commit
b53e545425
55
README.md
55
README.md
@ -44,9 +44,9 @@
|
|||||||
* service继承MyBaseService (可选)
|
* service继承MyBaseService (可选)
|
||||||
* serviceImpl继承MyBaseServiceImpl (可选)
|
* serviceImpl继承MyBaseServiceImpl (可选)
|
||||||
|
|
||||||
## MyQueryWrapper用法
|
## MyQuery用法
|
||||||
|
|
||||||
简单的3表查询
|
### 简单的3表查询
|
||||||
```java
|
```java
|
||||||
class test {
|
class test {
|
||||||
@Resource
|
@Resource
|
||||||
@ -99,7 +99,7 @@ WHERE (
|
|||||||
* lambda() string查询转lambda查询
|
* lambda() string查询转lambda查询
|
||||||
* sql组装由mp完成,正常使用没有sql注入风险
|
* sql组装由mp完成,正常使用没有sql注入风险
|
||||||
|
|
||||||
分页查询
|
### 分页查询
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class test {
|
class test {
|
||||||
@ -136,7 +136,7 @@ RIGHT JOIN area a on addr.area_id = a.id
|
|||||||
LIMIT ?,?
|
LIMIT ?,?
|
||||||
```
|
```
|
||||||
|
|
||||||
还可以怎么操作,但不建议
|
### 还可以这么操作,但不建议
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class test {
|
class test {
|
||||||
@ -187,11 +187,11 @@ WHERE (
|
|||||||
ORDER BY addr.id DESC
|
ORDER BY addr.id DESC
|
||||||
```
|
```
|
||||||
|
|
||||||
# MyLambdaQueryWrapper用法
|
## MyLambdaQueryWrapper用法
|
||||||
|
|
||||||
### MyLambdaQueryWrapper更符合面向对象(OOP),没有难以理解的常量(魔术值),全部基于lambda,但好像不那么好理解
|
### MyLambdaQueryWrapper更符合面向对象(OOP),没有难以理解的常量(魔术值),全部基于lambda,但好像不那么好理解
|
||||||
|
|
||||||
简单的3表查询
|
#### 简单的3表查询
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class test {
|
class test {
|
||||||
@ -199,13 +199,12 @@ class test {
|
|||||||
private UserMapper userMapper;
|
private UserMapper userMapper;
|
||||||
|
|
||||||
void testJoin() {
|
void testJoin() {
|
||||||
List<UserDTO> list = userMapper.selectJoinList(new MyLambdaQueryWrapper<UserEntity>()
|
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, new MyLambdaQueryWrapper<UserEntity>()
|
||||||
.selectAll(UserEntity.class)
|
.selectAll(UserEntity.class)
|
||||||
.leftJoin(UserEntity::getId, UserAddressEntity::getUserId,
|
.leftJoin(UserEntity::getId, UserAddressEntity::getUserId,
|
||||||
r1 -> r1.select(UserAddressEntity::getAddress)
|
r1 -> r1.select(UserAddressEntity::getAddress)
|
||||||
.leftJoin(UserAddressEntity::getAreaId, AreaEntity::getId,
|
.leftJoin(UserAddressEntity::getAreaId, AreaEntity::getId,
|
||||||
r2 -> r2.select(AreaEntity::getProvince)))
|
r2 -> r2.select(AreaEntity::getProvince))));
|
||||||
, UserDTO.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -229,48 +228,18 @@ sql -> 伪代码
|
|||||||
```java
|
```java
|
||||||
class test {
|
class test {
|
||||||
void testJoin() {
|
void testJoin() {
|
||||||
List<UserDTO> list = userMapper.selectJoinList(new MyLambdaQueryWrapper<user表>()
|
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, new MyLambdaQueryWrapper<user表>()
|
||||||
.selectAll(user表实体类.class)//查询user表全部字段
|
.selectAll(user表实体类.class)//查询user表全部字段
|
||||||
.leftJoin(user表on字段, user_address表on字段,
|
.leftJoin(user表on字段, user_address表on字段,
|
||||||
user_address表对象 -> user_address表对象
|
user_address表对象 -> user_address表对象
|
||||||
.select(user_address表address字段)
|
.select(user_address表address字段)
|
||||||
.leftJoin(user_address表表的on字段, area表的on字段,
|
.leftJoin(user_address表表的on字段, area表的on字段,
|
||||||
area表对象 -> area表对象.select(area表的province字段)))
|
area表对象 -> area表对象.select(area表的province字段))));
|
||||||
, UserDTO.class);//返回对象class
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
查询user全部字段和user_address表中的address,tel
|
#### 字段别名,查询字段别名 head_img as userHeadImg
|
||||||
|
|
||||||
```java
|
|
||||||
class test {
|
|
||||||
@Resource
|
|
||||||
private UserMapper userMapper;
|
|
||||||
|
|
||||||
void testJoin() {
|
|
||||||
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, new MyLambdaQueryWrapper<UserEntity>()
|
|
||||||
.selectAll(UserEntity.class)
|
|
||||||
.leftJoin(UserEntity::getId, UserAddressEntity::getUserId,
|
|
||||||
right -> right.select(UserAddressEntity::getAddress, UserAddressEntity::getTel)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
对应sql
|
|
||||||
|
|
||||||
```sql
|
|
||||||
SELECT t0.name,
|
|
||||||
t0.sex,
|
|
||||||
t0.head_img,
|
|
||||||
t0.id,
|
|
||||||
t1.address,
|
|
||||||
t1.tel
|
|
||||||
FROM user t0
|
|
||||||
LEFT JOIN user_address t1 ON t0.id = t1.user_id
|
|
||||||
```
|
|
||||||
|
|
||||||
查询字段别名 head_img as userHeadImg
|
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class test {
|
class test {
|
||||||
@ -302,7 +271,7 @@ FROM user t0
|
|||||||
user left join user_address on user.id = User_address.user_id
|
user left join user_address on user.id = User_address.user_id
|
||||||
第三个参数是右表wrapper对象,可以继续使用,以上方法.
|
第三个参数是右表wrapper对象,可以继续使用,以上方法.
|
||||||
|
|
||||||
连表条件查询
|
#### 条件查询
|
||||||
|
|
||||||
```java
|
```java
|
||||||
class test {
|
class test {
|
||||||
|
@ -3,6 +3,7 @@ package com.github.mybatisplus.interceptor;
|
|||||||
import com.baomidou.mybatisplus.core.MybatisParameterHandler;
|
import com.baomidou.mybatisplus.core.MybatisParameterHandler;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
|
import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
|
import com.github.mybatisplus.toolkit.Constant;
|
||||||
import org.apache.ibatis.executor.resultset.DefaultResultSetHandler;
|
import org.apache.ibatis.executor.resultset.DefaultResultSetHandler;
|
||||||
import org.apache.ibatis.executor.resultset.ResultSetHandler;
|
import org.apache.ibatis.executor.resultset.ResultSetHandler;
|
||||||
import org.apache.ibatis.plugin.*;
|
import org.apache.ibatis.plugin.*;
|
||||||
@ -74,7 +75,7 @@ public class MyResultInterceptor implements Interceptor {
|
|||||||
Object object = mybatisParameterHandler.getParameterObject();
|
Object object = mybatisParameterHandler.getParameterObject();
|
||||||
if (object instanceof Map) {
|
if (object instanceof Map) {
|
||||||
Map<?, ?> args = (Map<?, ?>) object;
|
Map<?, ?> args = (Map<?, ?>) object;
|
||||||
return (Class<?>) args.get("clazz");
|
return (Class<?>) args.get(Constant.CLAZZ);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
package com.github.mybatisplus.method;
|
package com.github.mybatisplus.method;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author yulichang
|
* @author yulichang
|
||||||
* @see com.baomidou.mybatisplus.core.enums.SqlMethod
|
* @see com.baomidou.mybatisplus.core.enums.SqlMethod
|
||||||
@ -50,4 +54,6 @@ public enum SqlMethod {
|
|||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static final List<String> collect = Arrays.stream(SqlMethod.values()).map(SqlMethod::getMethod).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
@ -156,8 +156,8 @@ public class MyLambdaQuery<T> extends MyAbstractLambda<T, MyLambdaQuery<T>>
|
|||||||
/**
|
/**
|
||||||
* 返回一个支持 lambda 函数写法的 wrapper
|
* 返回一个支持 lambda 函数写法的 wrapper
|
||||||
*/
|
*/
|
||||||
public MyQueryWrapper<T> stringQuery() {
|
public MyQuery<T> stringQuery() {
|
||||||
return new MyQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs,
|
return new MyQuery<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs,
|
||||||
expression, sqlSelect, from, lastSql, sqlComment, sqlFirst);
|
expression, sqlSelect, from, lastSql, sqlComment, sqlFirst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,24 +16,24 @@ import java.util.function.Predicate;
|
|||||||
* copy {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
|
* copy {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapper<T>>
|
public class MyQuery<T> extends MyAbstractWrapper<T, String, MyQuery<T>>
|
||||||
implements Query<MyQueryWrapper<T>, T, String> {
|
implements Query<MyQuery<T>, T, String> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询字段
|
* 查询字段
|
||||||
*/
|
*/
|
||||||
private SharedString sqlSelect = new SharedString();
|
private SharedString sqlSelect = new SharedString();
|
||||||
|
|
||||||
public MyQueryWrapper() {
|
public MyQuery() {
|
||||||
this(null);
|
this(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MyQueryWrapper(T entity) {
|
public MyQuery(T entity) {
|
||||||
super.setEntity(entity);
|
super.setEntity(entity);
|
||||||
super.initNeed();
|
super.initNeed();
|
||||||
}
|
}
|
||||||
|
|
||||||
public MyQueryWrapper(T entity, String... columns) {
|
public MyQuery(T entity, String... columns) {
|
||||||
super.setEntity(entity);
|
super.setEntity(entity);
|
||||||
super.initNeed();
|
super.initNeed();
|
||||||
this.select(columns);
|
this.select(columns);
|
||||||
@ -44,9 +44,9 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
|
|||||||
*
|
*
|
||||||
* @param entityClass 本不应该需要的
|
* @param entityClass 本不应该需要的
|
||||||
*/
|
*/
|
||||||
public MyQueryWrapper(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
|
public MyQuery(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
|
||||||
Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
|
Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
|
||||||
SharedString sqlSelect, SharedString from, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
|
SharedString sqlSelect, SharedString from, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
|
||||||
super.setEntity(entity);
|
super.setEntity(entity);
|
||||||
super.setEntityClass(entityClass);
|
super.setEntityClass(entityClass);
|
||||||
this.paramNameSeq = paramNameSeq;
|
this.paramNameSeq = paramNameSeq;
|
||||||
@ -60,7 +60,7 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MyQueryWrapper<T> select(String... columns) {
|
public MyQuery<T> select(String... columns) {
|
||||||
if (ArrayUtils.isNotEmpty(columns)) {
|
if (ArrayUtils.isNotEmpty(columns)) {
|
||||||
this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
|
this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MyQueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
public MyQuery<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
|
||||||
super.setEntityClass(entityClass);
|
super.setEntityClass(entityClass);
|
||||||
this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
|
this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
|
||||||
return typedThis;
|
return typedThis;
|
||||||
@ -99,8 +99,8 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
|
|||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected MyQueryWrapper<T> instance() {
|
protected MyQuery<T> instance() {
|
||||||
return new MyQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
|
return new MyQuery<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
|
||||||
null, null, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
|
null, null, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
|
||||||
}
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user