From 52a0eb3cc91b997b434a9f811db92c91e50d0422 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Mon, 30 Sep 2024 19:09:25 +0800 Subject: [PATCH] fix https://github.com/yulichang/mybatis-plus-join/issues/205 --- .../wrapper/segments/SelectCache.java | 6 +-- .../yulichang/test/join/entity/TableA.java | 39 +++++++++++++++++++ .../test/join/mapper/TableAMapper.java | 10 +++++ .../test-join/src/main/resources/db/data.sql | 14 ++++++- .../src/main/resources/db/oracle/data.sql | 13 ++++++- .../src/main/resources/db/oracle/schema.sql | 10 +++++ .../src/main/resources/db/pgsql/data.sql | 13 ++++++- .../src/main/resources/db/pgsql/schema.sql | 10 +++++ .../src/main/resources/db/schema.sql | 22 ++++++++--- .../test/join/unit/TypeHandlerTest.java | 16 +++++++- 10 files changed, 140 insertions(+), 13 deletions(-) create mode 100644 mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/TableA.java create mode 100644 mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/TableAMapper.java diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java index cc6a356..130744e 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java @@ -105,14 +105,14 @@ public class SelectCache implements Serializable { } public static class Cache { - private static final Map, Map, TypeHandler>> CACHE = new ConcurrentHashMap<>(); + private static final Map, Map>> CACHE = new ConcurrentHashMap<>(); public static TypeHandler getTypeHandlerCache(Class table, Class> typeHandler, Class propertyType, String columProperty) { if (table == null || typeHandler == null) { return null; } - Map, TypeHandler> map = CACHE.computeIfAbsent(table, k -> new ConcurrentHashMap<>()); - return map.computeIfAbsent(typeHandler, k -> { + Map> map = CACHE.computeIfAbsent(table, k -> new ConcurrentHashMap<>()); + return map.computeIfAbsent(columProperty, k -> { TableInfo info = TableHelper.getAssert(table); @SuppressWarnings("OptionalGetWithoutIsPresent") TableFieldInfo fieldInfo = info.getFieldList().stream().filter(f -> f.getProperty().equals(columProperty)).findFirst().get(); diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/TableA.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/TableA.java new file mode 100644 index 0000000..099b882 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/TableA.java @@ -0,0 +1,39 @@ +package com.github.yulichang.test.join.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.github.yulichang.annotation.Table; +import lombok.Data; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.util.List; +import java.util.Map; + +@Table +@Data +@ToString +@Accessors(chain = true) +@TableName(value = "tablea", autoResultMap = true) +public class TableA { + + @TableId + private Integer id; + + @TableField(typeHandler = JacksonTypeHandler.class) + private Map mapCol; + + @TableField(typeHandler = JacksonTypeHandler.class) + private Inner entryCol; + + @TableField(typeHandler = JacksonTypeHandler.class) + private List listCol; + + @Data + @ToString + public static class Inner{ + private String name; + } +} diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/TableAMapper.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/TableAMapper.java new file mode 100644 index 0000000..2c97bf9 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/TableAMapper.java @@ -0,0 +1,10 @@ +package com.github.yulichang.test.join.mapper; + +import com.github.yulichang.test.join.entity.TableA; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +@SuppressWarnings("unused") +public interface TableAMapper extends MyBaseMapper { + +} 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 999c425..d01e714 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 @@ -121,4 +121,16 @@ INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (5, 5, 1, '中文字段5'), (6, 6, 2, '中文字段6'), (7, 7, 2, '中文字段7'), -(8, 8, 2, '中文字段8'); \ No newline at end of file +(8, 8, 2, '中文字段8'); + + +DELETE FROM tablea; +INSERT INTO tablea (id,map_col, entry_col,list_col) VALUES +(1, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(2, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(3, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(4, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(5, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(6, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(7, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(8, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/data.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/data.sql index 1cdf40c..87d709f 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/data.sql +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/data.sql @@ -116,4 +116,15 @@ INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (4, 4, 1, INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (5, 5, 1, '中文字段5'); INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (6, 6, 2, '中文字段6'); INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (7, 7, 2, '中文字段7'); -INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (8, 8, 2, '中文字段8'); \ No newline at end of file +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (8, 8, 2, '中文字段8'); + +DELETE FROM tablea; +INSERT INTO tablea (id,map_col, entry_col,list_col) VALUES +(1, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(2, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(3, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(4, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(5, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(6, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(7, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(8, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/schema.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/schema.sql index 938930e..ebad90a 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/schema.sql +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/oracle/schema.sql @@ -82,4 +82,14 @@ create table user_tenanta user_id int null, tenant_id int null, 中文字段 varchar(255) null +); + +DROP TABLE IF EXISTS tablea; +create table tablea +( + id int + primary key, + map_col varchar(255) null, + entry_col varchar(255) null, + list_col varchar(255) null ); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/data.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/data.sql index 244f8cc..a8dc586 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/data.sql +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/data.sql @@ -116,4 +116,15 @@ INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (4, 4, 1, INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (5, 5, 1, '中文字段5'); INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (6, 6, 2, '中文字段6'); INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (7, 7, 2, '中文字段7'); -INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (8, 8, 2, '中文字段8'); \ No newline at end of file +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES (8, 8, 2, '中文字段8'); + +DELETE FROM tablea; +INSERT INTO tablea (id,map_col, entry_col,list_col) VALUES +(1, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(2, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(3, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(4, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(5, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(6, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(7, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'), +(8, '{"id":1}', '{"name":"Tom"}', '["jerry","Spike"]'); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/schema.sql b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/schema.sql index 56ed4e3..6491093 100644 --- a/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/schema.sql +++ b/mybatis-plus-join-test/test-join/src/main/resources/db/pgsql/schema.sql @@ -83,3 +83,13 @@ create table user_tenanta tenant_id int null, 中文字段 varchar(255) null ); + +DROP TABLE IF EXISTS tablea; +create table tablea +( + id int + primary key, + map_col varchar(255) null, + entry_col varchar(255) null, + list_col varchar(255) null +); 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 6a79230..7c190eb 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 @@ -5,7 +5,7 @@ DROP TABLE IF EXISTS area; create table area ( - id int + id int primary key, province varchar(255) null, city varchar(255) null, @@ -17,7 +17,7 @@ create table area DROP TABLE IF EXISTS `user`; create table `user` ( - id int + id int primary key, `pid` int null, `name` varchar(255) null, @@ -35,7 +35,7 @@ create table `user` DROP TABLE IF EXISTS address; create table address ( - id int + id int primary key, user_id int null, area_id int null, @@ -58,7 +58,7 @@ create table user_dto DROP TABLE IF EXISTS order_t; create table order_t ( - id int + id int primary key, user_id int null, age int null, @@ -68,7 +68,7 @@ create table order_t DROP TABLE IF EXISTS user_tenant; create table user_tenant ( - id int + id int primary key, user_id int null, tenant_id int null @@ -77,9 +77,19 @@ create table user_tenant DROP TABLE IF EXISTS user_tenanta; create table user_tenanta ( - id int + id int primary key, user_id int null, tenant_id int null, 中文字段 varchar(255) null +); + +DROP TABLE IF EXISTS tablea; +create table tablea +( + id int + primary key, + map_col varchar(255) null, + entry_col varchar(255) null, + list_col varchar(255) null ); \ No newline at end of file diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/TypeHandlerTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/TypeHandlerTest.java index 3f1bf03..4d3160f 100644 --- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/TypeHandlerTest.java +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/unit/TypeHandlerTest.java @@ -1,5 +1,6 @@ package com.github.yulichang.test.join.unit; +import com.github.yulichang.test.join.entity.TableA; import com.github.yulichang.test.join.entity.UserDO; import com.github.yulichang.test.util.Reset; import com.github.yulichang.toolkit.JoinWrappers; @@ -19,7 +20,7 @@ public class TypeHandlerTest { } @Test - void typeHandler(){ + void typeHandler() { MPJLambdaWrapper wrapper = JoinWrappers.lambda(UserDO.class); List list = wrapper.list(); @@ -28,4 +29,17 @@ public class TypeHandlerTest { list.forEach(System.out::println); } + + @Test + void typeHandler1() { + MPJLambdaWrapper wrapper = JoinWrappers.lambda(TableA.class); + + List list = wrapper.list(); + + assert list.get(0).getListCol() != null; + assert list.get(0).getEntryCol() != null; + assert list.get(0).getMapCol() != null; + + list.forEach(System.out::println); + } }