This commit is contained in:
yulichang 2021-01-30 21:35:34 +08:00
parent a1a04a2216
commit b53e545425
5 changed files with 34 additions and 58 deletions

View File

@ -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 {

View File

@ -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;

View File

@ -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());
} }

View File

@ -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);
} }

View File

@ -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());
} }