From 3652b622a5e72b0a55c40b4f84647e862eadc120 Mon Sep 17 00:00:00 2001 From: MaxKey Date: Sat, 18 Jul 2020 15:47:02 +0800 Subject: [PATCH] fix --- .../jpa/persistence/MapperMetadata.java | 27 +++++++---- .../config/applicationConfig.properties | 2 +- .../jpa/starter/MybatisAutoConfiguration.java | 12 +++++ .../jpa/starter/MybatisProperties.java | 45 ++++++++++++++++--- .../src/test/resources/application.properties | 6 ++- mybatis-jpa-extra-test/.project | 4 +- pom.xml | 2 +- 7 files changed, 76 insertions(+), 22 deletions(-) diff --git a/mybatis-jpa-extra-core/src/main/java/org/apache/mybatis/jpa/persistence/MapperMetadata.java b/mybatis-jpa-extra-core/src/main/java/org/apache/mybatis/jpa/persistence/MapperMetadata.java index ff888ec..f5dcb84 100644 --- a/mybatis-jpa-extra-core/src/main/java/org/apache/mybatis/jpa/persistence/MapperMetadata.java +++ b/mybatis-jpa-extra-core/src/main/java/org/apache/mybatis/jpa/persistence/MapperMetadata.java @@ -37,7 +37,11 @@ public class MapperMetadata { /** * 表名和字段名 */ - public static boolean TABLE_COLUMN_UPCASE = true; + public static boolean TABLE_COLUMN_UPCASE = true; + public static boolean TABLE_COLUMN_ESCAPE = false; + public static String TABLE_COLUMN_ESCAPE_CHAR = "`"; + + public transient static ConcurrentMap> fieldsMap = new ConcurrentHashMap>(); public transient static ConcurrentMap sqlsMap = new ConcurrentHashMap(); public static IdentifierGeneratorFactory identifierGeneratorFactory=new IdentifierGeneratorFactory(); @@ -50,7 +54,9 @@ public class MapperMetadata { } else { tablename = entityClass.getClass().getSimpleName(); } - return TABLE_COLUMN_UPCASE ? tablename.toUpperCase() : tablename; + tablename = TABLE_COLUMN_UPCASE ? tablename.toUpperCase() : tablename; + tablename = TABLE_COLUMN_ESCAPE ? TABLE_COLUMN_ESCAPE_CHAR + tablename + TABLE_COLUMN_ESCAPE_CHAR : tablename; + return tablename; } public static FieldColumnMapper getIdColumn(String classSimpleName) { @@ -81,18 +87,21 @@ public class MapperMetadata { FieldColumnMapper fieldColumnMapper=new FieldColumnMapper(); fieldColumnMapper.setFieldName( field.getName()); fieldColumnMapper.setFieldType(field.getType().getSimpleName()); - + String columnName = ""; Column columnAnnotation = (Column) field.getAnnotation(Column.class); if (columnAnnotation.name() != null && !columnAnnotation.name().equals("")) { - fieldColumnMapper.setColumnName(columnAnnotation.name()); + columnName = columnAnnotation.name(); } else { - if (TABLE_COLUMN_UPCASE) { - fieldColumnMapper.setColumnName(field.getName().toUpperCase()); - } else { - fieldColumnMapper.setColumnName(field.getName()); - } + columnName = TABLE_COLUMN_UPCASE ? + field.getName().toUpperCase() : field.getName(); } + columnName = TABLE_COLUMN_ESCAPE ? + TABLE_COLUMN_ESCAPE_CHAR + columnName + TABLE_COLUMN_ESCAPE_CHAR + : columnName; + + fieldColumnMapper.setColumnName(columnName); + if(field.isAnnotationPresent(Id.class)) { fieldColumnMapper.setIdColumn(true); } diff --git a/mybatis-jpa-extra-core/src/test/resources/config/applicationConfig.properties b/mybatis-jpa-extra-core/src/test/resources/config/applicationConfig.properties index 2a49e3b..18452c2 100644 --- a/mybatis-jpa-extra-core/src/test/resources/config/applicationConfig.properties +++ b/mybatis-jpa-extra-core/src/test/resources/config/applicationConfig.properties @@ -22,7 +22,7 @@ config.datasource.database=mysql # for Derby jdbc:derby://localhost:1527/secdb # config.datasource.driverclass=com.mysql.jdbc.Driver -config.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true&characterEncoding=UTF-8 +config.datasource.url=jdbc:mysql://localhost/test?autoReconnect=false&characterEncoding=UTF-8&serverTimezone=UTC config.datasource.username=root config.datasource.password=maxkey diff --git a/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisAutoConfiguration.java b/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisAutoConfiguration.java index 726382b..96cea5e 100644 --- a/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisAutoConfiguration.java +++ b/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisAutoConfiguration.java @@ -32,6 +32,7 @@ import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.type.TypeHandler; import org.apache.mybatis.jpa.MyBatisSessionFactoryBean; +import org.apache.mybatis.jpa.persistence.MapperMetadata; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.mapper.MapperFactoryBean; @@ -151,6 +152,17 @@ public class MybatisAutoConfiguration implements InitializingBean { factory.setDialect(this.properties.getDialect()); } + if(this.properties.isTableColumnEscape()) { + MapperMetadata.TABLE_COLUMN_ESCAPE = true; + if(StringUtils.hasLength(this.properties.getTableColumnEscapeChar())) { + MapperMetadata.TABLE_COLUMN_ESCAPE_CHAR = this.properties.getTableColumnEscapeChar(); + } + } + + if(this.properties.isTableColumnUpcase()) { + MapperMetadata.TABLE_COLUMN_UPCASE = true; + } + if (this.databaseIdProvider != null) { factory.setDatabaseIdProvider(this.databaseIdProvider); } diff --git a/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisProperties.java b/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisProperties.java index f51d7b6..a83338d 100644 --- a/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisProperties.java +++ b/mybatis-jpa-extra-spring-boot-starter/src/main/java/org/apache/mybatis/jpa/starter/MybatisProperties.java @@ -59,6 +59,13 @@ public class MybatisProperties { private String typeAliasesPackage; private String dialect; + + private boolean tableColumnEscape; + + private String tableColumnEscapeChar; + + private boolean tableColumnUpcase; + /** * The super class for filtering type alias. If this not specifies, the MyBatis deal as type alias all classes that * searched from typeAliasesPackage. @@ -214,12 +221,36 @@ public class MybatisProperties { } } - public String getDialect() { - return dialect; - } - - public void setDialect(String dialect) { - this.dialect = dialect; - } + public boolean isTableColumnEscape() { + return tableColumnEscape; + } + + public void setTableColumnEscape(boolean tableColumnEscape) { + this.tableColumnEscape = tableColumnEscape; + } + + public String getTableColumnEscapeChar() { + return tableColumnEscapeChar; + } + + public void setTableColumnEscapeChar(String tableColumnEscapeChar) { + this.tableColumnEscapeChar = tableColumnEscapeChar; + } + + public boolean isTableColumnUpcase() { + return tableColumnUpcase; + } + + public void setTableColumnUpcase(boolean tableColumnUpcase) { + this.tableColumnUpcase = tableColumnUpcase; + } + + public String getDialect() { + return dialect; + } + + public void setDialect(String dialect) { + this.dialect = dialect; + } } diff --git a/mybatis-jpa-extra-spring-boot-starter/src/test/resources/application.properties b/mybatis-jpa-extra-spring-boot-starter/src/test/resources/application.properties index 8b89180..906ce95 100644 --- a/mybatis-jpa-extra-spring-boot-starter/src/test/resources/application.properties +++ b/mybatis-jpa-extra-spring-boot-starter/src/test/resources/application.properties @@ -2,10 +2,12 @@ spring.main.web-application-type=NONE # spring.datasource.username=root spring.datasource.password=maxkey -spring.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true&characterEncoding=UTF-8 +spring.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource mybatis.type-aliases-package=org.apache.mybatis.jpa.test.domain -mybatis.mapper-locations=classpath*:/org/apache/mybatis/jpa/test/dao/persistence/xml/mysql/*.xml \ No newline at end of file +mybatis.mapper-locations=classpath*:/org/apache/mybatis/jpa/test/dao/persistence/xml/mysql/*.xml +mybatis.table-column-escape=true +mybatis.table-column-escape-char=` \ No newline at end of file diff --git a/mybatis-jpa-extra-test/.project b/mybatis-jpa-extra-test/.project index 95823cb..ebce930 100644 --- a/mybatis-jpa-extra-test/.project +++ b/mybatis-jpa-extra-test/.project @@ -11,12 +11,12 @@ - org.eclipse.m2e.core.maven2Builder + org.springframework.ide.eclipse.boot.validation.springbootbuilder - org.springframework.ide.eclipse.boot.validation.springbootbuilder + org.eclipse.m2e.core.maven2Builder diff --git a/pom.xml b/pom.xml index 6f79a87..8ffa71d 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 2.2.6.RELEASE 2.1.1 2.4.2 - 5.1.30 + 8.0.21 3.1.0 2.4 1.9 -- GitLab