From 08e4b70a02ef2b51c75d83cfd8246f937dcaa0d4 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Wed, 22 May 2024 05:19:51 +0800 Subject: [PATCH] fix: https://github.com/yulichang/mybatis-plus-join/issues/140 --- .../jsqlparser/v46/JSqlParserHelperV46.java | 2 +- .../adapter/jsqlparser/JSqlParserHelper.java | 2 +- .../yulichang/interceptor/MPJInterceptor.java | 17 ++++--- .../yulichang/toolkit/MPJStringUtils.java | 21 ++++++-- .../wrapper/segments/SelectCache.java | 3 +- .../wrapper/segments/SelectString.java | 3 +- .../yulichang/wrapper/segments/SelectSub.java | 3 +- mybatis-plus-join-test/pom.xml | 3 ++ .../test/join/entity/UserTenantaDO.java | 27 +++++++++++ .../test/join/mapper/UserTenantaMapper.java | 11 +++++ .../test-join/src/main/resources/db/data.sql | 13 ++++- .../src/main/resources/db/schema.sql | 48 +++++++++++-------- .../test/join/m/ChineseFieldTest.java | 19 ++++++++ 13 files changed, 133 insertions(+), 39 deletions(-) create mode 100644 mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserTenantaDO.java create mode 100644 mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/UserTenantaMapper.java create mode 100644 mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/ChineseFieldTest.java diff --git a/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser-v46/src/main/java/com/github/yulichang/adapter/jsqlparser/v46/JSqlParserHelperV46.java b/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser-v46/src/main/java/com/github/yulichang/adapter/jsqlparser/v46/JSqlParserHelperV46.java index a3e44c2..81b397c 100644 --- a/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser-v46/src/main/java/com/github/yulichang/adapter/jsqlparser/v46/JSqlParserHelperV46.java +++ b/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser-v46/src/main/java/com/github/yulichang/adapter/jsqlparser/v46/JSqlParserHelperV46.java @@ -42,7 +42,7 @@ public class JSqlParserHelperV46 { col = selectExpressionItem.getAlias().getName(); } if (StringUtils.isNotBlank(col)) { - columConsumer.accept(StringUtils.getTargetColumn(col)); + columConsumer.accept(col); } } } diff --git a/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser/src/main/java/com/github/yulichang/adapter/jsqlparser/JSqlParserHelper.java b/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser/src/main/java/com/github/yulichang/adapter/jsqlparser/JSqlParserHelper.java index 87de75d..ba461ee 100644 --- a/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser/src/main/java/com/github/yulichang/adapter/jsqlparser/JSqlParserHelper.java +++ b/mybatis-plus-join-adapter/jsqlparser/mybatis-plus-join-adapter-jsqlparser/src/main/java/com/github/yulichang/adapter/jsqlparser/JSqlParserHelper.java @@ -39,7 +39,7 @@ public class JSqlParserHelper { col = item.getAlias().getName(); } if (StringUtils.isNotBlank(col)) { - columConsumer.accept(StringUtils.getTargetColumn(col)); + columConsumer.accept(col); } } parser = true; 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 3fa755c..27b652d 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 @@ -3,15 +3,13 @@ package com.github.yulichang.interceptor; import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.*; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; import com.github.yulichang.adapter.AdapterHelper; import com.github.yulichang.adapter.base.tookit.VersionUtils; import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.interfaces.MPJBaseJoin; import com.github.yulichang.query.MPJQueryWrapper; -import com.github.yulichang.toolkit.Constant; -import com.github.yulichang.toolkit.MPJReflectionKit; -import com.github.yulichang.toolkit.MPJTableMapperHelper; -import com.github.yulichang.toolkit.TableHelper; +import com.github.yulichang.toolkit.*; import com.github.yulichang.toolkit.support.FieldCache; import com.github.yulichang.wrapper.interfaces.SelectWrapper; import com.github.yulichang.wrapper.resultmap.IResult; @@ -209,11 +207,12 @@ public class MPJInterceptor implements Interceptor { } } else if (wrapper.isResultMap()) { AdapterHelper.getAdapter().parserColum(wrapper.getAlias(), wrapper.getFrom(), i.getColumn(), col -> { - FieldCache strField = fieldMap.get(col); - columnSet.add(col); + String tagCol = MPJStringUtils.getTargetColumn(col); + FieldCache strField = fieldMap.get(tagCol); + columnSet.add(tagCol); if (Objects.nonNull(strField)) { - ResultMapping.Builder builder = new ResultMapping.Builder(ms.getConfiguration(), col, - col, strField.getType()); + ResultMapping.Builder builder = new ResultMapping.Builder(ms.getConfiguration(), tagCol, + tagCol, strField.getType()); resultMappings.add(selectToResult(wrapper.getEntityClass(), i, strField.getType(), builder)); } }); @@ -262,7 +261,7 @@ public class MPJInterceptor implements Interceptor { childId.append("("); Map ofTypeField = MPJReflectionKit.getFieldMap(mybatisLabel.getOfType()); //列名去重 - String columnName = StringUtils.getTargetColumn(r.getSelectNormal().getColumn()); + String columnName = r.getSelectNormal().getTagColumn(); SelectLabel label; FieldCache field = ofTypeField.get(r.getProperty()); String index = r.getIndex(); diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/MPJStringUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/MPJStringUtils.java index 8506652..50ec008 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/MPJStringUtils.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/MPJStringUtils.java @@ -36,6 +36,18 @@ import static java.util.stream.Collectors.joining; @SuppressWarnings("ALL") public final class MPJStringUtils { + /** + * 判断是否是中文 + */ + public static boolean isChinese(String str) { + if(isBlank(str)) + return false; + char c = str.charAt(0); + return c >= 0x4E00 && c <= 0x9FA5; + } + + /* *************************** 以下为拷贝内容 **************************** */ + /** * 字符串 is */ @@ -138,6 +150,9 @@ public final class MPJStringUtils { * @return 字段名 */ public static String getTargetColumn(String column) { + if(isChinese(column)){ + return column; + } if (isNotColumnName(column)) { return column.substring(1, column.length() - 1); } @@ -303,7 +318,7 @@ public final class MPJStringUtils { */ public static String quotaMarkList(Collection coll) { return coll.stream().map(MPJStringUtils::quotaMark) - .collect(joining(StringPool.COMMA, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET)); + .collect(joining(StringPool.COMMA, StringPool.LEFT_BRACKET, StringPool.RIGHT_BRACKET)); } /** @@ -522,8 +537,8 @@ public final class MPJStringUtils { char lastChar = 'a'; for (char c : s.toCharArray()) { if ((Character.isWhitespace(lastChar)) && (!Character.isWhitespace(c)) - && ('-' != c) && (buf.length() > 0) - && (buf.charAt(buf.length() - 1) != '-')) { + && ('-' != c) && (buf.length() > 0) + && (buf.charAt(buf.length() - 1) != '-')) { buf.append(StringPool.DASH); } if ('_' == c) { 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 6ed4942..b42a2c1 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 @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.yulichang.config.ConfigProperties; +import com.github.yulichang.toolkit.MPJStringUtils; import com.github.yulichang.toolkit.TableHelper; import lombok.Getter; import org.apache.ibatis.session.Configuration; @@ -75,7 +76,7 @@ public class SelectCache { this.column = column; this.columnType = columnType; this.columProperty = columProperty; - this.tagColumn = StringUtils.getTargetColumn(column); + this.tagColumn = MPJStringUtils.getTargetColumn(column); this.tableFieldInfo = tableFieldInfo; if (Objects.isNull(tableFieldInfo)) { this.hasTypeHandle = false; diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectString.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectString.java index 31b60dd..975bed9 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectString.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectString.java @@ -1,7 +1,6 @@ package com.github.yulichang.wrapper.segments; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.yulichang.wrapper.enums.BaseFuncEnum; import org.apache.ibatis.type.TypeHandler; @@ -18,7 +17,7 @@ public class SelectString implements Select { public SelectString(String column, String tagProperty) { this.column = column; - this.tagProperty = null == tagProperty ? null : StringUtils.getTargetColumn(tagProperty); + this.tagProperty = tagProperty; } @Override diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectSub.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectSub.java index 68908a9..8426987 100644 --- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectSub.java +++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectSub.java @@ -2,7 +2,6 @@ package com.github.yulichang.wrapper.segments; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.toolkit.StringPool; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.github.yulichang.wrapper.enums.BaseFuncEnum; import org.apache.ibatis.type.TypeHandler; @@ -29,7 +28,7 @@ public class SelectSub implements Select { this.column = column; this.hasTableAlias = hasTableAlias; this.tableAlias = tableAlias; - this.tagProperty = null == tagProperty ? null : StringUtils.getTargetColumn(tagProperty); + this.tagProperty = tagProperty; } @Override diff --git a/mybatis-plus-join-test/pom.xml b/mybatis-plus-join-test/pom.xml index 1bad1ea..94dff8c 100644 --- a/mybatis-plus-join-test/pom.xml +++ b/mybatis-plus-join-test/pom.xml @@ -59,6 +59,9 @@ 1.8 github UTF-8 + UTF-8 + UTF-8 + -Dfile.encoding=UTF-8 diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserTenantaDO.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserTenantaDO.java new file mode 100644 index 0000000..c792fc5 --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/entity/UserTenantaDO.java @@ -0,0 +1,27 @@ +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 lombok.Data; +import lombok.ToString; +import lombok.experimental.FieldNameConstants; + +@Data +@ToString +@FieldNameConstants +@TableName(value = "user_tenanta",autoResultMap = true) +public class UserTenantaDO { + + @TableId("id") + private Integer idea; + + @TableField("user_id") + private Integer uuid; + + private Integer tenantId; + + @TableField("中文字段") + private String detail; +} diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/UserTenantaMapper.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/UserTenantaMapper.java new file mode 100644 index 0000000..51ee9ea --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/UserTenantaMapper.java @@ -0,0 +1,11 @@ +package com.github.yulichang.test.join.mapper; + +import com.github.yulichang.test.join.entity.UserTenantaDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +@SuppressWarnings("unused") +public interface UserTenantaMapper 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 e9e4427..f0b2231 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 @@ -110,4 +110,15 @@ INSERT INTO user_tenant (id,user_id, tenant_id) VALUES (5, 5, 1), (6, 6, 2), (7, 7, 2), -(8, 8, 2); \ No newline at end of file +(8, 8, 2); + +DELETE FROM user_tenanta; +INSERT INTO user_tenanta (id,user_id, tenant_id, 中文字段) VALUES +(1, 1, 1, '中文字段1'), +(2, 2, 1, '中文字段2'), +(3, 3, 1, '中文字段3'), +(4, 4, 1, '中文字段4'), +(5, 5, 1, '中文字段5'), +(6, 6, 2, '中文字段6'), +(7, 7, 2, '中文字段7'), +(8, 8, 2, '中文字段8'); \ No newline at end of file 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 64c7602..55e197a 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 @@ -19,16 +19,16 @@ create table `user` ( id int auto_increment primary key, - `pid` int null, - `name` varchar(255) null, - `json` varchar(255) null, - `address_id` int null, - `address_id2` int null, - sex tinyint null, - head_img varchar(255) null, - create_time datetime null, - create_by int null, - update_by int null, + `pid` int null, + `name` varchar(255) null, + `json` varchar(255) null, + `address_id` int null, + `address_id2` int null, + sex tinyint null, + head_img varchar(255) null, + create_time datetime null, + create_by int null, + update_by int null, del bit ); @@ -49,9 +49,9 @@ create table user_dto ( id int auto_increment primary key, - user_id int null, - create_by int null, - update_by int null, + user_id int null, + create_by int null, + update_by int null, del bit null ); @@ -60,16 +60,26 @@ create table order_t ( id int auto_increment primary key, - user_id int null, - age int null, - name varchar(255) null + user_id int null, + age int null, + name varchar(255) null ); DROP TABLE IF EXISTS user_tenant; create table user_tenant ( - id int auto_increment + id int auto_increment primary key, - user_id int null, - tenant_id int null + user_id int null, + tenant_id int null +); + +DROP TABLE IF EXISTS user_tenanta; +create table user_tenanta +( + id int auto_increment + primary key, + user_id int null, + tenant_id int null, + 中文字段 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/m/ChineseFieldTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/ChineseFieldTest.java new file mode 100644 index 0000000..f3265ad --- /dev/null +++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/m/ChineseFieldTest.java @@ -0,0 +1,19 @@ +package com.github.yulichang.test.join.m; + +import com.github.yulichang.test.join.entity.UserTenantaDO; +import com.github.yulichang.toolkit.JoinWrappers; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +@SpringBootTest +public class ChineseFieldTest { + + @Test + void chineseField() { + List list = JoinWrappers.lambda(UserTenantaDO.class).list(); + assert list.get(0).getDetail() != null; + list.forEach(System.out::println); + } +}