package com.github.yulichang.test.join;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.test.join.dto.AddressDTO;
import com.github.yulichang.test.join.dto.UserDTO;
import com.github.yulichang.test.join.entity.AddressDO;
import com.github.yulichang.test.join.entity.AreaDO;
import com.github.yulichang.test.join.entity.UserDO;
import com.github.yulichang.test.join.entity.UserDto;
import com.github.yulichang.test.join.mapper.AddressMapper;
import com.github.yulichang.test.join.mapper.UserDTOMapper;
import com.github.yulichang.test.join.mapper.UserMapper;
import com.github.yulichang.test.util.ThreadLocalUtils;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.toolkit.MPJWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.BadSqlGrammarException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 连表测试类
* <p>
* 支持mybatis-plus 查询枚举字段
* 支持mybatis-plus typeHandle功能
* <p>
* 移除了mybatis-plus 逻辑删除支持,逻辑删除需要在连表查询时自己添加对应的条件
*/
@SuppressWarnings("unused")
@SpringBootTest
class LambdaWrapperTest {
@Autowired
private UserMapper userMapper;
@Autowired
private UserDTOMapper userDTOMapper;
@Autowired
private AddressMapper addressMapper;
@Test
void testJoin() {
ThreadLocalUtils.set("SELECT t.id,\n" +
" t.pid,\n" +
" t.`name`,\n" +
" t.`json`,\n" +
" t.sex,\n" +
" t.head_img,\n" +
" t.create_time,\n" +
" t.address_id,\n" +
" t.address_id2,\n" +
" t.del,\n" +
" t.create_by,\n" +
" t.update_by,\n" +
" t1.id AS joina_id,\n" +
" t1.user_id,\n" +
" t1.area_id,\n" +
" t1.tel,\n" +
" t1.address,\n" +
" t1.del AS joina_del,\n" +
" t2.id AS joinb_id,\n" +
" t2.province,\n" +
" t2.city,\n" +
" t2.area,\n" +
" t2.postcode,\n" +
" t2.del AS joinb_del\n" +
"FROM `user` t\n" +
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
"WHERE t.del = false\n" +
" AND t1.del = false\n" +
" AND t2.del = false\n" +
" AND (t.id <= ?)\n" +
"ORDER BY t.id DESC");
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class)
.selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr
.association(AreaDO.class, AddressDTO::getArea))
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
.leftJoin(AreaDO.class, AreaDO::getId, AddressDO::getAreaId)
.le(UserDO::getId, 10000)
.orderByDesc(UserDO::getId);
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, wrapper);
assert list.get(0).getAddressList() != null && list.get(0).getAddressList().get(0).getId() != null;
list.forEach(System.out::println);
}
@Test
void testJoinField() {
ThreadLocalUtils.set("SELECT t.id,\n" +
" t.pid,\n" +
" t.`name`,\n" +
" t.`json`,\n" +
" t.sex,\n" +
" t.head_img,\n" +
" t.create_time,\n" +
" t.address_id,\n" +
" t.address_id2,\n" +
" t.del,\n" +
" t.create_by,\n" +
" t.update_by,\n" +
" t1.id AS joina_id\n" +
"FROM `user` t\n" +
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
"WHERE t.del = false\n" +
" AND t1.del = false\n" +
" AND (t.id <= ?)\n" +
"ORDER BY t.id DESC");
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class)
.selectCollection(AddressDO.class, UserDTO::getAddressIds, e -> e
.id(AddressDO::getId))
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
.le(UserDO::getId, 10000)
.orderByDesc(UserDO::getId);
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, wrapper);
assert list.get(0).getAddressIds() != null;
list.forEach(System.out::println);
}
@Test
void testJoin1() {
ThreadLocalUtils.set("SELECT t.id,\n" +
" t.pid,\n" +
" t.`name`,\n" +
" t.`json`,\n" +
" t.sex,\n" +
" t.head_img,\n" +
" t.create_time,\n" +
" t.address_id,\n" +
" t.address_id2,\n" +
" t.del,\n" +
" t.create_by,\n" +
" t.update_by,\n" +
" t1.id AS joina_id,\n" +
" t1.user_id,\n" +
" t1.area_id,\n" +
" t1.tel,\n" +
" t1.address,\n" +
" t1.del AS joina_del,\n" +
" t2.id AS joinb_id,\n" +
" t2.province,\n" +
" t2.city,\n" +
" t2.area,\n" +
" t2.postcode,\n" +
" t2.del AS joinb_del\n" +
"FROM `user` t\n" +
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
"WHERE t.del = false\n" +
" AND t1.del = false\n" +
" AND t2.del = false\n" +
"ORDER BY t.id DESC");
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class)
.selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr
.association(AreaDO.class, AddressDTO::getArea))
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
.leftJoin(AreaDO.class, AreaDO::getId, AddressDO::getAreaId)
.orderByDesc(UserDO::getId);
List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, wrapper);
assert list.get(0).getAddressList().get(0).getId() != null;
list.forEach(System.out::println);
}
/**
* 基本数据类型测试
*/
@Test
void testWrapper() {
ThreadLocalUtils.set("SELECT t.id\n" +
"FROM `user` t\n" +
" LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
" LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
"WHERE t.del = false\n" +
" AND t1.del = false\n" +
" AND t2.del = false");
//基本数据类型 和 String
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供 wrapper.leftJoin() wrapper.rightJoin()等操作
资源推荐
资源详情
资源评论
收起资源包目录
支持连表查询的mybatis-plus (230个子文件)
spring.factories 135B
org.springframework.boot.autoconfigure.AutoConfiguration.imports 67B
LambdaWrapperTest.java 42KB
MPJAbstractWrapper.java 34KB
LambdaWrapperTest.java 28KB
MPJDeepService.java 21KB
MPJDeepMapper.java 20KB
MPJStringUtils.java 19KB
MPJInterceptor.java 17KB
MPJTableFieldInfo.java 15KB
MPJLambdaWrapper.java 15KB
MybatisLabel.java 13KB
QueryJoin.java 13KB
MybatisLabelFree.java 12KB
Query.java 12KB
Func.java 11KB
FuncStr.java 11KB
MPJBaseMethod.java 10KB
QueryLabel.java 10KB
MPJQueryWrapper.java 9KB
MPJLambdaQueryWrapper.java 9KB
ClassUtils.java 9KB
MPJSqlInjector.java 8KB
ReflectionKit.java 8KB
CollectionTest.java 7KB
Compare.java 7KB
CompareStr.java 7KB
SqlScriptUtils.java 7KB
MybatisPlusConfig.java 7KB
MPJAbstractLambdaWrapper.java 7KB
MPConfig.java 6KB
TableList.java 6KB
MPJTableInfoHelper.java 6KB
SelectFunc.java 6KB
MybatisPlusJoinAutoConfiguration.java 5KB
Chain.java 5KB
Relation.java 4KB
MPJReflectionKit.java 4KB
QueryWrapperTest.java 4KB
Join.java 3KB
Result.java 3KB
SelectCache.java 3KB
MPJRelationMapper.java 3KB
OnCompare.java 3KB
MPJMappingWrapper.java 3KB
MappingQuery.java 3KB
MPJAbstractMethod.java 3KB
IdeaProxyLambdaMeta.java 3KB
EntityMapping.java 3KB
MybatisPlusConfig.java 3KB
SelectLabel.java 3KB
FieldMapping.java 3KB
ReflectLambdaMeta.java 3KB
SerializedLambda.java 3KB
LogicInfoUtils.java 3KB
MPJInterceptorConfig.java 2KB
MPJJoinMapper.java 2KB
MPJSqlInjectionUtils.java 2KB
SelectString.java 2KB
SelectNormal.java 2KB
SelectAlias.java 2KB
SelectMapsPage.java 2KB
SelectList.java 2KB
SelectMaps.java 2KB
SelectPage.java 2KB
LambdaUtils.java 2KB
OnSqlInjectorCondition.java 2KB
SelectOne.java 2KB
MPJJoinService.java 2KB
TableHelper.java 2KB
SelectObjs.java 2KB
JoinWrappers.java 2KB
ColumnCache.java 2KB
SqlMethod.java 2KB
UserDO.java 2KB
UserDO.java 2KB
SpringContentUtils.java 2KB
ShadowLambdaMeta.java 2KB
MPJRelationService.java 2KB
GenericTypeUtils.java 2KB
SqlHelper.java 1KB
InterceptorList.java 1KB
StringJoin.java 1KB
SelectCount.java 1KB
TableInfoAdapterV33x.java 1KB
Delete.java 1KB
Update.java 1KB
SelectJoinMapsPage.java 1KB
UserDO.java 1KB
VersionUtils.java 1KB
ThreadLocalUtils.java 1KB
SelectJoinMaps.java 1KB
MappingTest.java 1KB
SelectJoinPage.java 1KB
SelectJoinList.java 1KB
SelectJoinMap.java 1KB
SelectJoinOne.java 1KB
SelectJoinCount.java 1KB
MPJWrappers.java 1KB
MPJTableInfo.java 1KB
共 230 条
- 1
- 2
- 3
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6651
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页