mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
简化代码
This commit is contained in:
parent
ff1378a410
commit
d75144e57a
@ -87,18 +87,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
|
||||
|
||||
private List<AbstractMethod> getJoinMethod() {
|
||||
List<AbstractMethod> list = new ArrayList<>();
|
||||
|
||||
int v1, v2;
|
||||
try {
|
||||
String version = MybatisPlusVersion.getVersion();
|
||||
String[] split = version.split("\\.");
|
||||
v1 = Integer.parseInt(split[0]);
|
||||
v2 = Integer.parseInt(split[1]);
|
||||
} catch (Exception e) {
|
||||
v1 = 3;
|
||||
v2 = 4;
|
||||
}
|
||||
if ((v1 == 3 && v2 >= 5) || v1 > 3) {
|
||||
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.5.0") >= 0) {
|
||||
list.add(new SelectJoinCount(SqlMethod.SELECT_JOIN_COUNT.getMethod()));
|
||||
list.add(new SelectJoinOne(SqlMethod.SELECT_JOIN_ONE.getMethod()));
|
||||
list.add(new SelectJoinList(SqlMethod.SELECT_JOIN_LIST.getMethod()));
|
||||
|
@ -10,21 +10,6 @@ import java.util.stream.Collectors;
|
||||
* @since 2021/1/15
|
||||
*/
|
||||
public enum SqlMethod {
|
||||
|
||||
// /**
|
||||
// * 修改
|
||||
// */
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
DELETE("delete", "根据 entity 条件删除记录", "<script>\nDELETE FROM %s %s %s\n</script>"),
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
*/
|
||||
LOGIC_DELETE("delete", "根据 entity 条件逻辑删除记录", "<script>\nUPDATE %s %s %s %s\n</script>"),
|
||||
|
||||
/**
|
||||
* 连表查询
|
||||
*/
|
||||
|
@ -1,69 +0,0 @@
|
||||
package com.github.yulichang.test.join;
|
||||
|
||||
import com.github.yulichang.test.join.entity.UserDO;
|
||||
import com.github.yulichang.test.join.entity.UserDto;
|
||||
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.wrapper.MPJLambdaWrapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
/**
|
||||
* springboot3 & jdk17+
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
@SpringBootTest
|
||||
class UpdateWrapperTest {
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Autowired
|
||||
private UserDTOMapper userDTOMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
*/
|
||||
@Test
|
||||
public void testUpdate() {
|
||||
ThreadLocalUtils.set("UPDATE `user` t SET del=true WHERE t.del=false AND (t.id = ?)");
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.eq(UserDO::getId, 1);
|
||||
|
||||
userMapper.delete(wrapper);
|
||||
|
||||
assert userMapper.selectById(1) == null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 非逻辑删除
|
||||
*/
|
||||
@Test
|
||||
public void testUpdate1() {
|
||||
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<>();
|
||||
wrapper.eq(UserDto::getId, 1);
|
||||
userDTOMapper.delete(wrapper);
|
||||
|
||||
assert userDTOMapper.selectById(1) == null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
@Test
|
||||
public void testUpdate2() {
|
||||
// MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<UserDto>()
|
||||
// .leftJoin(UserDO.class, UserDO::getId, UserDto::getUserId)
|
||||
// .eq(UserDto::getId, 1);
|
||||
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<>();
|
||||
wrapper.eq(UserDto::getId, 1);
|
||||
userDTOMapper.update(new UserDto() {{
|
||||
setUserId(2222);
|
||||
}}, wrapper);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,700 @@
|
||||
package com.yulichang.test.springboot3jdk17;
|
||||
|
||||
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.util.ThreadLocalUtils;
|
||||
import com.github.yulichang.toolkit.MPJWrappers;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.yulichang.test.springboot3jdk17.dto.AddressDTO;
|
||||
import com.yulichang.test.springboot3jdk17.dto.UserDTO;
|
||||
import com.yulichang.test.springboot3jdk17.entity.AddressDO;
|
||||
import com.yulichang.test.springboot3jdk17.entity.AreaDO;
|
||||
import com.yulichang.test.springboot3jdk17.entity.UserDO;
|
||||
import com.yulichang.test.springboot3jdk17.entity.UserDto;
|
||||
import com.yulichang.test.springboot3jdk17.mapper.UserDTOMapper;
|
||||
import com.yulichang.test.springboot3jdk17.mapper.UserMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 连表测试类
|
||||
* <p>
|
||||
* 支持mybatis-plus 查询枚举字段
|
||||
* 支持mybatis-plus typeHandle功能
|
||||
* <p>
|
||||
* 移除了mybatis-plus 逻辑删除支持,逻辑删除需要在连表查询时自己添加对应的条件
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
@SpringBootTest
|
||||
class LambdaWrapperTest {
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Autowired
|
||||
private UserDTOMapper userDTOMapper;
|
||||
|
||||
@Test
|
||||
void testJoin() {
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.id,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
t1.id AS joina_id,
|
||||
t1.user_id,
|
||||
t1.area_id,
|
||||
t1.tel,
|
||||
t1.address,
|
||||
t1.del AS joina_del,
|
||||
t2.id AS joinb_id,
|
||||
t2.province,
|
||||
t2.city,
|
||||
t2.area,
|
||||
t2.postcode,
|
||||
t2.del AS joinb_del
|
||||
FROM `user` t
|
||||
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||
WHERE t.del = false
|
||||
AND t1.del = false
|
||||
AND t2.del = false
|
||||
AND (t.id <= ?)
|
||||
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,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
t1.id AS joina_id
|
||||
FROM `user` t
|
||||
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||
WHERE t.del = false
|
||||
AND t1.del = false
|
||||
AND (t.id <= ?)
|
||||
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,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
t1.id AS joina_id,
|
||||
t1.user_id,
|
||||
t1.area_id,
|
||||
t1.tel,
|
||||
t1.address,
|
||||
t1.del AS joina_del,
|
||||
t2.id AS joinb_id,
|
||||
t2.province,
|
||||
t2.city,
|
||||
t2.area,
|
||||
t2.postcode,
|
||||
t2.del AS joinb_del
|
||||
FROM `user` t
|
||||
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||
WHERE t.del = false
|
||||
AND t1.del = false
|
||||
AND t2.del = false
|
||||
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
|
||||
FROM `user` t
|
||||
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||
WHERE t.del = false
|
||||
AND t1.del = false
|
||||
AND t2.del = false""");
|
||||
//基本数据类型 和 String
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.select(UserDO::getId)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
|
||||
.leftJoin(AreaDO.class, AreaDO::getId, AddressDO::getAreaId);
|
||||
List<Integer> list = userMapper.selectJoinList(Integer.class, wrapper);
|
||||
|
||||
assert list.get(0) != null;
|
||||
System.out.println(list);
|
||||
|
||||
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.create_time
|
||||
FROM `user` t
|
||||
LEFT JOIN address t1 ON (t1.user_id = t.id)
|
||||
LEFT JOIN area t2 ON (t2.id = t1.area_id)
|
||||
WHERE t.del = false
|
||||
AND t1.del = false
|
||||
AND t2.del = false""");
|
||||
//java.sql包下的类
|
||||
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
|
||||
.select(UserDO::getCreateTime)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
|
||||
.leftJoin(AreaDO.class, AreaDO::getId, AddressDO::getAreaId);
|
||||
List<Timestamp> list1 = userMapper.selectJoinList(Timestamp.class, wrapper1);
|
||||
|
||||
assert list1.get(0) != null;
|
||||
System.out.println(list);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
void testMSCache() {
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.id,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by
|
||||
FROM `user` t
|
||||
WHERE t.id = ?
|
||||
AND t.del = false
|
||||
AND (t.id <= ?)
|
||||
ORDER BY t.id ASC, t.`name` ASC""");
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>(new UserDO() {{
|
||||
setId(1);
|
||||
}})
|
||||
.selectAll(UserDO.class)
|
||||
// .setEntity(new UserDO() {{
|
||||
// setId(1);
|
||||
// }})
|
||||
.le(UserDO::getId, 100)
|
||||
.orderByAsc(UserDO::getId, UserDO::getName);
|
||||
|
||||
List<UserDO> list = userMapper.selectList(wrapper);
|
||||
list.forEach(System.out::println);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTableAliasR() {
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT tt.id,
|
||||
tt.user_id,
|
||||
tt.create_by,
|
||||
tt.update_by,
|
||||
ua.`name` AS userName,
|
||||
ub.`name` AS createName,
|
||||
uc.`name` AS updateName
|
||||
FROM user_dto tt
|
||||
LEFT JOIN `user` ua ON (ua.id = tt.user_id)
|
||||
LEFT JOIN `user` ub ON (ub.id = tt.create_by)
|
||||
LEFT JOIN `user` uc ON (uc.id = tt.update_by)
|
||||
WHERE ua.del = false
|
||||
AND ub.del = false
|
||||
AND uc.del = false
|
||||
AND (ua.id <= ? AND ub.id >= ?)""");
|
||||
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<UserDto>("tt")
|
||||
.selectAll(UserDto.class)
|
||||
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDto::getUserId, ext -> ext
|
||||
.selectAs(UserDO::getName, UserDto::getUserName)
|
||||
.le(UserDO::getId, 100))
|
||||
.leftJoin(UserDO.class, "ub", UserDO::getId, UserDto::getCreateBy, ext -> ext
|
||||
.selectAs(UserDO::getName, UserDto::getCreateName)
|
||||
.ge(UserDO::getId, 0))
|
||||
.leftJoin(UserDO.class, "uc", UserDO::getId, UserDto::getUpdateBy, ext -> ext
|
||||
.selectAs(UserDO::getName, UserDto::getUpdateName));
|
||||
List<UserDto> userDtos = userDTOMapper.selectJoinList(UserDto.class, wrapper);
|
||||
assert StringUtils.isNotBlank(userDtos.get(0).getUserName());
|
||||
assert StringUtils.isNotBlank(userDtos.get(0).getCreateName());
|
||||
assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName());
|
||||
|
||||
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT tt.id,
|
||||
tt.pid,
|
||||
tt.`name`,
|
||||
tt.`json`,
|
||||
tt.sex,
|
||||
tt.head_img,
|
||||
tt.create_time,
|
||||
tt.address_id,
|
||||
tt.address_id2,
|
||||
tt.del,
|
||||
tt.create_by,
|
||||
tt.update_by,
|
||||
ua.id,
|
||||
ub.head_img
|
||||
FROM `user` tt
|
||||
LEFT JOIN `user` ua ON (ua.id = tt.pid)
|
||||
LEFT JOIN `user` ub ON (ub.id = tt.create_by)
|
||||
LEFT JOIN `user` uc ON (uc.id = tt.update_by)
|
||||
WHERE tt.del = false
|
||||
AND ua.del = false
|
||||
AND ub.del = false
|
||||
AND uc.del = false
|
||||
AND (ua.head_img = tt.`name` AND tt.id = ua.id)""");
|
||||
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>("tt")
|
||||
.selectAll(UserDO.class)
|
||||
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDO::getPid, ext -> ext
|
||||
.select(UserDO::getId)
|
||||
.eq(UserDO::getImg, UserDO::getName))
|
||||
.leftJoin(UserDO.class, "ub", UserDO::getId, UserDO::getCreateBy, ext -> ext
|
||||
.select(UserDO::getImg))
|
||||
.leftJoin(UserDO.class, "uc", UserDO::getId, UserDO::getUpdateBy)
|
||||
.eq(UserDO::getId, UserDO::getId);
|
||||
userMapper.selectJoinList(UserDO.class, w);
|
||||
System.out.println(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 自连接测试
|
||||
*/
|
||||
@Test
|
||||
void testInner() {
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.id,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
t1.id AS joina_id,
|
||||
t1.pid AS joina_pid,
|
||||
t1.`name` AS joina_name,
|
||||
t1.`json` AS joina_json,
|
||||
t1.sex AS joina_sex,
|
||||
t1.head_img AS joina_head_img,
|
||||
t1.create_time AS joina_create_time,
|
||||
t1.address_id AS joina_address_id,
|
||||
t1.address_id2 AS joina_address_id2,
|
||||
t1.del AS joina_del,
|
||||
t1.create_by AS joina_create_by,
|
||||
t1.update_by AS joina_update_by
|
||||
FROM `user` t
|
||||
LEFT JOIN `user` t1 ON (t1.pid = t.id)
|
||||
WHERE t.del = false
|
||||
AND (t.id > ?)""");
|
||||
//自连接
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.disableSubLogicDel()//关闭副表逻辑删除
|
||||
.selectAll(UserDO.class)
|
||||
.selectCollection(UserDO.class, UserDO::getChildren)
|
||||
.leftJoin(UserDO.class, UserDO::getPid, UserDO::getId)
|
||||
.gt(UserDO::getId, 0);
|
||||
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper);
|
||||
System.out.println(list);
|
||||
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.id,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
t1.`name` AS createName,
|
||||
t2.`name` AS updateName
|
||||
FROM `user` t
|
||||
LEFT JOIN `user` t1 ON (t1.id = t.create_by)
|
||||
LEFT JOIN `user` t2 ON (t2.id = t.update_by)
|
||||
WHERE (t2.id = t.update_by AND t.id = t1.id)""");
|
||||
//关联一张表多次
|
||||
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>()
|
||||
.disableLogicDel()
|
||||
.disableSubLogicDel()
|
||||
.selectAll(UserDO.class)
|
||||
.leftJoin(UserDO.class, UserDO::getId, UserDO::getCreateBy, ext -> ext
|
||||
.selectAs(UserDO::getName, UserDO::getCreateName))
|
||||
.leftJoin(UserDO.class, (on, ext) -> {
|
||||
on.eq(UserDO::getId, UserDO::getUpdateBy);
|
||||
ext.selectAs(UserDO::getName, UserDO::getUpdateName)
|
||||
.eq(UserDO::getId, UserDO::getUpdateBy);
|
||||
})
|
||||
.eq(UserDO::getId, UserDO::getId);
|
||||
List<UserDO> dos = userMapper.selectJoinList(UserDO.class, w);
|
||||
assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null;
|
||||
|
||||
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.id,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
t1.`name` AS alias,
|
||||
t1.id AS joina_id,
|
||||
t1.pid AS joina_pid,
|
||||
t1.`name` AS joina_name,
|
||||
t1.`json` AS joina_json,
|
||||
t1.sex AS joina_sex,
|
||||
t1.head_img AS joina_head_img,
|
||||
t1.create_time AS joina_create_time,
|
||||
t1.address_id AS joina_address_id,
|
||||
t1.address_id2 AS joina_address_id2,
|
||||
t1.del AS joina_del,
|
||||
t1.create_by AS joina_create_by,
|
||||
t1.update_by AS joina_update_by,
|
||||
t2.id AS joinb_id,
|
||||
t2.pid AS joinb_pid,
|
||||
t2.`name` AS joinb_name,
|
||||
t2.`json` AS joinb_json,
|
||||
t2.sex AS joinb_sex,
|
||||
t2.head_img AS joinb_head_img,
|
||||
t2.create_time AS joinb_create_time,
|
||||
t2.address_id AS joinb_address_id,
|
||||
t2.address_id2 AS joinb_address_id2,
|
||||
t2.del AS joinb_del,
|
||||
t2.create_by AS joinb_create_by,
|
||||
t2.update_by AS joinb_update_by
|
||||
FROM `user` t
|
||||
LEFT JOIN `user` t1 ON (t1.pid = t.id)
|
||||
LEFT JOIN `user` t2 ON (t2.pid = t1.id)
|
||||
WHERE t.del = false
|
||||
AND (t1.id <= ? AND t.id <= ?)""");
|
||||
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
|
||||
.disableSubLogicDel()
|
||||
.selectAll(UserDO.class)
|
||||
.selectCollection("t1", UserDO.class, UserDO::getChildren, c -> c
|
||||
.collection("t2", UserDO.class, UserDO::getChildren))
|
||||
.leftJoin(UserDO.class, UserDO::getPid, UserDO::getId, ext -> ext
|
||||
.selectAs(UserDO::getName, UserDO::getAlias)
|
||||
.leftJoin(UserDO.class, UserDO::getPid, UserDO::getId)
|
||||
.le(UserDO::getId, 5))
|
||||
.le(UserDO::getId, 4);
|
||||
List<UserDO> list1 = userMapper.selectJoinList(UserDO.class, wrapper1);
|
||||
System.out.println(list1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 逻辑删除测试
|
||||
*/
|
||||
@Test
|
||||
void testLogicDel() {
|
||||
List<UserDTO> l1 = userMapper.selectJoinList(UserDTO.class, new MPJLambdaWrapper<>());
|
||||
assert l1.size() == 14;
|
||||
|
||||
List<UserDTO> l2 = userMapper.selectJoinList(UserDTO.class, new MPJLambdaWrapper<UserDO>()
|
||||
.selectAll(UserDO.class)
|
||||
.select(AddressDO::getAddress)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId));
|
||||
assert l2.size() == 10;
|
||||
|
||||
List<UserDTO> l3 = userMapper.selectJoinList(UserDTO.class, new MPJLambdaWrapper<UserDO>()
|
||||
.disableSubLogicDel()
|
||||
.selectAll(UserDO.class)
|
||||
.selectCollection(AddressDO.class, UserDTO::getAddressList)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId));
|
||||
assert l3.size() == 14 && l3.get(0).getAddressList().size() == 9;
|
||||
|
||||
List<UserDTO> l4 = userMapper.selectJoinList(UserDTO.class, new MPJLambdaWrapper<UserDO>()
|
||||
.disableSubLogicDel()
|
||||
.selectAll(UserDO.class)
|
||||
.selectCollection(AddressDO.class, UserDTO::getAddressList)
|
||||
.leftJoin(AddressDO.class, on -> on
|
||||
.eq(AddressDO::getUserId, UserDO::getId)
|
||||
.eq(AddressDO::getDel, false)));
|
||||
assert l4.size() == 14 && l4.get(0).getAddressList().size() == 5;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 别名测试
|
||||
*/
|
||||
@Test
|
||||
void testAlias() {
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
// .disableSubLogicDel()//关闭副表逻辑删除
|
||||
// .disableLogicDel()//关闭主表逻辑删除
|
||||
.selectAll(UserDO.class)
|
||||
.selectCollection(UserDO.class, UserDO::getChildren)
|
||||
.leftJoin(UserDO.class, UserDO::getPid, UserDO::getId);
|
||||
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper);
|
||||
assert list.get(0).getName() != null && list.get(0).getChildren().get(0).getName() != null;
|
||||
assert list.get(0).getImg() != null && list.get(0).getChildren().get(0).getImg() != null;
|
||||
System.out.println(list);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTableAlias() {
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.id,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
aa.id,
|
||||
aa.user_id,
|
||||
aa.area_id,
|
||||
aa.tel,
|
||||
aa.address,
|
||||
aa.del
|
||||
FROM `user` t
|
||||
LEFT JOIN address aa ON (aa.user_id = t.id)
|
||||
WHERE t.del = false
|
||||
AND aa.del = false""");
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
// .disableLogicDel()//关闭主表逻辑删除
|
||||
.selectAll(UserDO.class)
|
||||
.selectAll(AddressDO.class, "aa")
|
||||
// .selectCollection(UserDO.class, UserDO::getChildren)
|
||||
.leftJoin(AddressDO.class, "aa", AddressDO::getUserId, UserDO::getId);
|
||||
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper);
|
||||
|
||||
System.out.println(list);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testLabel() {
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.disableSubLogicDel()
|
||||
.selectAll(UserDO.class)
|
||||
.selectCollection("t1", AddressDO.class, UserDO::getAddressList)
|
||||
.selectCollection("t2", AddressDO.class, UserDO::getAddressList2)
|
||||
.leftJoin(AddressDO.class, AddressDO::getId, UserDO::getAddressId)
|
||||
.leftJoin(AddressDO.class, AddressDO::getId, UserDO::getAddressId2);
|
||||
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper);
|
||||
|
||||
assert list.get(0).getAddressList().get(0).getAddress() != null;
|
||||
assert list.get(0).getAddressList2().get(0).getAddress() != null;
|
||||
System.out.println(list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 简单的分页关联查询 lambda
|
||||
*/
|
||||
@Test
|
||||
void test1() {
|
||||
Page<UserDTO> page = new Page<>(1, 10);
|
||||
page.setSearchCount(false);
|
||||
IPage<UserDTO> iPage = userMapper.selectJoinPage(page, UserDTO.class,
|
||||
MPJWrappers.<UserDO>lambdaJoin()
|
||||
.selectAll(UserDO.class)
|
||||
.select(AddressDO::getAddress)
|
||||
.select(AreaDO::getProvince)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
|
||||
.leftJoin(AreaDO.class, AreaDO::getId, AddressDO::getAreaId));
|
||||
iPage.getRecords().forEach(System.out::println);
|
||||
}
|
||||
|
||||
/**
|
||||
* 简单的分页关联查询 lambda
|
||||
* ON语句多条件
|
||||
*/
|
||||
@Test
|
||||
void test3() {
|
||||
ThreadLocalUtils.set("""
|
||||
SELECT t.id,
|
||||
t.pid,
|
||||
t.`name`,
|
||||
t.`json`,
|
||||
t.sex,
|
||||
t.head_img,
|
||||
t.create_time,
|
||||
t.address_id,
|
||||
t.address_id2,
|
||||
t.del,
|
||||
t.create_by,
|
||||
t.update_by,
|
||||
t1.address
|
||||
FROM `user` t
|
||||
LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)
|
||||
WHERE t.del = false
|
||||
AND t1.del = false
|
||||
AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)
|
||||
LIMIT ?""");
|
||||
IPage<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class,
|
||||
MPJWrappers.<UserDO>lambdaJoin()
|
||||
.selectAll(UserDO.class)
|
||||
.select(AddressDO::getAddress)
|
||||
.leftJoin(AddressDO.class, on -> on
|
||||
.eq(UserDO::getId, AddressDO::getUserId)
|
||||
.eq(UserDO::getId, AddressDO::getUserId))
|
||||
.eq(UserDO::getId, 1)
|
||||
.and(i -> i.eq(UserDO::getImg, "er")
|
||||
.or()
|
||||
.eq(AddressDO::getUserId, 1))
|
||||
.eq(UserDO::getId, 1));
|
||||
page.getRecords().forEach(System.out::println);
|
||||
}
|
||||
|
||||
/**
|
||||
* 简单的函数使用
|
||||
*/
|
||||
@Test
|
||||
void test4() {
|
||||
UserDTO one = userMapper.selectJoinOne(UserDTO.class, MPJWrappers.<UserDO>lambdaJoin()
|
||||
.selectSum(UserDO::getId)
|
||||
.selectMax(UserDO::getId, UserDTO::getHeadImg)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId));
|
||||
System.out.println(one);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 忽略个别查询字段
|
||||
*/
|
||||
@Test
|
||||
void test6() {
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.selectAll(UserDO.class)
|
||||
.select(AddressDO.class, p -> true)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId)
|
||||
.eq(UserDO::getId, 1);
|
||||
Page<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, wrapper);
|
||||
assert page.getRecords().get(0).getAddress() != null;
|
||||
page.getRecords().forEach(System.out::println);
|
||||
}
|
||||
|
||||
/**
|
||||
* 忽略个别查询字段
|
||||
*/
|
||||
@Test
|
||||
void test8() {
|
||||
ThreadLocalUtils.set("SELECT t.`name` FROM `user` t WHERE t.del=false AND (t.`name` = ?)");
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.select(UserDO::getName)
|
||||
.eq(UserDO::getName, "ref");
|
||||
userMapper.selectList(wrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 关联查询返回map
|
||||
*/
|
||||
@Test
|
||||
void test7() {
|
||||
List<Map<String, Object>> list = userMapper.selectJoinMaps(MPJWrappers.<UserDO>lambdaJoin()
|
||||
.selectAll(UserDO.class)
|
||||
.select(AddressDO::getAddress)
|
||||
.leftJoin(AddressDO.class, AddressDO::getUserId, UserDO::getId));
|
||||
assert list.get(0).get("ADDRESS") != null;
|
||||
list.forEach(System.out::println);
|
||||
}
|
||||
|
||||
/**
|
||||
* 原生查询
|
||||
*/
|
||||
@Test
|
||||
void testMP() {
|
||||
List<UserDO> dos = userMapper.selectList(new LambdaQueryWrapper<UserDO>()
|
||||
.gt(UserDO::getId, 3)
|
||||
.lt(UserDO::getId, 8));
|
||||
assert dos.size() == 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* 函数测试
|
||||
*/
|
||||
@Test
|
||||
void testFunc() {
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.selectAll(UserDO.class);
|
||||
|
||||
List<UserDO> dos = userMapper.selectJoinList(UserDO.class, wrapper);
|
||||
System.out.println(1);
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
package com.yulichang.test.springboot3jdk17;
|
||||
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.yulichang.test.springboot3jdk17.entity.UserDO;
|
||||
import com.yulichang.test.springboot3jdk17.entity.UserDto;
|
||||
import com.yulichang.test.springboot3jdk17.mapper.UserDTOMapper;
|
||||
import com.yulichang.test.springboot3jdk17.mapper.UserMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
/**
|
||||
* springboot3 & jdk17+
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
@SpringBootTest
|
||||
class UpdateWrapperTest {
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Autowired
|
||||
private UserDTOMapper userDTOMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
*/
|
||||
@Test
|
||||
public void testUpdate() {
|
||||
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
|
||||
.eq(UserDO::getId, 1);
|
||||
|
||||
userMapper.delete(wrapper);
|
||||
|
||||
assert userMapper.selectById(1) == null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 非逻辑删除
|
||||
*/
|
||||
@Test
|
||||
public void testUpdate1() {
|
||||
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<>();
|
||||
wrapper.eq(UserDto::getId, 1);
|
||||
userDTOMapper.delete(wrapper);
|
||||
|
||||
assert userDTOMapper.selectById(1) == null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
@Test
|
||||
public void testUpdate2() {
|
||||
// MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<UserDto>()
|
||||
// .leftJoin(UserDO.class, UserDO::getId, UserDto::getUserId)
|
||||
// .eq(UserDto::getId, 1);
|
||||
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<>();
|
||||
wrapper.eq(UserDto::getId, 1);
|
||||
userDTOMapper.update(new UserDto() {{
|
||||
setUserId(2222);
|
||||
}}, wrapper);
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user