test 模块

This commit is contained in:
yulichang 2023-01-11 10:43:34 +08:00
parent 656e325276
commit 6086dbae45
4 changed files with 267 additions and 244 deletions

View File

@ -1,7 +1,5 @@
## mybatis plus join 测试模块 ## mybatis plus join 测试模块
### 测试模块要用到文本块简化代码 需要jdk15+
- test-collection : 对多或对一查询测试项目 - test-collection : 对多或对一查询测试项目
- test-join : 连表查询测试项目 - test-join : 连表查询测试项目
- test-mapping : 注解映射测试项目 - test-mapping : 注解映射测试项目

View File

@ -45,11 +45,11 @@
<properties> <properties>
<springboot.version>2.5.4</springboot.version> <springboot.version>2.5.4</springboot.version>
<jdkVersion>15</jdkVersion> <jdkVersion>1.8</jdkVersion>
<jdkVersion.test>15</jdkVersion.test> <jdkVersion.test>1.8</jdkVersion.test>
<maven.deploy.skip>true</maven.deploy.skip> <maven.deploy.skip>true</maven.deploy.skip>
<maven.compiler.source>15</maven.compiler.source> <maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target> <maven.compiler.target>1.8</maven.compiler.target>
<github.global.server>github</github.global.server> <github.global.server>github</github.global.server>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>

View File

@ -12,8 +12,8 @@
<artifactId>test-join</artifactId> <artifactId>test-join</artifactId>
<properties> <properties>
<maven.compiler.source>15</maven.compiler.source> <maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target> <maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
</project> </project>

View File

@ -42,14 +42,38 @@ class LambdaWrapperTest {
@Test @Test
void testJoin() { void testJoin() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
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, " t.pid,\n" +
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 " t.`name`,\n" +
FROM `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) " t.`json`,\n" +
LEFT JOIN area t2 ON (t2.id = t1.area_id) " t.sex,\n" +
WHERE t.del=false AND t1.del=false AND t2.del=false AND (t.id <= ?) " t.head_img,\n" +
ORDER BY t.id DESC " 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>() MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
@ -68,16 +92,37 @@ class LambdaWrapperTest {
@Test @Test
void testJoin1() { void testJoin1() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
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, " t.pid,\n" +
t1.id AS joina_id,t1.user_id,t1.area_id,t1.tel,t1.address,t1.del AS joina_del, " t.`name`,\n" +
t2.id AS joinb_id,t2.province,t2.city,t2.area,t2.postcode,t2.del AS joinb_del " t.`json`,\n" +
FROM `user` t " t.sex,\n" +
LEFT JOIN address t1 ON (t1.user_id = t.id) " t.head_img,\n" +
LEFT JOIN area t2 ON (t2.id = t1.area_id) " t.create_time,\n" +
WHERE t.del=false AND t1.del=false AND t2.del=false " t.address_id,\n" +
ORDER BY t.id DESC " 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>() MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
.selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr .selectCollection(AddressDO.class, UserDTO::getAddressList, addr -> addr
@ -96,15 +141,13 @@ class LambdaWrapperTest {
*/ */
@Test @Test
void testWrapper() { void testWrapper() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id\n" +
SELECT t.id "FROM `user` t\n" +
FROM `user` t " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
LEFT JOIN address t1 ON (t1.user_id = t.id) " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
LEFT JOIN area t2 ON (t2.id = t1.area_id) "WHERE t.del = false\n" +
WHERE t.del = false " AND t1.del = false\n" +
AND t1.del = false " AND t2.del = false");
AND t2.del = false
""");
//基本数据类型 String //基本数据类型 String
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>() MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.select(UserDO::getId) .select(UserDO::getId)
@ -116,15 +159,13 @@ class LambdaWrapperTest {
System.out.println(list); System.out.println(list);
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.create_time\n" +
SELECT t.create_time "FROM `user` t\n" +
FROM `user` t " LEFT JOIN address t1 ON (t1.user_id = t.id)\n" +
LEFT JOIN address t1 ON (t1.user_id = t.id) " LEFT JOIN area t2 ON (t2.id = t1.area_id)\n" +
LEFT JOIN area t2 ON (t2.id = t1.area_id) "WHERE t.del = false\n" +
WHERE t.del = false " AND t1.del = false\n" +
AND t1.del = false " AND t2.del = false");
AND t2.del = false
""");
//java.sql包下的类 //java.sql包下的类
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>() MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
.select(UserDO::getCreateTime) .select(UserDO::getCreateTime)
@ -140,25 +181,23 @@ class LambdaWrapperTest {
@Test @Test
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
void testMSCache() { void testMSCache() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
SELECT t.id, " t.pid,\n" +
t.pid, " t.`name`,\n" +
t.`name`, " t.`json`,\n" +
t.`json`, " t.sex,\n" +
t.sex, " t.head_img,\n" +
t.head_img, " t.create_time,\n" +
t.create_time, " t.address_id,\n" +
t.address_id, " t.address_id2,\n" +
t.address_id2, " t.del,\n" +
t.del, " t.create_by,\n" +
t.create_by, " t.update_by\n" +
t.update_by "FROM `user` t\n" +
FROM `user` t "WHERE t.id = ?\n" +
WHERE t.id = ? " AND t.del = false\n" +
AND t.del = false " AND (t.id <= ?)\n" +
AND (t.id <= ?) "ORDER BY t.id ASC, t.name ASC");
ORDER BY t.id ASC, t.name ASC
""");
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>() MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.selectAll(UserDO.class) .selectAll(UserDO.class)
.setEntity(new UserDO() {{ .setEntity(new UserDO() {{
@ -173,23 +212,21 @@ class LambdaWrapperTest {
@Test @Test
void testTableAliasR() { void testTableAliasR() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT tt.id,\n" +
SELECT tt.id, " tt.user_id,\n" +
tt.user_id, " tt.create_by,\n" +
tt.create_by, " tt.update_by,\n" +
tt.update_by, " ua.`name` AS userName,\n" +
ua.`name` AS userName, " ub.`name` AS createName,\n" +
ub.`name` AS createName, " uc.`name` AS updateName\n" +
uc.`name` AS updateName "FROM user_dto tt\n" +
FROM user_dto tt " LEFT JOIN `user` ua ON (ua.id = tt.user_id)\n" +
LEFT JOIN `user` ua ON (ua.id = tt.user_id) " LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" +
LEFT JOIN `user` ub ON (ub.id = tt.create_by) " LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" +
LEFT JOIN `user` uc ON (uc.id = tt.update_by) "WHERE ua.del = false\n" +
WHERE ua.del = false " AND ub.del = false\n" +
AND ub.del = false " AND uc.del = false\n" +
AND uc.del = false " AND (ua.id <= ? AND ub.id >= ?)");
AND (ua.id <= ? AND ub.id >= ?)
""");
MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<UserDto>("tt") MPJLambdaWrapper<UserDto> wrapper = new MPJLambdaWrapper<UserDto>("tt")
.selectAll(UserDto.class) .selectAll(UserDto.class)
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDto::getUserId, ext -> ext .leftJoin(UserDO.class, "ua", UserDO::getId, UserDto::getUserId, ext -> ext
@ -206,31 +243,29 @@ class LambdaWrapperTest {
assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName()); assert StringUtils.isNotBlank(userDtos.get(0).getUpdateName());
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT tt.id,\n" +
SELECT tt.id, " tt.pid,\n" +
tt.pid, " tt.`name`,\n" +
tt.`name`, " tt.`json`,\n" +
tt.`json`, " tt.sex,\n" +
tt.sex, " tt.head_img,\n" +
tt.head_img, " tt.create_time,\n" +
tt.create_time, " tt.address_id,\n" +
tt.address_id, " tt.address_id2,\n" +
tt.address_id2, " tt.del,\n" +
tt.del, " tt.create_by,\n" +
tt.create_by, " tt.update_by,\n" +
tt.update_by, " ua.id,\n" +
ua.id, " ub.head_img\n" +
ub.head_img "FROM `user` tt\n" +
FROM `user` tt " LEFT JOIN `user` ua ON (ua.id = tt.pid)\n" +
LEFT JOIN `user` ua ON (ua.id = tt.pid) " LEFT JOIN `user` ub ON (ub.id = tt.create_by)\n" +
LEFT JOIN `user` ub ON (ub.id = tt.create_by) " LEFT JOIN `user` uc ON (uc.id = tt.update_by)\n" +
LEFT JOIN `user` uc ON (uc.id = tt.update_by) "WHERE tt.del = false\n" +
WHERE tt.del = false " AND ua.del = false\n" +
AND ua.del = false " AND ub.del = false\n" +
AND ub.del = false " AND uc.del = false\n" +
AND uc.del = false " AND (ua.head_img = tt.name AND tt.id = ua.id)");
AND (ua.head_img = tt.name AND tt.id = ua.id)
""");
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>("tt") MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>("tt")
.selectAll(UserDO.class) .selectAll(UserDO.class)
.leftJoin(UserDO.class, "ua", UserDO::getId, UserDO::getPid, ext -> ext .leftJoin(UserDO.class, "ua", UserDO::getId, UserDO::getPid, ext -> ext
@ -249,36 +284,34 @@ class LambdaWrapperTest {
*/ */
@Test @Test
void testInner() { void testInner() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
SELECT t.id, " t.pid,\n" +
t.pid, " t.`name`,\n" +
t.`name`, " t.`json`,\n" +
t.`json`, " t.sex,\n" +
t.sex, " t.head_img,\n" +
t.head_img, " t.create_time,\n" +
t.create_time, " t.address_id,\n" +
t.address_id, " t.address_id2,\n" +
t.address_id2, " t.del,\n" +
t.del, " t.create_by,\n" +
t.create_by, " t.update_by,\n" +
t.update_by, " t1.id AS joina_id,\n" +
t1.id AS joina_id, " t1.pid AS joina_pid,\n" +
t1.pid AS joina_pid, " t1.`name` AS joina_name,\n" +
t1.`name` AS joina_name, " t1.`json` AS joina_json,\n" +
t1.`json` AS joina_json, " t1.sex AS joina_sex,\n" +
t1.sex AS joina_sex, " t1.head_img AS joina_head_img,\n" +
t1.head_img AS joina_head_img, " t1.create_time AS joina_create_time,\n" +
t1.create_time AS joina_create_time, " t1.address_id AS joina_address_id,\n" +
t1.address_id AS joina_address_id, " t1.address_id2 AS joina_address_id2,\n" +
t1.address_id2 AS joina_address_id2, " t1.del AS joina_del,\n" +
t1.del AS joina_del, " t1.create_by AS joina_create_by,\n" +
t1.create_by AS joina_create_by, " t1.update_by AS joina_update_by\n" +
t1.update_by AS joina_update_by "FROM `user` t\n" +
FROM `user` t " LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" +
LEFT JOIN `user` t1 ON (t1.pid = t.id) "WHERE t.del = false\n" +
WHERE t.del = false " AND (t.id > ?)");
AND (t.id > ?)
""");
//自连接 //自连接
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>() MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
.disableSubLogicDel()//关闭副表逻辑删除 .disableSubLogicDel()//关闭副表逻辑删除
@ -289,26 +322,24 @@ class LambdaWrapperTest {
List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper); List<UserDO> list = userMapper.selectJoinList(UserDO.class, wrapper);
System.out.println(list); System.out.println(list);
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
SELECT t.id, " t.pid,\n" +
t.pid, " t.`name`,\n" +
t.`name`, " t.`json`,\n" +
t.`json`, " t.sex,\n" +
t.sex, " t.head_img,\n" +
t.head_img, " t.create_time,\n" +
t.create_time, " t.address_id,\n" +
t.address_id, " t.address_id2,\n" +
t.address_id2, " t.del,\n" +
t.del, " t.create_by,\n" +
t.create_by, " t.update_by,\n" +
t.update_by, " t1.`name` AS createName,\n" +
t1.`name` AS createName, " t2.`name` AS updateName\n" +
t2.`name` AS updateName "FROM `user` t\n" +
FROM `user` t " LEFT JOIN `user` t1 ON (t1.id = t.create_by)\n" +
LEFT JOIN `user` t1 ON (t1.id = t.create_by) " LEFT JOIN `user` t2 ON (t2.id = t.update_by)\n" +
LEFT JOIN `user` t2 ON (t2.id = t.update_by) "WHERE (t2.id = t.update_by AND t.id = t1.id)");
WHERE (t2.id = t.update_by AND t.id = t1.id)
""");
//关联一张表多次 //关联一张表多次
MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>() MPJLambdaWrapper<UserDO> w = new MPJLambdaWrapper<UserDO>()
.disableLogicDel() .disableLogicDel()
@ -326,50 +357,48 @@ class LambdaWrapperTest {
assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null; assert dos.get(0).getCreateName() != null && dos.get(0).getUpdateName() != null;
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
SELECT t.id, " t.pid,\n" +
t.pid, " t.`name`,\n" +
t.`name`, " t.`json`,\n" +
t.`json`, " t.sex,\n" +
t.sex, " t.head_img,\n" +
t.head_img, " t.create_time,\n" +
t.create_time, " t.address_id,\n" +
t.address_id, " t.address_id2,\n" +
t.address_id2, " t.del,\n" +
t.del, " t.create_by,\n" +
t.create_by, " t.update_by,\n" +
t.update_by, " t1.`name` AS alias,\n" +
t1.`name` AS alias, " t1.id AS joina_id,\n" +
t1.id AS joina_id, " t1.pid AS joina_pid,\n" +
t1.pid AS joina_pid, " t1.`name` AS joina_name,\n" +
t1.`name` AS joina_name, " t1.`json` AS joina_json,\n" +
t1.`json` AS joina_json, " t1.sex AS joina_sex,\n" +
t1.sex AS joina_sex, " t1.head_img AS joina_head_img,\n" +
t1.head_img AS joina_head_img, " t1.create_time AS joina_create_time,\n" +
t1.create_time AS joina_create_time, " t1.address_id AS joina_address_id,\n" +
t1.address_id AS joina_address_id, " t1.address_id2 AS joina_address_id2,\n" +
t1.address_id2 AS joina_address_id2, " t1.del AS joina_del,\n" +
t1.del AS joina_del, " t1.create_by AS joina_create_by,\n" +
t1.create_by AS joina_create_by, " t1.update_by AS joina_update_by,\n" +
t1.update_by AS joina_update_by, " t2.id AS joinb_id,\n" +
t2.id AS joinb_id, " t2.pid AS joinb_pid,\n" +
t2.pid AS joinb_pid, " t2.`name` AS joinb_name,\n" +
t2.`name` AS joinb_name, " t2.`json` AS joinb_json,\n" +
t2.`json` AS joinb_json, " t2.sex AS joinb_sex,\n" +
t2.sex AS joinb_sex, " t2.head_img AS joinb_head_img,\n" +
t2.head_img AS joinb_head_img, " t2.create_time AS joinb_create_time,\n" +
t2.create_time AS joinb_create_time, " t2.address_id AS joinb_address_id,\n" +
t2.address_id AS joinb_address_id, " t2.address_id2 AS joinb_address_id2,\n" +
t2.address_id2 AS joinb_address_id2, " t2.del AS joinb_del,\n" +
t2.del AS joinb_del, " t2.create_by AS joinb_create_by,\n" +
t2.create_by AS joinb_create_by, " t2.update_by AS joinb_update_by\n" +
t2.update_by AS joinb_update_by "FROM `user` t\n" +
FROM `user` t " LEFT JOIN `user` t1 ON (t1.pid = t.id)\n" +
LEFT JOIN `user` t1 ON (t1.pid = t.id) " LEFT JOIN `user` t2 ON (t2.pid = t1.id)\n" +
LEFT JOIN `user` t2 ON (t2.pid = t1.id) "WHERE t.del = false\n" +
WHERE t.del = false " AND (t1.id <= ? AND t.id <= ?)");
AND (t1.id <= ? AND t.id <= ?)
""");
MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>() MPJLambdaWrapper<UserDO> wrapper1 = new MPJLambdaWrapper<UserDO>()
.disableSubLogicDel() .disableSubLogicDel()
.selectAll(UserDO.class) .selectAll(UserDO.class)
@ -435,30 +464,28 @@ class LambdaWrapperTest {
@Test @Test
void testTableAlias() { void testTableAlias() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
SELECT t.id, " t.pid,\n" +
t.pid, " t.`name`,\n" +
t.`name`, " t.`json`,\n" +
t.`json`, " t.sex,\n" +
t.sex, " t.head_img,\n" +
t.head_img, " t.create_time,\n" +
t.create_time, " t.address_id,\n" +
t.address_id, " t.address_id2,\n" +
t.address_id2, " t.del,\n" +
t.del, " t.create_by,\n" +
t.create_by, " t.update_by,\n" +
t.update_by, " aa.id,\n" +
aa.id, " aa.user_id,\n" +
aa.user_id, " aa.area_id,\n" +
aa.area_id, " aa.tel,\n" +
aa.tel, " aa.address,\n" +
aa.address, " aa.del\n" +
aa.del "FROM `user` t\n" +
FROM `user` t " LEFT JOIN address aa ON (aa.user_id = t.id)\n" +
LEFT JOIN address aa ON (aa.user_id = t.id) "WHERE t.del = false\n" +
WHERE t.del = false " AND aa.del = false");
AND aa.del = false
""");
MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>() MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
// .disableLogicDel()//关闭主表逻辑删除 // .disableLogicDel()//关闭主表逻辑删除
.selectAll(UserDO.class) .selectAll(UserDO.class)
@ -510,27 +537,25 @@ class LambdaWrapperTest {
*/ */
@Test @Test
void test3() { void test3() {
ThreadLocalUtils.set(""" ThreadLocalUtils.set("SELECT t.id,\n" +
SELECT t.id, " t.pid,\n" +
t.pid, " t.`name`,\n" +
t.`name`, " t.`json`,\n" +
t.`json`, " t.sex,\n" +
t.sex, " t.head_img,\n" +
t.head_img, " t.create_time,\n" +
t.create_time, " t.address_id,\n" +
t.address_id, " t.address_id2,\n" +
t.address_id2, " t.del,\n" +
t.del, " t.create_by,\n" +
t.create_by, " t.update_by,\n" +
t.update_by, " t1.address\n" +
t1.address "FROM `user` t\n" +
FROM `user` t " LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id)\n" +
LEFT JOIN address t1 ON (t.id = t1.user_id AND t.id = t1.user_id) "WHERE t.del = false\n" +
WHERE t.del = false " AND t1.del = false\n" +
AND t1.del = false " AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?)\n" +
AND (t.id = ? AND (t.head_img = ? OR t1.user_id = ?) AND t.id = ?) "LIMIT ?");
LIMIT ?
""");
IPage<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, IPage<UserDTO> page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class,
MPJWrappers.<UserDO>lambdaJoin() MPJWrappers.<UserDO>lambdaJoin()
.selectAll(UserDO.class) .selectAll(UserDO.class)