diff --git a/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableFieldInfo.java b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableFieldInfo.java index 0c630c6..608fda7 100644 --- a/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableFieldInfo.java +++ b/mybatis-plus-join-extension/src/main/java/com/github/yulichang/extension/mapping/mapper/MPJTableFieldInfo.java @@ -123,7 +123,7 @@ public class MPJTableFieldInfo { (!Arrays.asList(mapping.select()).contains(this.joinProperty.trim()) && !Arrays.asList(mapping.select()).contains(this.joinColumn.trim())); this.wrapper = new MPJMappingWrapper(mapping.first(), checkArr(mapping.select()) ? - (this.isRemoveBindField ? propToColumn(this.joinClass, mapping.select(), this.joinColumn) : + (this.isRemoveBindField ? propToColumn(this.joinClass, mapping.select(), this.joinProperty) : propToColumn(this.joinClass, mapping.select(), null)) : null, mapping.apply(), mapping.condition(), mapping.last(), mapping.orderByAsc(), mapping.orderByDesc()); } @@ -146,7 +146,7 @@ public class MPJTableFieldInfo { this.isRemoveBindField = !mappingField.select().equals(this.joinColumn.trim()) && !mappingField.select().equals(this.joinProperty.trim()); this.wrapper = new MPJMappingWrapper(mappingField.first(), this.isRemoveBindField ? - propToColumn(this.joinClass, new String[]{mappingField.select()}, this.joinColumn) : + propToColumn(this.joinClass, new String[]{mappingField.select()}, this.joinProperty) : propToColumn(this.joinClass, new String[]{mappingField.select()}, null), mappingField.apply(), mappingField.condition(), mappingField.last(), mappingField.orderByAsc(), mappingField.orderByDesc()); initBindField(mappingField.select()); @@ -201,9 +201,9 @@ public class MPJTableFieldInfo { this.joinColumn = joinFieldInfo.getColumn(); this.joinField = getField(this.joinClass, joinFieldInfo); } - Assert.notNull(this.joinField, "注解属性thisField不存在 %s , %s", this.joinClass.getName(), + Assert.notNull(this.joinField, "注解属性joinField不存在 %s , %s", this.joinClass.getName(), StringUtils.isBlank(this.joinProperty) ? "主键" : this.joinProperty); - Assert.notNull(this.joinColumn, "注解属性thisField不存在 %s , %s", this.joinClass.getName(), + Assert.notNull(this.joinColumn, "注解属性joinField不存在 %s , %s", this.joinClass.getName(), StringUtils.isBlank(this.joinProperty) ? "主键" : this.joinProperty); this.joinField.setAccessible(true); } @@ -268,7 +268,7 @@ public class MPJTableFieldInfo { } private boolean checkArr(String[] arr) { - if (Objects.isNull(arr) || arr.length <= 0) { + if (Objects.isNull(arr) || arr.length == 0) { return false; } return Arrays.stream(arr).anyMatch(StringUtils::isNotBlank); diff --git a/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AddressDO.java b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AddressDO.java index 4bfd471..6d9815e 100644 --- a/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AddressDO.java +++ b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AddressDO.java @@ -1,17 +1,21 @@ package com.github.yulichang.test.mapping.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; +import com.github.yulichang.annotation.FieldMapping; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import lombok.experimental.Accessors; +import lombok.experimental.FieldNameConstants; @Data @ToString @Accessors(chain = true) @EqualsAndHashCode +@FieldNameConstants @TableName("address") public class AddressDO { @@ -22,10 +26,16 @@ public class AddressDO { private Integer areaId; + private String city; + private String tel; private String address; @TableLogic private Boolean del; + + @TableField(exist = false) + @FieldMapping(tag = AreaDO.class, thisField = "city", joinField = "cityId", select = "area") + private String area; } diff --git a/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AreaDO.java b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AreaDO.java index fd1840f..7a3a130 100644 --- a/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AreaDO.java +++ b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/entity/AreaDO.java @@ -1,26 +1,26 @@ package com.github.yulichang.test.mapping.entity; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import lombok.experimental.Accessors; +import lombok.experimental.FieldNameConstants; @Data @ToString @Accessors(chain = true) @EqualsAndHashCode +@FieldNameConstants @TableName("area") public class AreaDO { - @TableId - private Integer id; + private Integer areaId; private String province; - private String city; + private String cityId; private String area; diff --git a/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/service/AddressService.java b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/service/AddressService.java new file mode 100644 index 0000000..dd09ced --- /dev/null +++ b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/service/AddressService.java @@ -0,0 +1,7 @@ +package com.github.yulichang.test.mapping.service; + +import com.github.yulichang.extension.mapping.base.MPJDeepService; +import com.github.yulichang.test.mapping.entity.AddressDO; + +public interface AddressService extends MPJDeepService { +} diff --git a/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/service/impl/AddressServiceImpl.java b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/service/impl/AddressServiceImpl.java new file mode 100644 index 0000000..475abdb --- /dev/null +++ b/mybatis-plus-join-test/test-mapping/src/main/java/com/github/yulichang/test/mapping/service/impl/AddressServiceImpl.java @@ -0,0 +1,12 @@ +package com.github.yulichang.test.mapping.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.yulichang.test.mapping.entity.AddressDO; +import com.github.yulichang.test.mapping.mapper.AddressMapper; +import com.github.yulichang.test.mapping.service.AddressService; +import org.springframework.stereotype.Service; + +@Service +public class AddressServiceImpl extends ServiceImpl implements AddressService { + +} diff --git a/mybatis-plus-join-test/test-mapping/src/main/resources/db/data.sql b/mybatis-plus-join-test/test-mapping/src/main/resources/db/data.sql index 7a3045b..b0e1861 100644 --- a/mybatis-plus-join-test/test-mapping/src/main/resources/db/data.sql +++ b/mybatis-plus-join-test/test-mapping/src/main/resources/db/data.sql @@ -4,28 +4,28 @@ DELETE FROM area; -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10001, '北京市01', '北京01', '朝阳01', '80001', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10002, '北京市02', '北京02', '朝阳02', '80002', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10003, '北京市03', '北京03', '朝阳03', '80003', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10004, '北京市04', '北京04', '朝阳04', '80004', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10005, '北京市05', '北京05', '朝阳05', '80005', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10006, '北京市06', '北京06', '朝阳06', '80006', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10007, '北京市07', '北京07', '朝阳07', '80007', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10008, '北京市08', '北京08', '朝阳08', '80008', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10009, '北京市09', '北京09', '朝阳09', '80009', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10010, '北京市10', '北京10', '朝阳10', '80010', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10011, '北京市11', '北京11', '朝阳11', '80011', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10012, '北京市12', '北京12', '朝阳12', '80012', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10013, '北京市13', '北京13', '朝阳13', '80013', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10014, '北京市14', '北京14', '朝阳14', '80014', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10015, '北京市15', '北京15', '朝阳15', '80015', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10016, '北京市16', '北京16', '朝阳16', '80016', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10017, '北京市17', '北京17', '朝阳17', '80017', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10018, '北京市18', '北京18', '朝阳18', '80018', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10019, '北京市19', '北京19', '朝阳19', '80019', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10020, '北京市20', '北京20', '朝阳20', '80020', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10021, '北京市21', '北京21', '朝阳21', '80021', false); -INSERT INTO area (id, province, city, area, postcode, del) VALUES (10022, '北京市22', '北京22', '朝阳22', '80022', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10001, '北京市01', '北京01', '朝阳01', '80001', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10002, '北京市02', '北京02', '朝阳02', '80002', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10003, '北京市03', '北京03', '朝阳03', '80003', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10004, '北京市04', '北京04', '朝阳04', '80004', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10005, '北京市05', '北京05', '朝阳05', '80005', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10006, '北京市06', '北京06', '朝阳06', '80006', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10007, '北京市07', '北京07', '朝阳07', '80007', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10008, '北京市08', '北京08', '朝阳08', '80008', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10009, '北京市09', '北京09', '朝阳09', '80009', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10010, '北京市10', '北京10', '朝阳10', '80010', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10011, '北京市11', '北京11', '朝阳11', '80011', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10012, '北京市12', '北京12', '朝阳12', '80012', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10013, '北京市13', '北京13', '朝阳13', '80013', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10014, '北京市14', '北京14', '朝阳14', '80014', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10015, '北京市15', '北京15', '朝阳15', '80015', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10016, '北京市16', '北京16', '朝阳16', '80016', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10017, '北京市17', '北京17', '朝阳17', '80017', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10018, '北京市18', '北京18', '朝阳18', '80018', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10019, '北京市19', '北京19', '朝阳19', '80019', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10020, '北京市20', '北京20', '朝阳20', '80020', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10021, '北京市21', '北京21', '朝阳21', '80021', false); +INSERT INTO area (area_id, province, city_id, area, postcode, del) VALUES (10022, '北京市22', '北京22', '朝阳22', '80022', false); DELETE FROM `user`; @@ -55,25 +55,25 @@ INSERT INTO `user` (id, pid, `name`, `address_id`, sex, head_img, del) VALUES (2 DELETE FROM address; -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 1, 1, 10001, '10000000001', '曹县01', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 2, 1, 10002, '10000000002', '曹县02', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 3, 1, 10003, '10000000003', '曹县03', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 4, 1, 10004, '10000000004', '曹县04', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 5, 1, 10005, '10000000005', '曹县05', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 6, 1, 10006, '10000000006', '曹县06', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 7, 1, 10007, '10000000007', '曹县07', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 8, 1, 10008, '10000000008', '曹县08', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES ( 9, 1, 10009, '10000000009', '曹县09', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (10,10, 10010, '10000000010', '曹县10', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (11,11, 10011, '10000000011', '曹县11', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (12,12, 10012, '10000000012', '曹县12', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (13,13, 10013, '10000000013', '曹县13', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (14,14, 10014, '10000000014', '曹县14', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (15,15, 10015, '10000000015', '曹县15', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (16,16, 10016, '10000000016', '曹县16', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (17,17, 10017, '10000000017', '曹县17', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (18,18, 10018, '10000000018', '曹县18', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (19,19, 10019, '10000000019', '曹县19', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (20,20, 10020, '10000000020', '曹县20', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (21,21, 10021, '10000000021', '曹县21', false); -INSERT INTO address (id, user_id, area_id, tel, address, del) VALUES (22,22, 10022, '10000000022', '曹县22', false); \ No newline at end of file +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 1, 1, 10001, '北京01', '10000000001', '曹县01', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 2, 1, 10002, '北京02', '10000000002', '曹县02', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 3, 1, 10003, '北京03', '10000000003', '曹县03', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 4, 1, 10004, '北京04', '10000000004', '曹县04', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 5, 1, 10005, '北京05', '10000000005', '曹县05', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 6, 1, 10006, '北京06', '10000000006', '曹县06', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 7, 1, 10007, '北京07', '10000000007', '曹县07', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 8, 1, 10008, '北京08', '10000000008', '曹县08', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES ( 9, 1, 10009, '北京09', '10000000009', '曹县09', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (10,10, 10010, '北京10', '10000000010', '曹县10', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (11,11, 10011, '北京11', '10000000011', '曹县11', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (12,12, 10012, '北京12', '10000000012', '曹县12', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (13,13, 10013, '北京13', '10000000013', '曹县13', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (14,14, 10014, '北京14', '10000000014', '曹县14', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (15,15, 10015, '北京15', '10000000015', '曹县15', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (16,16, 10016, '北京16', '10000000016', '曹县16', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (17,17, 10017, '北京17', '10000000017', '曹县17', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (18,18, 10018, '北京18', '10000000018', '曹县18', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (19,19, 10019, '北京19', '10000000019', '曹县19', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (20,20, 10020, '北京20', '10000000020', '曹县20', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (21,21, 10021, '北京21', '10000000021', '曹县21', false); +INSERT INTO address (id, user_id, area_id, city, tel, address, del) VALUES (22,22, 10022, '北京22', '10000000022', '曹县22', false); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-mapping/src/main/resources/db/schema.sql b/mybatis-plus-join-test/test-mapping/src/main/resources/db/schema.sql index f077cd5..9eb3ef8 100644 --- a/mybatis-plus-join-test/test-mapping/src/main/resources/db/schema.sql +++ b/mybatis-plus-join-test/test-mapping/src/main/resources/db/schema.sql @@ -6,10 +6,10 @@ DROP TABLE IF EXISTS area; create table area ( - id int auto_increment + area_id int auto_increment primary key, province varchar(255) null, - city varchar(255) null, + city_id varchar(255) null, area varchar(255) null, postcode varchar(255) null, del bit @@ -37,6 +37,7 @@ create table address primary key, user_id int null, area_id int null, + city varchar(255) null, tel varchar(255) null, address varchar(255) null, del bit diff --git a/mybatis-plus-join-test/test-mapping/src/test/java/com/github/yulichang/test/mapping/MappingTest.java b/mybatis-plus-join-test/test-mapping/src/test/java/com/github/yulichang/test/mapping/MappingTest.java index b9cc704..596afc2 100644 --- a/mybatis-plus-join-test/test-mapping/src/test/java/com/github/yulichang/test/mapping/MappingTest.java +++ b/mybatis-plus-join-test/test-mapping/src/test/java/com/github/yulichang/test/mapping/MappingTest.java @@ -1,8 +1,10 @@ package com.github.yulichang.test.mapping; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.test.mapping.entity.AddressDO; import com.github.yulichang.test.mapping.entity.UserDO; +import com.github.yulichang.test.mapping.service.AddressService; import com.github.yulichang.test.mapping.service.UserService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.junit.jupiter.api.Test; @@ -20,6 +22,8 @@ class MappingTest { @Autowired private UserService userService; + @Autowired + private AddressService addressService; @Test public void test() { @@ -50,4 +54,11 @@ class MappingTest { List dos = userService.listDeep(wrapper, conf -> conf.loop(false)); System.out.println(1); } + + @Test + public void testJoin1() { + List dos = addressService.listDeep(Wrappers.emptyWrapper()); + assert dos.get(0).getArea() != null; + dos.forEach(System.out::println); + } }