diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java index 92e4a2f..25f9cd9 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java @@ -240,6 +240,7 @@ public class MPJInterceptor implements Interceptor { columnName = getColumn(columnSet, columnName, 0); label = new SelectLabel(r.getSelectNormal(), null, mybatisLabel.getOfType(), field, columnName, StringUtils.isNotBlank(index), index); } else { + columnSet.add(columnName); label = new SelectLabel(r.getSelectNormal(), null, mybatisLabel.getOfType(), field, StringUtils.isNotBlank(index), index); } columnList.add(label); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java index 76322dc..ce20d55 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java @@ -191,14 +191,18 @@ public class MPJLambdaWrapper extends MPJAbstractLambdaWrapper extends Serializable { return getChildren(); } + /** + * 查询实体类全部字段 + */ + default Children selectAll(Class clazz, String prefix) { + getSelectColum().addAll(ColumnCache.getListField(clazz).stream().map(i -> + new SelectNormal(i, getIndex(), true, prefix)).collect(Collectors.toList())); + return getChildren(); + } + /** * select sql 片段 */ diff --git a/mybatis-plus-join-test/pom.xml b/mybatis-plus-join-test/pom.xml index 1b981e8..23fbc55 100644 --- a/mybatis-plus-join-test/pom.xml +++ b/mybatis-plus-join-test/pom.xml @@ -77,11 +77,6 @@ lombok 1.18.24 - - com.baomidou - mybatis-plus-boot-starter - 3.4.0 - com.github.yulichang mybatis-plus-join-boot-starter @@ -101,7 +96,7 @@ com.baomidou mybatis-plus-boot-starter - 3.4.2 + 3.5.3 org.springframework diff --git a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableADTO.java b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableADTO.java index baec4bb..9ba8cd8 100644 --- a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableADTO.java +++ b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableADTO.java @@ -14,4 +14,6 @@ public class TableADTO { private String name; private List bList; + + private TableBDTO b; } diff --git a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableBDTO.java b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableBDTO.java index b8643b5..71ffe23 100644 --- a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableBDTO.java +++ b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableBDTO.java @@ -15,5 +15,7 @@ public class TableBDTO { private String name; - private List ccList; + private List cList; + + private TableCDTO c; } diff --git a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableCDTO.java b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableCDTO.java index cb4c573..02fc139 100644 --- a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableCDTO.java +++ b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableCDTO.java @@ -16,4 +16,6 @@ public class TableCDTO { private String name; private List dList; + + private TableDDTO d; } diff --git a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableDDTO.java b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableDDTO.java index 202eaf8..ce815af 100644 --- a/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableDDTO.java +++ b/mybatis-plus-join-test/test-collection/src/main/java/com/github/yulichang/test/collection/dto/TableDDTO.java @@ -16,4 +16,6 @@ public class TableDDTO { private String name; private List eList; + + private TableEDTO e; } diff --git a/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java b/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java index 136bc97..72f3429 100644 --- a/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java +++ b/mybatis-plus-join-test/test-collection/src/test/java/com/github/yulichang/test/collection/CollectionTest.java @@ -35,11 +35,12 @@ class CollectionTest { */ @Test void testJoinCollection() { + testAA(); //4层嵌套 a对多b b对多c c对多d d对多e MPJLambdaWrapper wrapper1 = new MPJLambdaWrapper() .selectAll(TableA.class) .selectCollection(TableB.class, TableADTO::getBList, b -> b - .collection(TableC.class, TableBDTO::getCcList, c -> c + .collection(TableC.class, TableBDTO::getCList, c -> c .collection(TableD.class, TableCDTO::getDList, d -> d .collection(TableE.class, TableDDTO::getEList, e -> e .id(TableE::getId))))) @@ -52,7 +53,7 @@ class CollectionTest { MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(TableA.class) .selectCollection(TableB.class, TableADTO::getBList, b -> b - .collection(TableC.class, TableBDTO::getCcList, c -> c + .collection(TableC.class, TableBDTO::getCList, c -> c .collection(TableD.class, TableCDTO::getDList, d -> d .collection(TableE.class, TableDDTO::getEList)))) .leftJoin(TableB.class, TableB::getAid, TableA::getId) @@ -61,6 +62,24 @@ class CollectionTest { .leftJoin(TableE.class, TableE::getDid, TableD::getId); List dtos = tableAMapper.selectJoinList(TableADTO.class, wrapper); - assert dtos.get(0).getBList().get(0).getCcList().get(0).getDList().get(0).getEList().get(0).getName() != null; + assert dtos.get(0).getBList().get(0).getCList().get(0).getDList().get(0).getEList().get(0).getName() != null; + } + + @Test + void testAA() { + MPJLambdaWrapper wrapper1 = new MPJLambdaWrapper() + .selectAll(TableA.class) + .selectAssociation(TableB.class, TableADTO::getB, b -> b + .association(TableC.class, TableBDTO::getC, c -> c + .association(TableD.class, TableCDTO::getD, d -> d + .association(TableE.class, TableDDTO::getE, e -> e + .id(TableE::getId))))) + .leftJoin(TableB.class, TableB::getAid, TableA::getId) + .leftJoin(TableC.class, TableC::getBid, TableB::getId) + .leftJoin(TableD.class, TableD::getCid, TableC::getId) + .leftJoin(TableE.class, TableE::getDid, TableD::getId) + .last("LIMIT 1"); + List dtos1 = tableAMapper.selectJoinList(TableADTO.class, wrapper1); + System.out.println(1); } } diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserDO.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserDO.java index 3ad17bd..8a43903 100644 --- a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserDO.java +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserDO.java @@ -42,6 +42,8 @@ public class UserDO { private Integer addressId; + private Integer addressId2; + @TableLogic private Boolean del; @@ -61,4 +63,10 @@ public class UserDO { @TableField(exist = false) private List children; + + @TableField(exist = false) + private List addressList; + + @TableField(exist = false) + private List addressList2; } diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/service/UserService.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/service/UserService.java new file mode 100644 index 0000000..aa59823 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/service/UserService.java @@ -0,0 +1,5 @@ +package com.github.yulichang.test.join.service; + +public interface UserService { + +} diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/service/impl/UserServiceImpl.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..7f22117 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/service/impl/UserServiceImpl.java @@ -0,0 +1,9 @@ +package com.github.yulichang.test.join.service.impl; + +import com.github.yulichang.test.join.service.UserService; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + +} diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/data.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/data.sql index a85eb47..a8f43cd 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/db/data.sql +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/data.sql @@ -29,29 +29,29 @@ INSERT INTO area (id, province, city, area, postcode, del) VALUES (10022, '北 DELETE FROM `user`; -INSERT INTO `user` (id, pid, `name`, `json`, `address_id`, sex, head_img, create_time, create_by, update_by, del) VALUES -( 1, 1, '张三 1', '{"id": 1,"name":"张三 1"}', 1, 1, 'https://url-01', '2022-01-01 12:00:00', 1, 2, false), -( 2, 1, '张三 2', '{"id": 2,"name":"张三 2"}', 1, 0, 'https://url-02', '2022-01-01 12:00:00', 2, 3, false), -( 3, 1, '张三 3', '{"id": 3,"name":"张三 3"}', 1, 0, 'https://url-03', '2022-01-01 12:00:00', 3, 2, false), -( 4, 1, '张三 4', '{"id": 4,"name":"张三 4"}', 1, 0, 'https://url-04', '2022-01-01 12:00:00', 9, 2, false), -( 5, 1, '张三 5', '{"id": 5,"name":"张三 5"}', 1, 0, 'https://url-05', '2022-01-01 12:00:00', 1, 2, false), -( 6, 1, '张三 6', '{"id": 6,"name":"张三 6"}', 1, 0, 'https://url-06', '2022-01-01 12:00:00', 1, 2, false), -( 7, 1, '张三 7', '{"id": 7,"name":"张三 7"}', 1, 0, 'https://url-07', '2022-01-01 12:00:00', 1, 2, false), -( 8, 1, '张三 8', '{"id": 8,"name":"张三 8"}', 1, 0, 'https://url-08', '2022-01-01 12:00:00', 1, 2, false), -( 9, 1, '张三 9', '{"id": 9,"name":"张三 9"}', 1, 0, 'https://url-09', '2022-01-01 12:00:00', 1, 2, false), -(10, 1, '张三10', '{"id":10,"name":"张三10"}', 1, 0, 'https://url-10', '2022-01-01 12:00:00', 1, 2, true ), -(11, 1, '张三11', '{"id":11,"name":"张三11"}', 1, 0, 'https://url-11', '2022-01-01 12:00:00', 1, 2, true ), -(12, 1, '张三12', '{"id":12,"name":"张三12"}', 1, 0, 'https://url-12', '2022-01-01 12:00:00', 1, 2, true ), -(13, 1, '张三13', '{"id":13,"name":"张三13"}', 1, 0, 'https://url-13', '2022-01-01 12:00:00', 1, 2, true ), -(14, 2, '张三14', '{"id":14,"name":"张三14"}', 1, 0, 'https://url-14', '2022-01-01 12:00:00', 1, 2, false), -(15, 2, '张三15', '{"id":15,"name":"张三15"}', 1, 0, 'https://url-15', '2022-01-01 12:00:00', 1, 2, false), -(16, 2, '张三16', '{"id":16,"name":"张三16"}', 1, 0, 'https://url-16', '2022-01-01 12:00:00', 1, 2, false), -(17, 2, '张三17', '{"id":17,"name":"张三17"}', 1, 0, 'https://url-17', '2022-01-01 12:00:00', 1, 2, false), -(18, 2, '张三18', '{"id":18,"name":"张三18"}', 1, 0, 'https://url-18', '2022-01-01 12:00:00', 1, 2, false), -(19, 2, '张三19', '{"id":19,"name":"张三19"}', 1, 0, 'https://url-19', '2022-01-01 12:00:00', 1, 2, true ), -(20, 2, '张三20', '{"id":20,"name":"张三20"}', 1, 0, 'https://url-20', '2022-01-01 12:00:00', 1, 2, true ), -(21, 2, '张三21', '{"id":21,"name":"张三21"}', 1, 0, 'https://url-21', '2022-01-01 12:00:00', 1, 2, true ), -(22, 2, '张三22', '{"id":22,"name":"张三22"}', 1, 0, 'https://url-22', '2022-01-01 12:00:00', 1, 2, true ); +INSERT INTO `user` (id, pid, `name`, `json`, `address_id`, address_id2 , sex, head_img, create_time, create_by, update_by, del) VALUES +( 1, 1, '张三 1', '{"id": 1,"name":"张三 1"}', 1, 2, 1, 'https://url-01', '2022-01-01 12:00:00', 1, 2, false), +( 2, 1, '张三 2', '{"id": 2,"name":"张三 2"}', 1, 2, 0, 'https://url-02', '2022-01-01 12:00:00', 2, 3, false), +( 3, 1, '张三 3', '{"id": 3,"name":"张三 3"}', 1, 2, 0, 'https://url-03', '2022-01-01 12:00:00', 3, 2, false), +( 4, 1, '张三 4', '{"id": 4,"name":"张三 4"}', 1, 2, 0, 'https://url-04', '2022-01-01 12:00:00', 9, 2, false), +( 5, 1, '张三 5', '{"id": 5,"name":"张三 5"}', 1, 2, 0, 'https://url-05', '2022-01-01 12:00:00', 1, 2, false), +( 6, 1, '张三 6', '{"id": 6,"name":"张三 6"}', 1, 2, 0, 'https://url-06', '2022-01-01 12:00:00', 1, 2, false), +( 7, 1, '张三 7', '{"id": 7,"name":"张三 7"}', 1, 2, 0, 'https://url-07', '2022-01-01 12:00:00', 1, 2, false), +( 8, 1, '张三 8', '{"id": 8,"name":"张三 8"}', 1, 2, 0, 'https://url-08', '2022-01-01 12:00:00', 1, 2, false), +( 9, 1, '张三 9', '{"id": 9,"name":"张三 9"}', 1, 2, 0, 'https://url-09', '2022-01-01 12:00:00', 1, 2, false), +(10, 1, '张三10', '{"id":10,"name":"张三10"}', 1, 2, 0, 'https://url-10', '2022-01-01 12:00:00', 1, 2, true ), +(11, 1, '张三11', '{"id":11,"name":"张三11"}', 1, 2, 0, 'https://url-11', '2022-01-01 12:00:00', 1, 2, true ), +(12, 1, '张三12', '{"id":12,"name":"张三12"}', 1, 2, 0, 'https://url-12', '2022-01-01 12:00:00', 1, 2, true ), +(13, 1, '张三13', '{"id":13,"name":"张三13"}', 1, 2, 0, 'https://url-13', '2022-01-01 12:00:00', 1, 2, true ), +(14, 2, '张三14', '{"id":14,"name":"张三14"}', 1, 2, 0, 'https://url-14', '2022-01-01 12:00:00', 1, 2, false), +(15, 2, '张三15', '{"id":15,"name":"张三15"}', 1, 2, 0, 'https://url-15', '2022-01-01 12:00:00', 1, 2, false), +(16, 2, '张三16', '{"id":16,"name":"张三16"}', 1, 2, 0, 'https://url-16', '2022-01-01 12:00:00', 1, 2, false), +(17, 2, '张三17', '{"id":17,"name":"张三17"}', 1, 2, 0, 'https://url-17', '2022-01-01 12:00:00', 1, 2, false), +(18, 2, '张三18', '{"id":18,"name":"张三18"}', 1, 2, 0, 'https://url-18', '2022-01-01 12:00:00', 1, 2, false), +(19, 2, '张三19', '{"id":19,"name":"张三19"}', 1, 2, 0, 'https://url-19', '2022-01-01 12:00:00', 1, 2, true ), +(20, 2, '张三20', '{"id":20,"name":"张三20"}', 1, 2, 0, 'https://url-20', '2022-01-01 12:00:00', 1, 2, true ), +(21, 2, '张三21', '{"id":21,"name":"张三21"}', 1, 2, 0, 'https://url-21', '2022-01-01 12:00:00', 1, 2, true ), +(22, 2, '张三22', '{"id":22,"name":"张三22"}', 1, 2, 0, 'https://url-22', '2022-01-01 12:00:00', 1, 2, true ); DELETE FROM address; diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql index abbeb2c..5578bdd 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/schema.sql @@ -25,6 +25,7 @@ create table `user` `name` varchar(255) not null, `json` varchar(255) not null, `address_id` int not null, + `address_id2` int not null, sex tinyint not null, head_img varchar(255) not null, create_time datetime not null, @@ -55,4 +56,4 @@ create table user_dto update_by int not null, version int not null, del bit null -); \ No newline at end of file +); diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java index 8d1b26b..1ab52d2 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java @@ -53,6 +53,7 @@ class LambdaWrapperTest { list.forEach(System.out::println); } + @Test void testJoin1() { MPJLambdaWrapper wrapper = new MPJLambdaWrapper() @@ -96,6 +97,7 @@ class LambdaWrapperTest { @Test + @SuppressWarnings("unchecked") void testMSCache() { // PageHelper.startPage(1, 10); MPJLambdaWrapper wrapper = new MPJLambdaWrapper() @@ -240,6 +242,33 @@ class LambdaWrapperTest { System.out.println(list); } + @Test + void testTableAlias() { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper() +// .disableLogicDel()//关闭主表逻辑删除 + .selectAll(UserDO.class) + .selectAll(AddressDO.class, "aa") +// .selectCollection(UserDO.class, UserDO::getChildren) + .leftJoin(AddressDO.class, "aa", AddressDO::getUserId, UserDO::getId); + List list = userMapper.selectJoinList(UserDO.class, wrapper); + + System.out.println(list); + } + + @Test + void testLabel() { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper() + .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 list = userMapper.selectJoinList(UserDO.class, wrapper); + + System.out.println(list); + } + /** * 简单的分页关联查询 lambda