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 (可选)
* serviceImpl继承MyBaseServiceImpl (可选)
## MyQueryWrapper用法
## MyQuery用法
简单的3表查询
### 简单的3表查询
```java
class test {
@Resource
@ -99,7 +99,7 @@ WHERE (
* lambda() string查询转lambda查询
* sql组装由mp完成,正常使用没有sql注入风险
分页查询
### 分页查询
```java
class test {
@ -136,7 +136,7 @@ RIGHT JOIN area a on addr.area_id = a.id
LIMIT ?,?
```
还可以怎么操作,但不建议
### 还可以这么操作,但不建议
```java
class test {
@ -187,11 +187,11 @@ WHERE (
ORDER BY addr.id DESC
```
# MyLambdaQueryWrapper用法
## MyLambdaQueryWrapper用法
### MyLambdaQueryWrapper更符合面向对象(OOP),没有难以理解的常量(魔术值),全部基于lambda,但好像不那么好理解
简单的3表查询
#### 简单的3表查询
```java
class test {
@ -199,13 +199,12 @@ class test {
private UserMapper userMapper;
void testJoin() {
List<UserDTO> list = userMapper.selectJoinList(new MyLambdaQueryWrapper<UserEntity>()
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, new MyLambdaQueryWrapper<UserEntity>()
.selectAll(UserEntity.class)
.leftJoin(UserEntity::getId, UserAddressEntity::getUserId,
r1 -> r1.select(UserAddressEntity::getAddress)
.leftJoin(UserAddressEntity::getAreaId, AreaEntity::getId,
r2 -> r2.select(AreaEntity::getProvince)))
, UserDTO.class);
r2 -> r2.select(AreaEntity::getProvince))));
}
}
```
@ -229,48 +228,18 @@ sql -> 伪代码
```java
class test {
void testJoin() {
List<UserDTO> list = userMapper.selectJoinList(new MyLambdaQueryWrapper<user表>()
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, new MyLambdaQueryWrapper<user表>()
.selectAll(user表实体类.class)//查询user表全部字段
.leftJoin(user表on字段, user_address表on字段,
user_address表对象 -> user_address表对象
.select(user_address表address字段)
.leftJoin(user_address表表的on字段, area表的on字段,
area表对象 -> area表对象.select(area表的province字段)))
, UserDTO.class);//返回对象class
area表对象 -> area表对象.select(area表的province字段))));
}
}
```
查询user全部字段和user_address表中的address,tel
```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
#### 字段别名,查询字段别名 head_img as userHeadImg
```java
class test {
@ -302,7 +271,7 @@ FROM user t0
user left join user_address on user.id = User_address.user_id
第三个参数是右表wrapper对象,可以继续使用,以上方法.
连表条件查询
#### 条件查询
```java
class test {

View File

@ -3,6 +3,7 @@ package com.github.mybatisplus.interceptor;
import com.baomidou.mybatisplus.core.MybatisParameterHandler;
import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
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.ResultSetHandler;
import org.apache.ibatis.plugin.*;
@ -74,7 +75,7 @@ public class MyResultInterceptor implements Interceptor {
Object object = mybatisParameterHandler.getParameterObject();
if (object instanceof Map) {
Map<?, ?> args = (Map<?, ?>) object;
return (Class<?>) args.get("clazz");
return (Class<?>) args.get(Constant.CLAZZ);
}
} catch (Exception e) {
return null;

View File

@ -1,5 +1,9 @@
package com.github.mybatisplus.method;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author yulichang
* @see com.baomidou.mybatisplus.core.enums.SqlMethod
@ -50,4 +54,6 @@ public enum SqlMethod {
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
*/
public MyQueryWrapper<T> stringQuery() {
return new MyQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs,
public MyQuery<T> stringQuery() {
return new MyQuery<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs,
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}
*/
@SuppressWarnings("serial")
public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapper<T>>
implements Query<MyQueryWrapper<T>, T, String> {
public class MyQuery<T> extends MyAbstractWrapper<T, String, MyQuery<T>>
implements Query<MyQuery<T>, T, String> {
/**
* 查询字段
*/
private SharedString sqlSelect = new SharedString();
public MyQueryWrapper() {
public MyQuery() {
this(null);
}
public MyQueryWrapper(T entity) {
public MyQuery(T entity) {
super.setEntity(entity);
super.initNeed();
}
public MyQueryWrapper(T entity, String... columns) {
public MyQuery(T entity, String... columns) {
super.setEntity(entity);
super.initNeed();
this.select(columns);
@ -44,7 +44,7 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
*
* @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,
SharedString sqlSelect, SharedString from, SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
super.setEntity(entity);
@ -60,7 +60,7 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
}
@Override
public MyQueryWrapper<T> select(String... columns) {
public MyQuery<T> select(String... columns) {
if (ArrayUtils.isNotEmpty(columns)) {
this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
}
@ -68,7 +68,7 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
}
@Override
public MyQueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
public MyQuery<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
super.setEntityClass(entityClass);
this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
return typedThis;
@ -99,8 +99,8 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
* </p>
*/
@Override
protected MyQueryWrapper<T> instance() {
return new MyQueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
protected MyQuery<T> instance() {
return new MyQuery<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
null, null, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
}