This commit is contained in:
admin 2021-02-02 11:28:13 +08:00
parent 1fe9ffb80c
commit 3fa79af96b
2 changed files with 40 additions and 9 deletions

View File

@ -52,11 +52,18 @@ MyBaseService 继承了IService,同样添加以上方法
MyBaseServiceImpl 继承了ServiceImpl,同样添加了以上方法 MyBaseServiceImpl 继承了ServiceImpl,同样添加了以上方法
## 核心类 MyLambdaQuery 和 MyLambdaQueryWrapper ## 核心类 MyQueryWrapper, MyLambdaQueryWrapper和MyJoinLambdaQueryWrapper
[->区别](https://gitee.com/best_handsome/mybatis-plus-join/wikis/%E8%AF%B4%E6%98%8E) [->区别](https://gitee.com/best_handsome/mybatis-plus-join/wikis/%E8%AF%B4%E6%98%8E)
## MyLambdaQuery用法 ## MyQueryWrapper和MyLambdaQueryWrapper
MyQueryWrapper相当于mp的QueryWrapper
MyLambdaQueryWrapper相当于mp的LambdaQueryWrapper
两者可以无缝切换
MyQueryWrapper.lambda() -> MyLambdaQueryWrapper
MyLambdaQueryWrapper.stringQuery() -> MyQueryWrapper
### 简单的3表查询 ### 简单的3表查询
@ -67,7 +74,7 @@ class test {
void testJoin() { void testJoin() {
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,
new MyLambdaQuery<UserDO>() new MyLambdaQueryWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
.select("addr.tel", "addr.address", "a.province") .select("addr.tel", "addr.address", "a.province")
.leftJoin("user_address addr on t.id = addr.user_id") .leftJoin("user_address addr on t.id = addr.user_id")
@ -121,7 +128,7 @@ class test {
void testJoin() { void testJoin() {
IPage<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, IPage<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class,
new MyLambdaQuery<UserDO>() new MyLambdaQueryWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
.select("addr.tel", "addr.address") .select("addr.tel", "addr.address")
.select("a.province") .select("a.province")
@ -155,7 +162,7 @@ class test {
void testJoin() { void testJoin() {
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,
new MyLambdaQuery<UserDO>() new MyLambdaQueryWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
.select("addr.tel", "addr.address") .select("addr.tel", "addr.address")
//行列转换 //行列转换
@ -198,9 +205,13 @@ ORDER BY
addr.id DESC addr.id DESC
``` ```
## MyLambdaQueryWrapper用法 ## MyJoinLambdaQueryWrapper用法
#### MyLambdaQueryWrapper更符合面向对象(OOP),没有魔术值,全部基于lambda,但灵活性不如上面的 MyJoinLambdaQueryWrapper与MyLambdaQueryWrapper不同,是一套新的支持多表的wrapper
MyLambdaQueryWrapper是基于LambdaQueryWrapper扩展的
而LambdaQueryWrapper由于泛型约束,不支持扩展成多表的lambdaWrapper
#### MyJoinLambdaQueryWrapper更符合面向对象(OOP),没有魔术值,全部基于lambda,但灵活性不如上面的
#### 简单的3表查询 #### 简单的3表查询
@ -211,7 +222,7 @@ class test {
void testJoin() { void testJoin() {
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, List<UserDTO> list = userMapper.selectJoinList(UserDTO.class,
new MyLambdaQueryWrapper<UserDO>() new MyJoinLambdaQueryWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
.select(UserAddressDO::getTel) .select(UserAddressDO::getTel)
.selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress) .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)
@ -267,7 +278,7 @@ class test {
void testJoin() { void testJoin() {
IPage<UserDTO> iPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class, IPage<UserDTO> iPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class,
new MyLambdaQueryWrapper<UserDO>() new MyJoinLambdaQueryWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
.select(UserAddressDO::getTel) .select(UserAddressDO::getTel)
.selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress) .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)

View File

@ -4,14 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.SharedString;
import com.baomidou.mybatisplus.core.conditions.query.Query; import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.github.mybatisplus.toolkit.Constant; import com.github.mybatisplus.toolkit.Constant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; 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;
/** /**
* copy {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} * copy {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
@ -80,6 +85,21 @@ public class MyQueryWrapper<T> extends MyAbstractWrapper<T, String, MyQueryWrapp
return typedThis; return typedThis;
} }
public final MyQueryWrapper<T> selectAll(Class<T> clazz) {
TableInfo info = TableInfoHelper.getTableInfo(clazz);
List<String> list = new ArrayList<>();
list.add(Constant.TABLE_ALIAS + StringPool.DOT + info.getKeyColumn());
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;
}
@Override @Override
public String getSqlSelect() { public String getSqlSelect() {
return sqlSelect.getStringValue(); return sqlSelect.getStringValue();