소스 검색

统一格式

Caratacus 7 년 전
부모
커밋
5522bb1353
74개의 변경된 파일1278개의 추가작업 그리고 1276개의 파일을 삭제
  1. 10 10
      mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/spring/boot/starter/MybatisPlusAutoConfiguration.java
  2. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisDefaultParameterHandler.java
  3. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisMapWrapperFactory.java
  4. 60 60
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisMapperAnnotationBuilder.java
  5. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisXMLConfigBuilder.java
  6. 22 22
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/handlers/BlobTypeHandler.java
  7. 1 1
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/handlers/EnumTypeHandler.java
  8. 4 4
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/SqlExplainInterceptor.java
  9. 2 2
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/DB2Dialect.java
  10. 6 6
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/SQLServer2005Dialect.java
  11. 9 9
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/spring/MybatisMapperRefresh.java
  12. 9 9
      mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/spring/MybatisSqlSessionFactoryBean.java
  13. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2HorseCamelUnderMixTest.java
  14. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2LogicDeleteTest.java
  15. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2SqlRunnerTest.java
  16. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java
  17. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserUnderlineNamingTest.java
  18. 16 16
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/base/AbstractH2UserTest.java
  19. 3 3
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/base/H2Test.java
  20. 3 3
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisConfigMetaObjOptLockConfig.java
  21. 3 3
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfig.java
  22. 4 4
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfigMapUnderline2Camel.java
  23. 3 3
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusLoginDeleteConfig.java
  24. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusMetaObjConfig.java
  25. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusNoOptLockConfig.java
  26. 3 3
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusSequenceConfig.java
  27. 18 18
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2PersonCamelMapper.java
  28. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserDateVersionMapper.java
  29. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserExtendsMapper.java
  30. 3 3
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserLogicDeleteMapper.java
  31. 18 18
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserMapper.java
  32. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserMetaobjMapper.java
  33. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserNoVersionMapper.java
  34. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserSequenceExtendsMapper.java
  35. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserSequenceMapper.java
  36. 8 8
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserVersionAndLogicDeleteMapper.java
  37. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2Horse.java
  38. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2Person.java
  39. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2User.java
  40. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2UserIntVersionAR.java
  41. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2UserUnderline.java
  42. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/hikaricp/H2HikaricpTest.java
  43. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/tomcatjdbc/TomcatJdbcH2Test.java
  44. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/UserMapperTest.java
  45. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/entity/Role.java
  46. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/entity/User.java
  47. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/typehandler/PhoneTypeHandler.java
  48. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/oracle/TestUserMapperTest.java
  49. 2 2
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleMybatisPlusConfig.java
  50. 1 1
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/proxy/MapperProxyFactory.java
  51. 5 3
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/LogicDeleteAllSqlTest.java
  52. 22 22
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/SqlBuilderTest.java
  53. 8 8
      mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/SqlUtilsTest.java
  54. 1 2
      mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/engine/AbstractTemplateEngine.java
  55. 6 4
      mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/engine/FreemarkerTemplateEngine.java
  56. 0 1
      mybatis-plus-generate/src/test/java/com/baomidou/mybatisplus/test/generator/PostgreSQLGenerator.java
  57. 4 4
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/MybatisSqlSessionTemplate.java
  58. 1 1
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/activerecord/Model.java
  59. 1 1
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/entity/TableFieldInfo.java
  60. 43 43
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java
  61. 1 1
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/BaseMapper.java
  62. 11 11
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/SqlRunner.java
  63. 3 3
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/ClassUtils.java
  64. 1 1
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/EnumUtils.java
  65. 2 2
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/PackageHelper.java
  66. 0 1
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/PluginUtils.java
  67. 5 5
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/ReflectionKit.java
  68. 4 4
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/Sequence.java
  69. 10 10
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlFormatter.java
  70. 104 104
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlReservedWords.java
  71. 1 0
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlUtils.java
  72. 791 791
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/StringUtils.java
  73. 4 4
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/TableInfoHelper.java
  74. 1 1
      mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/VersionUtils.java

+ 10 - 10
mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/spring/boot/starter/MybatisPlusAutoConfiguration.java

@@ -5,10 +5,6 @@ import java.util.List;
 import javax.annotation.PostConstruct;
 import javax.sql.DataSource;
 
-import com.baomidou.mybatisplus.entity.GlobalConfiguration;
-import com.baomidou.mybatisplus.incrementer.IKeyGenerator;
-import com.baomidou.mybatisplus.mapper.ISqlInjector;
-import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
@@ -47,6 +43,10 @@ import org.springframework.util.StringUtils;
 
 import com.baomidou.mybatisplus.MybatisConfiguration;
 import com.baomidou.mybatisplus.MybatisXMLLanguageDriver;
+import com.baomidou.mybatisplus.entity.GlobalConfiguration;
+import com.baomidou.mybatisplus.incrementer.IKeyGenerator;
+import com.baomidou.mybatisplus.mapper.ISqlInjector;
+import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
 import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
 
 /**
@@ -89,7 +89,7 @@ public class MybatisPlusAutoConfiguration {
                                         ObjectProvider<Interceptor[]> interceptorsProvider,
                                         ResourceLoader resourceLoader,
                                         ObjectProvider<DatabaseIdProvider> databaseIdProvider,
-                                        ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider,ApplicationContext applicationContext) {
+                                        ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider, ApplicationContext applicationContext) {
         this.properties = properties;
         this.interceptors = interceptorsProvider.getIfAvailable();
         this.resourceLoader = resourceLoader;
@@ -152,7 +152,7 @@ public class MybatisPlusAutoConfiguration {
         GlobalConfiguration globalConfig;
         if (!ObjectUtils.isEmpty(this.properties.getGlobalConfig())) {
             globalConfig = this.properties.getGlobalConfig().convertGlobalConfiguration();
-        }else {
+        } else {
             globalConfig = new GlobalConfiguration();
         }
         //注入填充器
@@ -162,14 +162,14 @@ public class MybatisPlusAutoConfiguration {
             globalConfig.setMetaObjectHandler(metaObjectHandler);
         }
         //注入主键生成器
-        if(this.applicationContext.getBeanNamesForType(IKeyGenerator.class,false,
-            false).length >0){
+        if (this.applicationContext.getBeanNamesForType(IKeyGenerator.class, false,
+            false).length > 0) {
             IKeyGenerator keyGenerator = this.applicationContext.getBean(IKeyGenerator.class);
             globalConfig.setKeyGenerator(keyGenerator);
         }
         //注入sql注入器
-        if(this.applicationContext.getBeanNamesForType(ISqlInjector.class,false,
-            false).length >0){
+        if (this.applicationContext.getBeanNamesForType(ISqlInjector.class, false,
+            false).length > 0) {
             ISqlInjector iSqlInjector = this.applicationContext.getBean(ISqlInjector.class);
             globalConfig.setSqlInjector(iSqlInjector);
         }

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisDefaultParameterHandler.java

@@ -114,7 +114,7 @@ public class MybatisDefaultParameterHandler extends DefaultParameterHandler {
         if (ms.getSqlCommandType() == SqlCommandType.INSERT) {
             isFill = true;
         } else if (ms.getSqlCommandType() == SqlCommandType.UPDATE
-                && metaObjectHandler.openUpdateFill()) {
+            && metaObjectHandler.openUpdateFill()) {
             isFill = true;
         }
         if (isFill) {

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisMapWrapperFactory.java

@@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.mapper.MybatisMapWrapper;
 
 /**
  * <p>
- *   开启返回map结果集的下划线转驼峰
+ * 开启返回map结果集的下划线转驼峰
  * </p>
  *
  * @author yuxiaobin

+ 60 - 60
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisMapperAnnotationBuilder.java

@@ -201,7 +201,7 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
             Long flushInterval = cacheDomain.flushInterval() == 0 ? null : cacheDomain.flushInterval();
             Properties props = convertToProperties(cacheDomain.properties());
             assistant.useNewCache(cacheDomain.implementation(), cacheDomain.eviction(), flushInterval, size,
-                    cacheDomain.readWrite(), cacheDomain.blocking(), props);
+                cacheDomain.readWrite(), cacheDomain.blocking(), props);
         }
     }
 
@@ -290,7 +290,7 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
             JdbcType jdbcType = discriminator.jdbcType() == JdbcType.UNDEFINED ? null : discriminator.jdbcType();
             @SuppressWarnings("unchecked")
             Class<? extends TypeHandler<?>> typeHandler = (Class<? extends TypeHandler<?>>) (discriminator.typeHandler() == UnknownTypeHandler.class ? null
-                    : discriminator.typeHandler());
+                : discriminator.typeHandler());
             Case[] cases = discriminator.cases();
             Map<String, String> discriminatorMap = new HashMap<>();
             for (Case c : cases) {
@@ -369,30 +369,30 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
             }
 
             assistant.addMappedStatement(
-                    mappedStatementId,
-                    sqlSource,
-                    statementType,
-                    sqlCommandType,
-                    fetchSize,
-                    timeout,
-                    // ParameterMapID
-                    null,
-                    parameterTypeClass,
-                    resultMapId,
-                    getReturnType(method),
-                    resultSetType,
-                    flushCache,
-                    useCache,
-                    // TODO gcode issue #577
-                    false,
-                    keyGenerator,
-                    keyProperty,
-                    keyColumn,
-                    // DatabaseID
-                    null,
-                    languageDriver,
-                    // ResultSets
-                    options != null ? nullOrEmpty(options.resultSets()) : null);
+                mappedStatementId,
+                sqlSource,
+                statementType,
+                sqlCommandType,
+                fetchSize,
+                timeout,
+                // ParameterMapID
+                null,
+                parameterTypeClass,
+                resultMapId,
+                getReturnType(method),
+                resultSetType,
+                flushCache,
+                useCache,
+                // TODO gcode issue #577
+                false,
+                keyGenerator,
+                keyProperty,
+                keyColumn,
+                // DatabaseID
+                null,
+                languageDriver,
+                // ResultSets
+                options != null ? nullOrEmpty(options.resultSets()) : null);
         }
     }
 
@@ -410,7 +410,7 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
         Class<?>[] parameterTypes = method.getParameterTypes();
         for (Class<?> currentParameterType : parameterTypes) {
             if (!RowBounds.class.isAssignableFrom(currentParameterType)
-                    && !ResultHandler.class.isAssignableFrom(currentParameterType)) {
+                && !ResultHandler.class.isAssignableFrom(currentParameterType)) {
                 if (parameterType == null) {
                     parameterType = currentParameterType;
                 } else {
@@ -553,22 +553,22 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
             }
             @SuppressWarnings("unchecked")
             Class<? extends TypeHandler<?>> typeHandler = (Class<? extends TypeHandler<?>>)
-                    ((result.typeHandler() == UnknownTypeHandler.class) ? null : result.typeHandler());
+                ((result.typeHandler() == UnknownTypeHandler.class) ? null : result.typeHandler());
             ResultMapping resultMapping = assistant.buildResultMapping(
-                    resultType,
-                    nullOrEmpty(result.property()),
-                    nullOrEmpty(result.column()),
-                    result.javaType() == void.class ? null : result.javaType(),
-                    result.jdbcType() == JdbcType.UNDEFINED ? null : result.jdbcType(),
-                    hasNestedSelect(result) ? nestedSelectId(result) : null,
-                    null,
-                    null,
-                    null,
-                    typeHandler,
-                    flags,
-                    null,
-                    null,
-                    isLazy(result));
+                resultType,
+                nullOrEmpty(result.property()),
+                nullOrEmpty(result.column()),
+                result.javaType() == void.class ? null : result.javaType(),
+                result.jdbcType() == JdbcType.UNDEFINED ? null : result.jdbcType(),
+                hasNestedSelect(result) ? nestedSelectId(result) : null,
+                null,
+                null,
+                null,
+                typeHandler,
+                flags,
+                null,
+                null,
+                isLazy(result));
             resultMappings.add(resultMapping);
         }
     }
@@ -610,22 +610,22 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
             }
             @SuppressWarnings("unchecked")
             Class<? extends TypeHandler<?>> typeHandler = (Class<? extends TypeHandler<?>>)
-                    (arg.typeHandler() == UnknownTypeHandler.class ? null : arg.typeHandler());
+                (arg.typeHandler() == UnknownTypeHandler.class ? null : arg.typeHandler());
             ResultMapping resultMapping = assistant.buildResultMapping(
-                    resultType,
-                    nullOrEmpty(arg.name()),
-                    nullOrEmpty(arg.column()),
-                    arg.javaType() == void.class ? null : arg.javaType(),
-                    arg.jdbcType() == JdbcType.UNDEFINED ? null : arg.jdbcType(),
-                    nullOrEmpty(arg.select()),
-                    nullOrEmpty(arg.resultMap()),
-                    null,
-                    null,
-                    typeHandler,
-                    flags,
-                    null,
-                    null,
-                    false);
+                resultType,
+                nullOrEmpty(arg.name()),
+                nullOrEmpty(arg.column()),
+                arg.javaType() == void.class ? null : arg.javaType(),
+                arg.jdbcType() == JdbcType.UNDEFINED ? null : arg.jdbcType(),
+                nullOrEmpty(arg.select()),
+                nullOrEmpty(arg.resultMap()),
+                null,
+                null,
+                typeHandler,
+                flags,
+                null,
+                null,
+                false);
             resultMappings.add(resultMapping);
         }
     }
@@ -664,8 +664,8 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
         SqlCommandType sqlCommandType = SqlCommandType.SELECT;
 
         assistant.addMappedStatement(id, sqlSource, statementType, sqlCommandType, fetchSize, timeout, parameterMap, parameterTypeClass, resultMap, resultTypeClass, resultSetTypeEnum,
-                flushCache, useCache, false,
-                keyGenerator, keyProperty, keyColumn, null, languageDriver, null);
+            flushCache, useCache, false,
+            keyGenerator, keyProperty, keyColumn, null, languageDriver, null);
 
         id = assistant.applyCurrentNamespace(id, false);
 
@@ -675,4 +675,4 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
         return answer;
     }
 
-}
+}

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/MybatisXMLConfigBuilder.java

@@ -288,8 +288,8 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
                     DataSourceFactory dsFactory = dataSourceElement(child.evalNode("dataSource"));
                     DataSource dataSource = dsFactory.getDataSource();
                     Environment.Builder environmentBuilder = new Environment.Builder(id)
-                            .transactionFactory(txFactory)
-                            .dataSource(dataSource);
+                        .transactionFactory(txFactory)
+                        .dataSource(dataSource);
                     configuration.setEnvironment(environmentBuilder.build());
                 }
             }
@@ -380,7 +380,7 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
                 InputStream inputStream = Resources.getResourceAsStream(resource);
                 //TODO
                 XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource,
-                        configuration.getSqlFragments());
+                    configuration.getSqlFragments());
                 mapperParser.parse();
             }
             for (Class<?> mapper : mapperClasses) {
@@ -419,7 +419,7 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
                     mapper.add(mapperInterface);
                 } else {
                     throw new BuilderException(
-                            "A mapper element may only specify a url, resource or class, but not more than one.");
+                        "A mapper element may only specify a url, resource or class, but not more than one.");
                 }
             }
         }

+ 22 - 22
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/handlers/BlobTypeHandler.java

@@ -38,30 +38,30 @@ import com.baomidou.mybatisplus.toolkit.StringUtils;
  */
 public class BlobTypeHandler extends BaseTypeHandler<String> {
 
-	@Override
-	public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
-		try {
-			ps.setBinaryStream(i, new ByteArrayInputStream(parameter.getBytes(StringUtils.UTF8)),
-					parameter.length());
-		} catch (UnsupportedEncodingException e) {
-			throw new MybatisPlusException("Blob Encoding Error!");
-		}
-	}
+    @Override
+    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
+        try {
+            ps.setBinaryStream(i, new ByteArrayInputStream(parameter.getBytes(StringUtils.UTF8)),
+                parameter.length());
+        } catch (UnsupportedEncodingException e) {
+            throw new MybatisPlusException("Blob Encoding Error!");
+        }
+    }
 
-	@Override
-	public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
-		return StringUtils.blob2String(rs.getBlob(columnName));
-	}
+    @Override
+    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
+        return StringUtils.blob2String(rs.getBlob(columnName));
+    }
 
-	@Override
-	public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
-		return StringUtils.blob2String(cs.getBlob(columnIndex));
-	}
+    @Override
+    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+        return StringUtils.blob2String(cs.getBlob(columnIndex));
+    }
 
-	@Override
-	public String getNullableResult(ResultSet rs, int columnIndex)
-			throws SQLException {
-		return null;
-	}
+    @Override
+    public String getNullableResult(ResultSet rs, int columnIndex)
+        throws SQLException {
+        return null;
+    }
 
 }

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/handlers/EnumTypeHandler.java

@@ -47,7 +47,7 @@ public class EnumTypeHandler<E extends Enum<?> & IEnum> extends BaseTypeHandler<
 
     @Override
     public void setNonNullParameter(PreparedStatement ps, int i, IEnum parameter, JdbcType jdbcType)
-            throws SQLException {
+        throws SQLException {
         if (jdbcType == null) {
             ps.setObject(i, parameter.getValue());
         } else {

+ 4 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/SqlExplainInterceptor.java

@@ -76,7 +76,7 @@ public class SqlExplainInterceptor implements Interceptor {
             Connection connection = executor.getTransaction().getConnection();
             String databaseVersion = connection.getMetaData().getDatabaseProductVersion();
             if (GlobalConfigUtils.getDbType(configuration).equals(DBType.MYSQL)
-                    && VersionUtils.compare(minMySQLVersion, databaseVersion)) {
+                && VersionUtils.compare(minMySQLVersion, databaseVersion)) {
                 logger.warn("Warn: Your mysql version needs to be greater than '5.6.3' to execute of Sql Explain!");
                 return invocation.proceed();
             }
@@ -108,9 +108,9 @@ public class SqlExplainInterceptor implements Interceptor {
         String sqlExplain = explain.toString();
         StaticSqlSource sqlsource = new StaticSqlSource(configuration, sqlExplain, boundSql.getParameterMappings());
         MappedStatement.Builder builder = new MappedStatement.Builder(configuration, "explain_sql", sqlsource,
-                SqlCommandType.SELECT);
+            SqlCommandType.SELECT);
         builder.resultMaps(mappedStatement.getResultMaps()).resultSetType(mappedStatement.getResultSetType())
-                .statementType(mappedStatement.getStatementType());
+            .statementType(mappedStatement.getStatementType());
         MappedStatement queryStatement = builder.build();
         DefaultParameterHandler handler = new DefaultParameterHandler(queryStatement, parameter, boundSql);
         try (PreparedStatement stmt = connection.prepareStatement(sqlExplain)) {
@@ -156,4 +156,4 @@ public class SqlExplainInterceptor implements Interceptor {
         this.stopProceed = stopProceed;
     }
 
-}
+}

+ 2 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/DB2Dialect.java

@@ -47,8 +47,8 @@ public class DB2Dialect implements IDialect {
     public String buildPaginationSql(String originalSql, int offset, int limit) {
         int startOfSelect = originalSql.toLowerCase().indexOf("select");
         StringBuilder pagingSelect = new StringBuilder(originalSql.length() + 100)
-                .append(originalSql.substring(0, startOfSelect)).append("select * from ( select ")
-                .append(getRowNumber(originalSql));
+            .append(originalSql.substring(0, startOfSelect)).append("select * from ( select ")
+            .append(getRowNumber(originalSql));
         if (hasDistinct(originalSql)) {
             pagingSelect.append(" row_.* from ( ").append(originalSql.substring(startOfSelect)).append(" ) as row_");
         } else {

+ 6 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/SQLServer2005Dialect.java

@@ -65,12 +65,12 @@ public class SQLServer2005Dialect implements IDialect {
 
         StringBuilder sql = new StringBuilder();
         sql.append("WITH query AS (SELECT ").append(distinctStr).append("TOP 100 PERCENT ")
-                .append(" ROW_NUMBER() OVER (").append(orderby).append(") as __row_number__, ").append(pagingBuilder)
-                .append(") SELECT * FROM query WHERE __row_number__ BETWEEN ")
-                //FIX#299:原因:mysql中limit 10(offset,size) 是从第10开始(不包含10),;而这里用的BETWEEN是两边都包含,所以改为offset+1
-                .append(offset + 1)
-                .append(" AND ")
-                .append(offset + limit).append(" ORDER BY __row_number__");
+            .append(" ROW_NUMBER() OVER (").append(orderby).append(") as __row_number__, ").append(pagingBuilder)
+            .append(") SELECT * FROM query WHERE __row_number__ BETWEEN ")
+            //FIX#299:原因:mysql中limit 10(offset,size) 是从第10开始(不包含10),;而这里用的BETWEEN是两边都包含,所以改为offset+1
+            .append(offset + 1)
+            .append(" AND ")
+            .append(offset + limit).append(" ORDER BY __row_number__");
         return sql.toString();
     }
 }

+ 9 - 9
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/spring/MybatisMapperRefresh.java

@@ -123,7 +123,7 @@ public class MybatisMapperRefresh implements Runnable {
                                 try {
                                     if (ResourceUtils.isJarURL(mapperLocation.getURL())) {
                                         String key = new UrlResource(ResourceUtils.extractJarFileURL(mapperLocation.getURL()))
-                                                .getFile().getPath();
+                                            .getFile().getPath();
                                         fileSet.add(key);
                                         if (jarMapper.get(key) != null) {
                                             jarMapper.get(key).add(mapperLocation);
@@ -192,11 +192,11 @@ public class MybatisMapperRefresh implements Runnable {
         boolean isSupper = configuration.getClass().getSuperclass() == Configuration.class;
         try {
             Field loadedResourcesField = isSupper ? configuration.getClass().getSuperclass().getDeclaredField("loadedResources")
-                    : configuration.getClass().getDeclaredField("loadedResources");
+                : configuration.getClass().getDeclaredField("loadedResources");
             loadedResourcesField.setAccessible(true);
             Set loadedResourcesSet = ((Set) loadedResourcesField.get(configuration));
             XPathParser xPathParser = new XPathParser(resource.getInputStream(), true, configuration.getVariables(),
-                    new XMLMapperEntityResolver());
+                new XMLMapperEntityResolver());
             XNode context = xPathParser.evalNode("/mapper");
             String namespace = context.getStringAttribute("namespace");
             Field field = MapperRegistry.class.getDeclaredField("knownMappers");
@@ -210,8 +210,8 @@ public class MybatisMapperRefresh implements Runnable {
             cleanKeyGenerators(context.evalNodes("insert|update"), namespace);
             cleanSqlElement(context.evalNodes("/mapper/sql"), namespace);
             XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(resource.getInputStream(),
-                    sqlSessionFactory.getConfiguration(),
-                    resource.toString(), sqlSessionFactory.getConfiguration().getSqlFragments());
+                sqlSessionFactory.getConfiguration(),
+                resource.toString(), sqlSessionFactory.getConfiguration().getSqlFragments());
             xmlMapperBuilder.parse();
             logger.debug("refresh: '" + resource + "', success!");
         } catch (IOException e) {
@@ -252,12 +252,12 @@ public class MybatisMapperRefresh implements Runnable {
     private void clearResultMap(XNode xNode, String namespace) {
         for (XNode resultChild : xNode.getChildren()) {
             if ("association".equals(resultChild.getName()) || "collection".equals(resultChild.getName())
-                    || "case".equals(resultChild.getName())) {
+                || "case".equals(resultChild.getName())) {
                 if (resultChild.getStringAttribute("select") == null) {
                     configuration.getResultMapNames().remove(
-                            resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
+                        resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
                     configuration.getResultMapNames().remove(
-                            namespace + "." + resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
+                        namespace + "." + resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
                     if (resultChild.getChildren() != null && !resultChild.getChildren().isEmpty()) {
                         clearResultMap(resultChild, namespace);
                     }
@@ -294,4 +294,4 @@ public class MybatisMapperRefresh implements Runnable {
         }
     }
 
-}
+}

+ 9 - 9
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/spring/MybatisSqlSessionFactoryBean.java

@@ -380,7 +380,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
         notNull(dataSource, "Property 'dataSource' is required");
         notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");
         state((configuration == null && configLocation == null) || !(configuration != null && configLocation != null),
-                "Property 'configuration' and 'configLocation' can not specified with together");
+            "Property 'configuration' and 'configLocation' can not specified with together");
 
         this.sqlSessionFactory = buildSqlSessionFactory();
     }
@@ -438,18 +438,18 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
             // TODO 支持自定义通配符
             String[] typeAliasPackageArray;
             if (typeAliasesPackage.contains("*") && !typeAliasesPackage.contains(",")
-                    && !typeAliasesPackage.contains(";")) {
+                && !typeAliasesPackage.contains(";")) {
                 typeAliasPackageArray = PackageHelper.convertTypeAliasesPackage(typeAliasesPackage);
             } else {
                 typeAliasPackageArray = tokenizeToStringArray(this.typeAliasesPackage,
-                        ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
+                    ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
             }
             if (typeAliasPackageArray == null) {
                 throw new MybatisPlusException("not find typeAliasesPackage:" + typeAliasesPackage);
             }
             for (String packageToScan : typeAliasPackageArray) {
                 configuration.getTypeAliasRegistry().registerAliases(packageToScan,
-                        typeAliasesSuperType == null ? Object.class : typeAliasesSuperType);
+                    typeAliasesSuperType == null ? Object.class : typeAliasesSuperType);
                 if (LOGGER.isDebugEnabled()) {
                     LOGGER.debug("Scanned package: '" + packageToScan + "' for aliases");
                 }
@@ -460,11 +460,11 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
         if (hasLength(this.typeEnumsPackage)) {
             Set<Class> classes = null;
             if (typeEnumsPackage.contains("*") && !typeEnumsPackage.contains(",")
-                    && !typeEnumsPackage.contains(";")) {
+                && !typeEnumsPackage.contains(";")) {
                 classes = PackageHelper.scanTypePackage(typeEnumsPackage);
             } else {
                 String[] typeEnumsPackageArray = tokenizeToStringArray(this.typeEnumsPackage,
-                        ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
+                    ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
                 if (typeEnumsPackageArray == null) {
                     throw new MybatisPlusException("not find typeEnumsPackage:" + typeEnumsPackage);
                 }
@@ -507,7 +507,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
 
         if (hasLength(this.typeHandlersPackage)) {
             String[] typeHandlersPackageArray = tokenizeToStringArray(this.typeHandlersPackage,
-                    ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
+                ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
             for (String packageToScan : typeHandlersPackageArray) {
                 configuration.getTypeHandlerRegistry().register(packageToScan);
                 if (LOGGER.isDebugEnabled()) {
@@ -569,7 +569,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
             if (globalConfig.isRefresh()) {
                 //TODO 设置自动刷新配置 减少配置
                 new MybatisMapperRefresh(this.mapperLocations, sqlSessionFactory, 2,
-                        2, true);
+                    2, true);
             }
             for (Resource mapperLocation : this.mapperLocations) {
                 if (mapperLocation == null) {
@@ -579,7 +579,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
                 try {
                     // TODO  这里也换了噢噢噢噢
                     XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(mapperLocation.getInputStream(),
-                            configuration, mapperLocation.toString(), configuration.getSqlFragments());
+                        configuration, mapperLocation.toString(), configuration.getSqlFragments());
                     xmlMapperBuilder.parse();
                 } catch (Exception e) {
                     throw new NestedIOException("Failed to parse mapping resource: '" + mapperLocation + "'", e);

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2HorseCamelUnderMixTest.java

@@ -54,7 +54,7 @@ public class H2HorseCamelUnderMixTest extends AbstractH2UserTest {
         horse.setName("horse");
         camelUnderlineMixMapper.insert(horse);
         List<H2Horse> list = camelUnderlineMixMapper.selectList(new EntityWrapper<H2Horse>());
-        for(H2Horse horse1: list){
+        for (H2Horse horse1 : list) {
             System.out.println(horse1);
         }
     }

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2LogicDeleteTest.java

@@ -116,7 +116,7 @@ public class H2LogicDeleteTest extends H2Test {
     }
 
     @Test
-    public void testDeleteBatch(){
+    public void testDeleteBatch() {
         List<Long> idList = new ArrayList<>(4);
         idList.add(101L);
         idList.add(102L);

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2SqlRunnerTest.java

@@ -63,7 +63,7 @@ public class H2SqlRunnerTest extends H2Test {
     @Test
     public void testInsert() {
         SqlRunner.db().insert("insert into h2user(name,age,test_type,test_date,version) values ({0},{1},{2},{3},{4})",
-                "Kshen", 19, 1, null, 1);
+            "Kshen", 19, 1, null, 1);
         Object obj = SqlRunner.db().selectObj("select name,test_id from h2user where name={0}", "Kshen");
         Assert.assertNotNull(obj);
         Assert.assertEquals("only return first column's value", "Kshen", obj);

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserTest.java

@@ -58,14 +58,14 @@ public class H2UserTest extends AbstractH2UserTest {
     }
 
     @Test
-    public void testSelectBatch(){
+    public void testSelectBatch() {
         List<Long> idList = new ArrayList<>(4);
         idList.add(101L);
         idList.add(102L);
         idList.add(103L);
         idList.add(104L);
         List<H2User> userList = userService.selectBatchIds(idList);
-        for(H2User u:userList){
+        for (H2User u : userList) {
             System.out.println(u);
         }
     }

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/H2UserUnderlineNamingTest.java

@@ -47,13 +47,13 @@ public class H2UserUnderlineNamingTest extends AbstractH2UserTest {
     }
 
     @Test
-    public void testUnderLineNaming(){
+    public void testUnderLineNaming() {
         H2UserUnderline user = new H2UserUnderline();
         user.setName("underlineName").setAge(12).setTest_type(1).setVersion(1);
         userUnderlineMapper.insert(user);
 
         List<H2UserUnderline> list = userUnderlineMapper.selectList(new EntityWrapper<H2UserUnderline>());
-        for(H2UserUnderline u:list){
+        for (H2UserUnderline u : list) {
             System.out.println(u);
         }
     }

+ 16 - 16
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/base/AbstractH2UserTest.java

@@ -19,13 +19,13 @@ import com.baomidou.mybatisplus.test.h2.service.IH2UserService;
 
 /**
  * <p>
- *  test cases for {@link H2User}
+ * test cases for {@link H2User}
  * </p>
  *
  * @author yuxiaobin
  * @date 2018/1/5
  */
-public abstract class AbstractH2UserTest extends H2Test{
+public abstract class AbstractH2UserTest extends H2Test {
 
     @Autowired
     protected IH2UserService userService;
@@ -33,7 +33,7 @@ public abstract class AbstractH2UserTest extends H2Test{
     @Autowired
     protected H2UserMapper userMapper;
 
-    protected void insertSimpleCase(){
+    protected void insertSimpleCase() {
         H2User user = new H2User();
         user.setAge(1);
         user.setPrice(new BigDecimal("9.99"));
@@ -45,7 +45,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertEquals("Caratacus", userFromDB.getDesc());
     }
 
-    protected void insertBatchSimpleCase(){
+    protected void insertBatchSimpleCase() {
         userService.insert(new H2User("sanmao", 1));
         List<H2User> h2Users = new ArrayList<>();
         for (int i = 0; i < 10; i++) {
@@ -58,7 +58,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertTrue(userService.insertBatch(h2Users));
     }
 
-    protected void deleteSimpleCase(){
+    protected void deleteSimpleCase() {
         H2User user = new H2User();
         user.setAge(1);
         user.setPrice(new BigDecimal("9.99"));
@@ -69,7 +69,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertNull(userService.selectById(userId));
     }
 
-    protected void selectOneSimpleCase(){
+    protected void selectOneSimpleCase() {
         H2User user = new H2User();
         user.setId(105L);
         EntityWrapper<H2User> ew = new EntityWrapper<>(user);
@@ -77,7 +77,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertNotNull(userFromDB);
     }
 
-    protected void selectListSimpleCase(){
+    protected void selectListSimpleCase() {
         H2User user = new H2User();
         EntityWrapper<H2User> ew = new EntityWrapper<>(user);
         List<H2User> list = userService.selectList(ew);
@@ -85,7 +85,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertNotEquals(0, list.size());
     }
 
-    protected void selectPageSimpleCase(){
+    protected void selectPageSimpleCase() {
         int size = 3;
         Page<H2User> page = userService.selectPage(new Page<H2User>(1, size));
         Assert.assertEquals(size, page.getRecords().size());
@@ -98,7 +98,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         }
     }
 
-    protected void selectPageHelperCase(){
+    protected void selectPageHelperCase() {
         PageHelper.startPage(1, 3);
         List<H2User> userList = userService.selectList(new EntityWrapper<H2User>());
         System.out.println("total=" + PageHelper.freeTotal());
@@ -107,7 +107,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertNotEquals("Should not do pagination", 3, userList.size());
     }
 
-    protected void updateByIdWithOptLock(){
+    protected void updateByIdWithOptLock() {
         Long id = 991L;
         H2User user = new H2User();
         user.setId(id);
@@ -130,7 +130,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertEquals("991", userDB.getName());
     }
 
-    protected void updateAllColumnByIdCase(){
+    protected void updateAllColumnByIdCase() {
         Long id = 997L;
         H2User user = new H2User();
         user.setId(id);
@@ -267,7 +267,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertEquals(count1, count2);
     }
 
-    protected void updateBatchSimpleCase(){
+    protected void updateBatchSimpleCase() {
         List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
         Map<Long, Integer> userVersionMap = new HashMap<>();
         for (H2User u : list) {
@@ -281,7 +281,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         }
     }
 
-    protected void updateInLoopCase(){
+    protected void updateInLoopCase() {
         List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
         Map<Long, Integer> versionBefore = new HashMap<>();
         Map<Long, String> nameExpect = new HashMap<>();
@@ -303,7 +303,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         }
     }
 
-    protected void updateAllColumnInLoop(){
+    protected void updateAllColumnInLoop() {
         List<H2User> list = userService.selectList(new EntityWrapper<H2User>());
         Map<Long, Integer> versionBefore = new HashMap<>();
         Map<Long, String> nameExpect = new HashMap<>();
@@ -324,7 +324,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         }
     }
 
-    protected void updateByMySql(){
+    protected void updateByMySql() {
         Long id = 10087L;
         H2User user = new H2User();
         user.setId(id);
@@ -344,7 +344,7 @@ public abstract class AbstractH2UserTest extends H2Test{
         Assert.assertEquals(1, user.getVersion().intValue());
     }
 
-    protected void selectWithPageCondition(){
+    protected void selectWithPageCondition() {
         H2User user = new H2User();
         user.setName("pageCondition");
         user.setTestType(99);

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/base/H2Test.java

@@ -26,7 +26,7 @@ public class H2Test {
     public static void executeSql(Statement stmt, String sqlFilename) throws SQLException, IOException {
         String filePath = H2Test.class.getResource("/h2/" + sqlFilename).getPath();
         try (
-                BufferedReader reader = new BufferedReader(new FileReader(filePath))
+            BufferedReader reader = new BufferedReader(new FileReader(filePath))
         ) {
             String line;
             while ((line = reader.readLine()) != null) {
@@ -49,7 +49,7 @@ public class H2Test {
         String createTableSql = readFile(ddlFileName);
         Statement stmt = conn.createStatement();
         stmt.execute(createTableSql);
-        stmt.execute("truncate table "+tableName);
+        stmt.execute("truncate table " + tableName);
         executeSql(stmt, insertFileName);
         conn.commit();
     }
@@ -59,7 +59,7 @@ public class H2Test {
         StringBuilder builder = new StringBuilder();
         String filePath = H2UserNoOptLockTest.class.getResource("/h2/" + filename).getPath();
         try (
-                BufferedReader reader = new BufferedReader(new FileReader(filePath))
+            BufferedReader reader = new BufferedReader(new FileReader(filePath))
         ) {
             String line;
             while ((line = reader.readLine()) != null)

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisConfigMetaObjOptLockConfig.java

@@ -44,9 +44,9 @@ public class MybatisConfigMetaObjOptLockConfig {
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
-                new PerformanceInterceptor(),
-                new OptimisticLockerInterceptor()
+            pagination,
+            new PerformanceInterceptor(),
+            new OptimisticLockerInterceptor()
         });
         sqlSessionFactory.setGlobalConfig(globalConfiguration);
         return sqlSessionFactory.getObject();

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfig.java

@@ -47,9 +47,9 @@ public class MybatisPlusConfig {
         pagination.setLocalPage(true);
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
-                optLock,
-                new PerformanceInterceptor()
+            pagination,
+            optLock,
+            new PerformanceInterceptor()
         });
         globalConfiguration.setMetaObjectHandler(new H2MetaObjectHandler());
         sqlSessionFactory.setGlobalConfig(globalConfiguration);

+ 4 - 4
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfigMapUnderline2Camel.java

@@ -11,8 +11,8 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.io.ResourceLoader;
 
-import com.baomidou.mybatisplus.MybatisMapWrapperFactory;
 import com.baomidou.mybatisplus.MybatisConfiguration;
+import com.baomidou.mybatisplus.MybatisMapWrapperFactory;
 import com.baomidou.mybatisplus.entity.GlobalConfiguration;
 import com.baomidou.mybatisplus.mapper.LogicSqlInjector;
 import com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor;
@@ -51,9 +51,9 @@ public class MybatisPlusConfigMapUnderline2Camel {
         PaginationInterceptor pagination = new PaginationInterceptor();
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
-                optLock,
-                new PerformanceInterceptor()
+            pagination,
+            optLock,
+            new PerformanceInterceptor()
         });
         globalConfiguration.setMetaObjectHandler(new H2MetaObjectHandler());
         sqlSessionFactory.setGlobalConfig(globalConfiguration);

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusLoginDeleteConfig.java

@@ -44,9 +44,9 @@ public class MybatisPlusLoginDeleteConfig {
         PaginationInterceptor pagination = new PaginationInterceptor();
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
-                optLock,
-                new PerformanceInterceptor()
+            pagination,
+            optLock,
+            new PerformanceInterceptor()
         });
         sqlSessionFactory.setGlobalConfig(globalConfiguration);
         return sqlSessionFactory.getObject();

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusMetaObjConfig.java

@@ -42,8 +42,8 @@ public class MybatisPlusMetaObjConfig {
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
-                new PerformanceInterceptor()
+            pagination,
+            new PerformanceInterceptor()
         });
         sqlSessionFactory.setGlobalConfig(globalConfiguration);
         return sqlSessionFactory.getObject();

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusNoOptLockConfig.java

@@ -40,7 +40,7 @@ public class MybatisPlusNoOptLockConfig {
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
+            pagination,
         });
         sqlSessionFactory.setGlobalConfig(globalConfiguration);
         return sqlSessionFactory.getObject();

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusSequenceConfig.java

@@ -44,9 +44,9 @@ public class MybatisPlusSequenceConfig {
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
-                new OptimisticLockerInterceptor(),
-                new PerformanceInterceptor()
+            pagination,
+            new OptimisticLockerInterceptor(),
+            new PerformanceInterceptor()
         });
         sqlSessionFactory.setGlobalConfig(globalConfiguration);
         return sqlSessionFactory.getObject();

+ 18 - 18
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2PersonCamelMapper.java

@@ -23,60 +23,60 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2Person;
 public interface H2PersonCamelMapper extends SuperMapper<H2Person> {
 
     @Select(
-            "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
-                    " join h2person u on u.testId=a.test_id and u.testId=#{userId}"
+        "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
+            " join h2person u on u.testId=a.test_id and u.testId=#{userId}"
     )
     List<H2Addr> getAddrListByUserId(@Param("userId") Long userId);
 
     @Select(
-            "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
-                " join h2person u on u.testId=a.test_id and u.testId=#{userId}"
+        "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
+            " join h2person u on u.testId=a.test_id and u.testId=#{userId}"
     )
     List<H2Addr> getAddrListByUserIdPage(@Param("userId") Long userId, Page<H2Addr> page);
 
     @Insert(
-            "insert into h2person(name,version) values(#{name},#{version})"
+        "insert into h2person(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2person set name=#{name} where testId=#{id}"
+        "update h2person set name=#{name} where testId=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 
 
     @Insert(
-            "insert into h2person(name,version) values( #{user1.name}, #{user1.version})"
+        "insert into h2person(name,version) values( #{user1.name}, #{user1.version})"
     )
     int myInsertWithParam(@Param("user1") H2Person user1);
 
     @Insert(
-            "insert into h2person(name,version) values( #{name}, #{version})"
+        "insert into h2person(name,version) values( #{name}, #{version})"
     )
     int myInsertWithoutParam(H2Person user1);
 
 
     @Select(" select testId as id, power(#{ageFrom},2), 'abc?zhazha', CAST(#{nameParam} AS VARCHAR) as name " +
-            " from h2person " +
-            " where age>#{ageFrom} and age<#{ageTo} ")
+        " from h2person " +
+        " where age>#{ageFrom} and age<#{ageTo} ")
     List<H2Person> selectUserWithParamInSelectStatememt(Map<String, Object> param);
 
     @Select(" select testId as id, power(#{ageFrom},2), 'abc?zhazha', CAST(#{nameParam} AS VARCHAR) as name " +
-            " from h2person " +
-            " where age>#{ageFrom} and age<#{ageTo} ")
+        " from h2person " +
+        " where age>#{ageFrom} and age<#{ageTo} ")
     List<H2Person> selectUserWithParamInSelectStatememt4Page(Map<String, Object> param, Page<H2Person> page);
 
     @Select(" select testId as id, power(${ageFrom},2) as age, '${nameParam}' as name " +
-            " from h2person " +
-            " where age>#{ageFrom} and age<#{ageTo} ")
+        " from h2person " +
+        " where age>#{ageFrom} and age<#{ageTo} ")
     List<H2Person> selectUserWithDollarParamInSelectStatememt4Page(Map<String, Object> param, Page<H2Person> page);
 
 
     @Select("select count(1) from (" +
-            "select testId as id, CAST(#{nameParam} AS VARCHAR) as name" +
-            " from h2person " +
-            " where age>#{ageFrom} and age<#{ageTo} " +
-            ") a")
+        "select testId as id, CAST(#{nameParam} AS VARCHAR) as name" +
+        " from h2person " +
+        " where age>#{ageFrom} and age<#{ageTo} " +
+        ") a")
     int selectCountWithParamInSelectItems(Map<String, Object> param);
 
     @Select("select * from h2person")

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserDateVersionMapper.java

@@ -18,12 +18,12 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserDateVersion;
 public interface H2UserDateVersionMapper extends BaseMapper<H2UserDateVersion> {
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 }

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserExtendsMapper.java

@@ -17,12 +17,12 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserIntVersionExtend
 public interface H2UserExtendsMapper extends BaseMapper<H2UserIntVersionExtendTO> {
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 }

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserLogicDeleteMapper.java

@@ -19,17 +19,17 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserLogicDelete;
 public interface H2UserLogicDeleteMapper extends BaseMapper<H2UserLogicDelete> {
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 
     @Select(
-            "select test_id as id, name, age, version, test_type as testType from h2user where test_id=#{id}"
+        "select test_id as id, name, age, version, test_type as testType from h2user where test_id=#{id}"
     )
     H2UserLogicDelete selectByIdMy(@Param("id") Long id);
 }

+ 18 - 18
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserMapper.java

@@ -23,60 +23,60 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2User;
 public interface H2UserMapper extends SuperMapper<H2User> {
 
     @Select(
-            "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
-                    " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
+        "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
+            " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
     )
     List<H2Addr> getAddrListByUserId(@Param("userId") Long userId);
 
     @Select(
-            "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
-                    " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
+        "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
+            " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
     )
     List<H2Addr> getAddrListByUserIdPage(@Param("userId") Long userId, Page<H2Addr> page);
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 
 
     @Insert(
-            "insert into h2user(name,version) values( #{user1.name}, #{user1.version})"
+        "insert into h2user(name,version) values( #{user1.name}, #{user1.version})"
     )
     int myInsertWithParam(@Param("user1") H2User user1);
 
     @Insert(
-            "insert into h2user(name,version) values( #{name}, #{version})"
+        "insert into h2user(name,version) values( #{name}, #{version})"
     )
     int myInsertWithoutParam(H2User user1);
 
 
     @Select(" select test_id as id, power(#{ageFrom},2), 'abc?zhazha', CAST(#{nameParam} AS VARCHAR) as name " +
-            " from h2user " +
-            " where age>#{ageFrom} and age<#{ageTo} ")
+        " from h2user " +
+        " where age>#{ageFrom} and age<#{ageTo} ")
     List<H2User> selectUserWithParamInSelectStatememt(Map<String, Object> param);
 
     @Select(" select test_id as id, power(#{ageFrom},2), 'abc?zhazha', CAST(#{nameParam} AS VARCHAR) as name " +
-            " from h2user " +
-            " where age>#{ageFrom} and age<#{ageTo} ")
+        " from h2user " +
+        " where age>#{ageFrom} and age<#{ageTo} ")
     List<H2User> selectUserWithParamInSelectStatememt4Page(Map<String, Object> param, Page<H2User> page);
 
     @Select(" select test_id as id, power(${ageFrom},2) as age, '${nameParam}' as name " +
-            " from h2user " +
-            " where age>#{ageFrom} and age<#{ageTo} ")
+        " from h2user " +
+        " where age>#{ageFrom} and age<#{ageTo} ")
     List<H2User> selectUserWithDollarParamInSelectStatememt4Page(Map<String, Object> param, Page<H2User> page);
 
 
     @Select("select count(1) from (" +
-            "select test_id as id, CAST(#{nameParam} AS VARCHAR) as name" +
-            " from h2user " +
-            " where age>#{ageFrom} and age<#{ageTo} " +
-            ") a")
+        "select test_id as id, CAST(#{nameParam} AS VARCHAR) as name" +
+        " from h2user " +
+        " where age>#{ageFrom} and age<#{ageTo} " +
+        ") a")
     int selectCountWithParamInSelectItems(Map<String, Object> param);
 
     @Select("select * from h2user")

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserMetaobjMapper.java

@@ -17,12 +17,12 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserMetaObj;
 public interface H2UserMetaobjMapper extends BaseMapper<H2UserMetaObj> {
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 }

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserNoVersionMapper.java

@@ -18,12 +18,12 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserNoVersion;
 public interface H2UserNoVersionMapper extends BaseMapper<H2UserNoVersion> {
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 }

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserSequenceExtendsMapper.java

@@ -17,12 +17,12 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserSequenceExtendTO
 public interface H2UserSequenceExtendsMapper extends BaseMapper<H2UserSequenceExtendTO> {
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 }

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserSequenceMapper.java

@@ -17,12 +17,12 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserSequence;
 public interface H2UserSequenceMapper extends BaseMapper<H2UserSequence> {
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 }

+ 8 - 8
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/mapper/H2UserVersionAndLogicDeleteMapper.java

@@ -24,35 +24,35 @@ public interface H2UserVersionAndLogicDeleteMapper extends BaseMapper<H2UserVers
 
 
     @Select(
-            "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
-                    " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
+        "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
+            " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
     )
     List<H2Addr> getAddrListByUserId(@Param("userId") Long userId);
 
     @Select(
-            "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
-                    " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
+        "select a.addr_id as addrId, a.addr_name as addrName from h2address a" +
+            " join h2user u on u.test_id=a.test_id and u.test_id=#{userId}"
     )
     List<H2Addr> getAddrListByUserIdPage(@Param("userId") Long userId, Page<H2Addr> page);
 
     @Insert(
-            "insert into h2user(name,version) values(#{name},#{version})"
+        "insert into h2user(name,version) values(#{name},#{version})"
     )
     int myInsertWithNameVersion(@Param("name") String name, @Param("version") int version);
 
     @Update(
-            "update h2user set name=#{name} where test_id=#{id}"
+        "update h2user set name=#{name} where test_id=#{id}"
     )
     int myUpdateWithNameId(@Param("id") Long id, @Param("name") String name);
 
 
     @Insert(
-            "insert into h2user(name,version) values( #{user1.name}, #{user1.version})"
+        "insert into h2user(name,version) values( #{user1.name}, #{user1.version})"
     )
     int myInsertWithParam(@Param("user1") H2UserVersionAndLogicDeleteEntity user1);
 
     @Insert(
-            "insert into h2user(name,version) values( #{name}, #{version})"
+        "insert into h2user(name,version) values( #{name}, #{version})"
     )
     int myInsertWithoutParam(H2UserVersionAndLogicDeleteEntity user1);
 

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2Horse.java

@@ -54,7 +54,7 @@ public class H2Horse extends SuperEntityCamel {
     private String desc;
 
     @TableField(value = "test_date")
-	private Date testDate;
+    private Date testDate;
 
     @Version
     private Integer version;

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2Person.java

@@ -55,7 +55,7 @@ public class H2Person extends SuperEntityCamel {
     private String desc;
 
     @TableField
-	private Date testDate;
+    private Date testDate;
 
     @Version
     private Integer version;

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2User.java

@@ -55,7 +55,7 @@ public class H2User extends SuperEntity {
     private String desc;
 
     @TableField
-	private Date testDate;
+    private Date testDate;
 
     @Version
     private Integer version;

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2UserIntVersionAR.java

@@ -64,7 +64,7 @@ public class H2UserIntVersionAR extends Model<H2UserIntVersionAR> {
     private String desc;
 
     @TableField
-	private Date testDate;
+    private Date testDate;
 
     @Version
     private Integer version;

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/entity/persistent/H2UserUnderline.java

@@ -55,7 +55,7 @@ public class H2UserUnderline extends SuperEntity {
     private String desc;
 
     @TableField(value = "test_date")
-	private Date test_date;
+    private Date test_date;
 
     @Version
     private Integer version;

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/hikaricp/H2HikaricpTest.java

@@ -49,7 +49,7 @@ public class H2HikaricpTest extends H2Test {
     H2UserVersionAndLogicDeleteMapper userMapper;
 
     @Test
-    public void testPerformanceInteceptor(){
+    public void testPerformanceInteceptor() {
         userMapper.selectList(new EntityWrapper<H2UserVersionAndLogicDeleteEntity>());
     }
 }

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/tomcatjdbc/TomcatJdbcH2Test.java

@@ -24,7 +24,7 @@ import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserVersionAndLogicD
 
 /**
  * <p>
- *     Tomcatjdbc数据源测试
+ * Tomcatjdbc数据源测试
  * </p>
  *
  * @author yuxiaobin

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/UserMapperTest.java

@@ -315,7 +315,7 @@ public class UserMapperTest extends CrudTest {
         sleep();
         if (user != null) {
             System.out.println("\n user: id=" + user.getId() + ", name=" + user.getName() + ", age=" + user.getAge()
-                    + ", testType=" + user.getTestType());
+                + ", testType=" + user.getTestType());
         } else {
             System.out.println("\n user is null.");
         }

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/entity/Role.java

@@ -91,6 +91,6 @@ public class Role implements Serializable {
     @Override
     public String toString() {
         return "Role{" + "id=" + id + ", name='" + name + '\'' + ", sort=" + sort
-                + ", description='" + description + '\'' + '}';
+            + ", description='" + description + '\'' + '}';
     }
 }

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/entity/User.java

@@ -204,6 +204,6 @@ public class User implements Serializable {
     @Override
     public String toString() {
         return "User [id=" + id + ", name=" + name + ", age=" + age + ", price=" + price + ", testType=" + testType
-                + ", role=" + role + ", desc=" + desc + ", phone=" + phone + "]";
+            + ", role=" + role + ", desc=" + desc + ", phone=" + phone + "]";
     }
 }

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/mysql/typehandler/PhoneTypeHandler.java

@@ -41,7 +41,7 @@ public class PhoneTypeHandler extends BaseTypeHandler<PhoneNumber> {
 
     @Override
     public void setNonNullParameter(PreparedStatement ps, int i, PhoneNumber parameter, JdbcType jdbcType)
-            throws SQLException {
+        throws SQLException {
         System.err.println("--------- Executing PhoneTypeHandler --------- ");
         ps.setString(i, parameter.getAsString());
     }

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/oracle/TestUserMapperTest.java

@@ -136,8 +136,8 @@ public class TestUserMapperTest {
         sleep();
         if (user != null) {
             System.out.println("\n user: id="
-                    + user.getTestId() + ", name=" + user.getName() + ", age=" + user.getAge() + ", testType="
-                    + user.getTestType());
+                + user.getTestId() + ", name=" + user.getName() + ", age=" + user.getAge() + ", testType="
+                + user.getTestType());
         } else {
             System.out.println("\n user is null.");
         }

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleMybatisPlusConfig.java

@@ -42,8 +42,8 @@ public class OracleMybatisPlusConfig {
         sqlSessionFactory.setConfiguration(configuration);
         PaginationInterceptor pagination = new PaginationInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{
-                pagination,
-                new PerformanceInterceptor()
+            pagination,
+            new PerformanceInterceptor()
         });
         sqlSessionFactory.setGlobalConfig(globalConfiguration);
         return sqlSessionFactory.getObject();

+ 1 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/proxy/MapperProxyFactory.java

@@ -35,7 +35,7 @@ public class MapperProxyFactory {
     public static <T> T newInstance(Class<T> methodInterface) {
         final MapperProxy<T> methodProxy = new MapperProxy<>(methodInterface);
         return (T) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
-                new Class[]{methodInterface}, methodProxy);
+            new Class[]{methodInterface}, methodProxy);
     }
 
 }

+ 5 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/LogicDeleteAllSqlTest.java

@@ -1,13 +1,15 @@
 package com.baomidou.mybatisplus.test.sql;
 
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
 import com.baomidou.mybatisplus.plugins.parser.SqlInfo;
 import com.baomidou.mybatisplus.plugins.parser.logicdelete.LogicDeleteHandler;
 import com.baomidou.mybatisplus.plugins.parser.logicdelete.LogicDeleteSqlParser;
+
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.StringValue;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
 
 /**
  * <p>

+ 22 - 22
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/SqlBuilderTest.java

@@ -20,9 +20,9 @@ public class SqlBuilderTest {
     @Test
     public void test1() {
         String sql = new SQL()
-                .SELECT("id, name").FROM("PERSON A")
-                .WHERE("name like ?")
-                .WHERE("id = ?").toString();
+            .SELECT("id, name").FROM("PERSON A")
+            .WHERE("name like ?")
+            .WHERE("id = ?").toString();
 
         System.err.println(sql);
     }
@@ -31,14 +31,14 @@ public class SqlBuilderTest {
     public void test() {
         //Fluent Style
         String sql = new SQL()
-                .SELECT("id, name").FROM("PERSON A")
-                .WHERE("name like ?")
-                .WHERE("id = ?").toString();
+            .SELECT("id, name").FROM("PERSON A")
+            .WHERE("name like ?")
+            .WHERE("id = ?").toString();
 
         assertEquals("" +
-                "SELECT id, name\n" +
-                "FROM PERSON A\n" +
-                "WHERE (name like ? AND id = ?)", sql);
+            "SELECT id, name\n" +
+            "FROM PERSON A\n" +
+            "WHERE (name like ? AND id = ?)", sql);
 
         //Mixed
         sql = new SQL() {{
@@ -48,9 +48,9 @@ public class SqlBuilderTest {
         }}.toString();
 
         assertEquals("" +
-                "SELECT id, name\n" +
-                "FROM PERSON A\n" +
-                "WHERE (name like ? AND id = ?)", sql);
+            "SELECT id, name\n" +
+            "FROM PERSON A\n" +
+            "WHERE (name like ? AND id = ?)", sql);
 
         sql = new SQL() {{
             SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
@@ -72,16 +72,16 @@ public class SqlBuilderTest {
         }}.toString();
 
         assertEquals("SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON\n" +
-                "FROM PERSON P, ACCOUNT A\n" +
-                "INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID\n" +
-                "INNER JOIN COMPANY C on D.COMPANY_ID = C.ID\n" +
-                "WHERE (P.ID = A.ID AND P.FIRST_NAME like ?) \n" +
-                "OR (P.LAST_NAME like ?)\n" +
-                "GROUP BY P.ID\n" +
-                "HAVING (P.LAST_NAME like ?) \n" +
-                "OR (P.FIRST_NAME like ?)\n" +
-                "ORDER BY P.ID, P.FULL_NAME", sql);
+            "FROM PERSON P, ACCOUNT A\n" +
+            "INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID\n" +
+            "INNER JOIN COMPANY C on D.COMPANY_ID = C.ID\n" +
+            "WHERE (P.ID = A.ID AND P.FIRST_NAME like ?) \n" +
+            "OR (P.LAST_NAME like ?)\n" +
+            "GROUP BY P.ID\n" +
+            "HAVING (P.LAST_NAME like ?) \n" +
+            "OR (P.FIRST_NAME like ?)\n" +
+            "ORDER BY P.ID, P.FULL_NAME", sql);
 
     }
 
-}
+}

+ 8 - 8
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/sql/SqlUtilsTest.java

@@ -26,14 +26,14 @@ public class SqlUtilsTest {
     @Test
     public void sqlCountOptimize1() {
         SqlInfo sqlInfo = jsqlParserCountSqlInfo(
-                "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)");
+            "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)");
         String countsql = sqlInfo.getSql();
         boolean orderBy = sqlInfo.isOrderBy();
         System.out.println(countsql);
         System.out.println(orderBy);
         Assert.assertFalse(orderBy);
         Assert.assertEquals("SELECT COUNT(1) FROM user a LEFT JOIN (SELECT uuid FROM user2) b ON b.id = a.aid WHERE a = 1",
-                countsql);
+            countsql);
 
     }
 
@@ -43,7 +43,7 @@ public class SqlUtilsTest {
     @Test
     public void sqlCountOptimize2() {
         SqlInfo sqlInfo = jsqlParserCountSqlInfo(
-                "select distinct * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)"
+            "select distinct * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 order by (select 1 from dual)"
         );
         String countsql = sqlInfo.getSql();
         boolean orderBy = sqlInfo.isOrderBy();
@@ -51,8 +51,8 @@ public class SqlUtilsTest {
         System.out.println(orderBy);
         Assert.assertFalse(orderBy);
         Assert.assertEquals(
-                "SELECT COUNT(1) FROM ( SELECT DISTINCT * FROM user a LEFT JOIN (SELECT uuid FROM user2) b ON b.id = a.aid WHERE a = 1 ) TOTAL",
-                countsql);
+            "SELECT COUNT(1) FROM ( SELECT DISTINCT * FROM user a LEFT JOIN (SELECT uuid FROM user2) b ON b.id = a.aid WHERE a = 1 ) TOTAL",
+            countsql);
     }
 
     /**
@@ -61,7 +61,7 @@ public class SqlUtilsTest {
     @Test
     public void sqlCountOptimize3() {
         SqlInfo sqlInfo = jsqlParserCountSqlInfo(
-                "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)"
+            "select * from user a left join (select uuid from user2) b on b.id = a.aid where a=1 group by a.id order by (select 1 from dual)"
         );
         String countsql = sqlInfo.getSql();
         boolean orderBy = sqlInfo.isOrderBy();
@@ -69,8 +69,8 @@ public class SqlUtilsTest {
         System.out.println(orderBy);
         Assert.assertTrue(orderBy);
         Assert.assertEquals(
-                "SELECT COUNT(1) FROM ( SELECT * FROM user a LEFT JOIN (SELECT uuid FROM user2) b ON b.id = a.aid WHERE a = 1 GROUP BY a.id ORDER BY (SELECT 1 FROM dual) ) TOTAL",
-                countsql);
+            "SELECT COUNT(1) FROM ( SELECT * FROM user a LEFT JOIN (SELECT uuid FROM user2) b ON b.id = a.aid WHERE a = 1 GROUP BY a.id ORDER BY (SELECT 1 FROM dual) ) TOTAL",
+            countsql);
     }
 
 

+ 1 - 2
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/engine/AbstractTemplateEngine.java

@@ -23,11 +23,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import com.baomidou.mybatisplus.generator.InjectionConfig;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.baomidou.mybatisplus.generator.InjectionConfig;
 import com.baomidou.mybatisplus.generator.config.ConstVal;
 import com.baomidou.mybatisplus.generator.config.FileOutConfig;
 import com.baomidou.mybatisplus.generator.config.GlobalConfig;

+ 6 - 4
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/engine/FreemarkerTemplateEngine.java

@@ -15,15 +15,17 @@
  */
 package com.baomidou.mybatisplus.generator.engine;
 
-import com.baomidou.mybatisplus.generator.config.ConstVal;
-import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
-import freemarker.template.Configuration;
-import freemarker.template.Template;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
 import java.util.Map;
 
+import com.baomidou.mybatisplus.generator.config.ConstVal;
+import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
+
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+
 /**
  * <p>
  * Freemarker 模板引擎实现文件输出

+ 0 - 1
mybatis-plus-generate/src/test/java/com/baomidou/mybatisplus/test/generator/PostgreSQLGenerator.java

@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Scanner;
 
 import com.baomidou.mybatisplus.generator.AutoGenerator;
 import com.baomidou.mybatisplus.generator.InjectionConfig;

+ 4 - 4
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/MybatisSqlSessionTemplate.java

@@ -74,7 +74,7 @@ public class MybatisSqlSessionTemplate implements SqlSession, DisposableBean {
      */
     public MybatisSqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType) {
         this(sqlSessionFactory, executorType, new MyBatisExceptionTranslator(sqlSessionFactory.getConfiguration()
-                .getEnvironment().getDataSource(), true));
+            .getEnvironment().getDataSource(), true));
     }
 
     /**
@@ -100,7 +100,7 @@ public class MybatisSqlSessionTemplate implements SqlSession, DisposableBean {
         this.executorType = executorType;
         this.exceptionTranslator = exceptionTranslator;
         this.sqlSessionProxy = (SqlSession) newProxyInstance(SqlSessionFactory.class.getClassLoader(),
-                new Class[]{SqlSession.class}, new SqlSessionInterceptor());
+            new Class[]{SqlSession.class}, new SqlSessionInterceptor());
     }
 
     public SqlSessionFactory getSqlSessionFactory() {
@@ -396,7 +396,7 @@ public class MybatisSqlSessionTemplate implements SqlSession, DisposableBean {
         @Override
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
             SqlSession sqlSession = MybatisSqlSessionTemplate.this.sqlSessionFactory
-                    .openSession(MybatisSqlSessionTemplate.this.executorType);
+                .openSession(MybatisSqlSessionTemplate.this.executorType);
             try {
                 Object result = method.invoke(sqlSession, args);
                 sqlSession.commit(true);
@@ -410,4 +410,4 @@ public class MybatisSqlSessionTemplate implements SqlSession, DisposableBean {
             }
         }
     }
-}
+}

+ 1 - 1
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/activerecord/Model.java

@@ -306,7 +306,7 @@ public abstract class Model<T extends Model> implements Serializable {
      */
     public Page<T> selectPage(Page<T> page, Wrapper<T> wrapper) {
         Map<String, Object> map = new HashMap<>();
-        wrapper = (Wrapper<T>) SqlHelper.fillWrapper(page,  wrapper);
+        wrapper = (Wrapper<T>) SqlHelper.fillWrapper(page, wrapper);
         map.put("ew", wrapper);
         List<T> tl = sqlSession().selectList(sqlStatement(SqlMethod.SELECT_PAGE), map, page);
         page.setRecords(tl);

+ 1 - 1
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/entity/TableFieldInfo.java

@@ -107,7 +107,7 @@ public class TableFieldInfo {
          * 设置 related 为 true
          */
         if (StringUtils.isEmpty(tableField.value())
-                && globalConfig.isDbColumnUnderline()) {
+            && globalConfig.isDbColumnUnderline()) {
              /* 开启字段下划线申明 */
             this.related = true;
             this.setColumn(globalConfig, StringUtils.camelToUnderline(column));

+ 43 - 43
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java

@@ -143,7 +143,7 @@ public class AutoSqlInjector implements ISqlInjector {
         } else {
             // 表不包含主键时 给予警告
             logger.warn(String.format("%s ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.",
-                    modelClass.toString()));
+                modelClass.toString()));
         }
         /**
          * 正常注入无需主键方法
@@ -189,12 +189,12 @@ public class AutoSqlInjector implements ISqlInjector {
         for (Type type : types) {
             if (type instanceof ParameterizedType) {
                 Type[] typeArray = ((ParameterizedType) type).getActualTypeArguments();
-                if(ArrayUtils.isNotEmpty(typeArray)){
-                    for (Type t:typeArray) {
-                        if(t instanceof TypeVariable || t instanceof WildcardType){
+                if (ArrayUtils.isNotEmpty(typeArray)) {
+                    for (Type t : typeArray) {
+                        if (t instanceof TypeVariable || t instanceof WildcardType) {
                             target = null;
                             break;
-                        }else {
+                        } else {
                             target = (ParameterizedType) type;
                             break;
                         }
@@ -262,7 +262,7 @@ public class AutoSqlInjector implements ISqlInjector {
         for (TableFieldInfo fieldInfo : fieldList) {
             // 在FieldIgnore,INSERT_UPDATE,INSERT 时设置为false
             ifTag = !(FieldFill.INSERT == fieldInfo.getFieldFill()
-                    || FieldFill.INSERT_UPDATE == fieldInfo.getFieldFill());
+                || FieldFill.INSERT_UPDATE == fieldInfo.getFieldFill());
             if (selective && ifTag) {
                 fieldBuilder.append(convertIfTagIgnored(fieldInfo, false));
                 fieldBuilder.append(fieldInfo.getColumn()).append(",");
@@ -278,10 +278,10 @@ public class AutoSqlInjector implements ISqlInjector {
         fieldBuilder.append("\n</trim>");
         placeholderBuilder.append("\n</trim>");
         String sql = String.format(sqlMethod.getSql(), table.getTableName(), fieldBuilder.toString(),
-                placeholderBuilder.toString());
+            placeholderBuilder.toString());
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource, keyGenerator, keyProperty,
-                keyColumn);
+            keyColumn);
     }
 
     /**
@@ -354,12 +354,12 @@ public class AutoSqlInjector implements ISqlInjector {
     protected void injectUpdateByIdSql(boolean selective, Class<?> mapperClass, Class<?> modelClass, TableInfo table) {
         SqlMethod sqlMethod = selective ? SqlMethod.UPDATE_BY_ID : SqlMethod.UPDATE_ALL_COLUMN_BY_ID;
         String sql = String.format(sqlMethod.getSql(), table.getTableName(), sqlSet(selective, table, "et."), table.getKeyColumn(),
-                "et." + table.getKeyProperty(),
-                "<if test=\"et instanceof java.util.Map\">"
-                        + "<if test=\"et.MP_OPTLOCK_VERSION_ORIGINAL!=null\">"
-                        + "and ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL}"
-                        + "</if>"
-                        + "</if>"
+            "et." + table.getKeyProperty(),
+            "<if test=\"et instanceof java.util.Map\">"
+                + "<if test=\"et.MP_OPTLOCK_VERSION_ORIGINAL!=null\">"
+                + "and ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL}"
+                + "</if>"
+                + "</if>"
         );
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         this.addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource);
@@ -401,10 +401,10 @@ public class AutoSqlInjector implements ISqlInjector {
             ids.append("#{item}");
             ids.append("\n</foreach>");
             sqlSource = languageDriver.createSqlSource(configuration, String.format(sqlMethod.getSql(),
-                    sqlSelectColumns(table, false), table.getTableName(), table.getKeyColumn(), ids.toString()), modelClass);
+                sqlSelectColumns(table, false), table.getTableName(), table.getKeyColumn(), ids.toString()), modelClass);
         } else {
             sqlSource = new RawSqlSource(configuration, String.format(sqlMethod.getSql(), sqlSelectColumns(table, false),
-                    table.getTableName(), table.getKeyColumn(), table.getKeyProperty()), Object.class);
+                table.getTableName(), table.getKeyColumn(), table.getKeyProperty()), Object.class);
         }
         this.addSelectMappedStatement(mapperClass, sqlMethod.getMethod(), sqlSource, modelClass, table);
     }
@@ -453,7 +453,7 @@ public class AutoSqlInjector implements ISqlInjector {
      */
     protected void injectSelectListSql(SqlMethod sqlMethod, Class<?> mapperClass, Class<?> modelClass, TableInfo table) {
         String sql = String.format(sqlMethod.getSql(), sqlSelectColumns(table, true), table.getTableName(),
-                sqlWhereEntityWrapper(table));
+            sqlWhereEntityWrapper(table));
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         this.addSelectMappedStatement(mapperClass, sqlMethod.getMethod(), sqlSource, modelClass, table);
     }
@@ -470,7 +470,7 @@ public class AutoSqlInjector implements ISqlInjector {
      */
     protected void injectSelectMapsSql(SqlMethod sqlMethod, Class<?> mapperClass, Class<?> modelClass, TableInfo table) {
         String sql = String.format(sqlMethod.getSql(), sqlSelectColumns(table, true), table.getTableName(),
-                sqlWhereEntityWrapper(table));
+            sqlWhereEntityWrapper(table));
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         this.addSelectMappedStatement(mapperClass, sqlMethod.getMethod(), sqlSource, Map.class, table);
     }
@@ -487,7 +487,7 @@ public class AutoSqlInjector implements ISqlInjector {
      */
     protected void injectSelectObjsSql(SqlMethod sqlMethod, Class<?> mapperClass, Class<?> modelClass, TableInfo table) {
         String sql = String.format(sqlMethod.getSql(), sqlSelectObjsColumns(table), table.getTableName(),
-                sqlWhereEntityWrapper(table));
+            sqlWhereEntityWrapper(table));
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         this.addSelectMappedStatement(mapperClass, sqlMethod.getMethod(), sqlSource, Object.class, table);
     }
@@ -570,7 +570,7 @@ public class AutoSqlInjector implements ISqlInjector {
         for (TableFieldInfo fieldInfo : fieldList) {
             // 判断是否更新忽略,在FieldIgnore,UPDATE,INSERT_UPDATE设置为false
             ifTag = !(FieldFill.UPDATE == fieldInfo.getFieldFill()
-                    || FieldFill.INSERT_UPDATE == fieldInfo.getFieldFill());
+                || FieldFill.INSERT_UPDATE == fieldInfo.getFieldFill());
             if (selective && ifTag) {
                 if (StringUtils.isNotEmpty(fieldInfo.getUpdate())) {
                     set.append(fieldInfo.getColumn()).append("=");
@@ -801,7 +801,7 @@ public class AutoSqlInjector implements ISqlInjector {
             return "</if>";
         }
 
-		/** 前缀处理 */
+        /** 前缀处理 */
         String property = fieldInfo.getProperty();
         Class propertyType = fieldInfo.getPropertyType();
         property = StringUtils.removeIsPrefixIfBoolean(property, propertyType);
@@ -843,13 +843,13 @@ public class AutoSqlInjector implements ISqlInjector {
             if (null != resultMap) {
                 /** 返回 resultMap 映射结果集 */
                 return this.addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.SELECT, null, resultMap, null,
-                        new NoKeyGenerator(), null, null);
+                    new NoKeyGenerator(), null, null);
             }
         }
 
-		/** 普通查询 */
+        /** 普通查询 */
         return this.addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.SELECT, null, null, resultType,
-                new NoKeyGenerator(), null, null);
+            new NoKeyGenerator(), null, null);
     }
 
     /**
@@ -858,7 +858,7 @@ public class AutoSqlInjector implements ISqlInjector {
     public MappedStatement addInsertMappedStatement(Class<?> mapperClass, Class<?> modelClass, String id, SqlSource sqlSource,
                                                     KeyGenerator keyGenerator, String keyProperty, String keyColumn) {
         return this.addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.INSERT, modelClass, null, Integer.class,
-                keyGenerator, keyProperty, keyColumn);
+            keyGenerator, keyProperty, keyColumn);
     }
 
     /**
@@ -866,7 +866,7 @@ public class AutoSqlInjector implements ISqlInjector {
      */
     public MappedStatement addDeleteMappedStatement(Class<?> mapperClass, String id, SqlSource sqlSource) {
         return this.addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.DELETE, null, null, Integer.class,
-                new NoKeyGenerator(), null, null);
+            new NoKeyGenerator(), null, null);
     }
 
     /**
@@ -874,7 +874,7 @@ public class AutoSqlInjector implements ISqlInjector {
      */
     public MappedStatement addUpdateMappedStatement(Class<?> mapperClass, Class<?> modelClass, String id, SqlSource sqlSource) {
         return this.addMappedStatement(mapperClass, id, sqlSource, SqlCommandType.UPDATE, modelClass, null, Integer.class,
-                new NoKeyGenerator(), null, null);
+            new NoKeyGenerator(), null, null);
     }
 
     public MappedStatement addMappedStatement(Class<?> mapperClass, String id, SqlSource sqlSource,
@@ -883,17 +883,17 @@ public class AutoSqlInjector implements ISqlInjector {
         String statementName = mapperClass.getName() + "." + id;
         if (hasMappedStatement(statementName)) {
             System.err.println("{" + statementName
-                    + "} Has been loaded by XML or SqlProvider, ignoring the injection of the SQL.");
+                + "} Has been loaded by XML or SqlProvider, ignoring the injection of the SQL.");
             return null;
         }
-		/** 缓存逻辑处理 */
+        /** 缓存逻辑处理 */
         boolean isSelect = false;
         if (sqlCommandType == SqlCommandType.SELECT) {
             isSelect = true;
         }
         return builderAssistant.addMappedStatement(id, sqlSource, StatementType.PREPARED, sqlCommandType, null, null, null,
-                parameterClass, resultMap, resultType, null, !isSelect, isSelect, false, keyGenerator, keyProperty, keyColumn,
-                configuration.getDatabaseId(), languageDriver, null);
+            parameterClass, resultMap, resultType, null, !isSelect, isSelect, false, keyGenerator, keyProperty, keyColumn,
+            configuration.getDatabaseId(), languageDriver, null);
     }
 
     // --------------------------------------------------------SqlRunner------------------------------------------------------------
@@ -930,12 +930,12 @@ public class AutoSqlInjector implements ISqlInjector {
     @SuppressWarnings("serial")
     private void createSelectMappedStatement(String mappedStatement, SqlSource sqlSource, final Class<?> resultType) {
         MappedStatement ms = new MappedStatement.Builder(configuration, mappedStatement, sqlSource, SqlCommandType.SELECT)
-                .resultMaps(new ArrayList<ResultMap>() {
-                    {
-                        add(new ResultMap.Builder(configuration, "defaultResultMap", resultType, new ArrayList<ResultMapping>(0))
-                                .build());
-                    }
-                }).build();
+            .resultMaps(new ArrayList<ResultMap>() {
+                {
+                    add(new ResultMap.Builder(configuration, "defaultResultMap", resultType, new ArrayList<ResultMapping>(0))
+                        .build());
+                }
+            }).build();
         // 缓存
         configuration.addMappedStatement(ms);
     }
@@ -950,12 +950,12 @@ public class AutoSqlInjector implements ISqlInjector {
     @SuppressWarnings("serial")
     private void createUpdateMappedStatement(String mappedStatement, SqlSource sqlSource, SqlCommandType sqlCommandType) {
         MappedStatement ms = new MappedStatement.Builder(configuration, mappedStatement, sqlSource, sqlCommandType).resultMaps(
-                new ArrayList<ResultMap>() {
-                    {
-                        add(new ResultMap.Builder(configuration, "defaultResultMap", int.class, new ArrayList<ResultMapping>(0))
-                                .build());
-                    }
-                }).build();
+            new ArrayList<ResultMap>() {
+                {
+                    add(new ResultMap.Builder(configuration, "defaultResultMap", int.class, new ArrayList<ResultMapping>(0))
+                        .build());
+                }
+            }).build();
         // 缓存
         configuration.addMappedStatement(ms);
     }

+ 1 - 1
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/BaseMapper.java

@@ -200,7 +200,7 @@ public interface BaseMapper<T> {
     /**
      * <p>
      * 根据 Wrapper 条件,查询全部记录
-	 *   注意: 只返回第一个字段的值
+     * 注意: 只返回第一个字段的值
      * </p>
      *
      * @param wrapper 实体对象封装操作类(可以为 null)

+ 11 - 11
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/mapper/SqlRunner.java

@@ -101,8 +101,8 @@ public class SqlRunner {
     /**
      * 获取sqlMap参数
      *
-     * @param sql   指定参数的格式: {0}, {1}
-     * @param args  仅支持String
+     * @param sql  指定参数的格式: {0}, {1}
+     * @param args 仅支持String
      * @return
      */
     private Map<String, String> sqlMap(String sql, Object... args) {
@@ -118,10 +118,10 @@ public class SqlRunner {
 
     /**
      * 根据sql查询Map结果集
-     *   SqlRunner.db().selectList("select * from tbl_user where name={0}", "Caratacus")
+     * SqlRunner.db().selectList("select * from tbl_user where name={0}", "Caratacus")
      *
-     * @param sql    sql语句,可添加参数,格式:{0},{1}
-     * @param args   只接受String格式
+     * @param sql  sql语句,可添加参数,格式:{0},{1}
+     * @param args 只接受String格式
      * @return
      */
     public List<Map<String, Object>> selectList(String sql, Object... args) {
@@ -130,10 +130,10 @@ public class SqlRunner {
 
     /**
      * 根据sql查询一个字段值的结果集
-     *   注意:该方法只会返回一个字段的值, 如果需要多字段,请参考{@code selectList()}
+     * 注意:该方法只会返回一个字段的值, 如果需要多字段,请参考{@code selectList()}
      *
-     * @param sql    sql语句,可添加参数,格式:{0},{1}
-     * @param args   只接受String格式
+     * @param sql  sql语句,可添加参数,格式:{0},{1}
+     * @param args 只接受String格式
      * @return
      */
     public List<Object> selectObjs(String sql, Object... args) {
@@ -142,10 +142,10 @@ public class SqlRunner {
 
     /**
      * 根据sql查询一个字段值的一条结果
-     *   注意:该方法只会返回一个字段的值, 如果需要多字段,请参考{@code selectOne()}
+     * 注意:该方法只会返回一个字段的值, 如果需要多字段,请参考{@code selectOne()}
      *
-     * @param sql    sql语句,可添加参数,格式:{0},{1}
-     * @param args   只接受String格式
+     * @param sql  sql语句,可添加参数,格式:{0},{1}
+     * @param args 只接受String格式
      * @return
      */
     public Object selectObj(String sql, Object... args) {

+ 3 - 3
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/ClassUtils.java

@@ -21,9 +21,9 @@ public class ClassUtils {
             for (Class<?> cls : clazz.getInterfaces()) {
                 String interfaceName = cls.getName();
                 if (interfaceName.equals("net.sf.cglib.proxy.Factory") //cglib
-                        || interfaceName.equals("org.springframework.cglib.proxy.Factory")
-                        || interfaceName.equals("javassist.util.proxy.ProxyObject") //javassist
-                        || interfaceName.equals("org.apache.ibatis.javassist.util.proxy.ProxyObject")) {
+                    || interfaceName.equals("org.springframework.cglib.proxy.Factory")
+                    || interfaceName.equals("javassist.util.proxy.ProxyObject") //javassist
+                    || interfaceName.equals("org.apache.ibatis.javassist.util.proxy.ProxyObject")) {
                     return true;
                 }
             }

+ 1 - 1
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/EnumUtils.java

@@ -46,7 +46,7 @@ public class EnumUtils {
                 return e;
             } else if (value instanceof Number) {
                 if (e.getValue() instanceof Number &&
-                        ((Number) value).doubleValue() == ((Number) e.getValue()).doubleValue()) {
+                    ((Number) value).doubleValue() == ((Number) e.getValue()).doubleValue()) {
                     return e;
                 }
             } else if (String.valueOf(value).equals(String.valueOf(e.getValue()))) {

+ 2 - 2
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/PackageHelper.java

@@ -53,7 +53,7 @@ public class PackageHelper {
         ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
         MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
         String pkg = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
-                + ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/*.class";
+            + ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/*.class";
         /*
          * 将加载多个绝对匹配的所有Resource
 		 * 将首先通过ClassLoader.getResource("META-INF")加载非模式路径部分,然后进行遍历模式匹配,排除重复包路径
@@ -93,7 +93,7 @@ public class PackageHelper {
         ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
         MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
         String pkg = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
-                + ClassUtils.convertClassNameToResourcePath(typePackage) + "/*.class";
+            + ClassUtils.convertClassNameToResourcePath(typePackage) + "/*.class";
         /*
          * 将加载多个绝对匹配的所有Resource
 		 * 将首先通过ClassLoader.getResource("META-INF")加载非模式路径部分,然后进行遍历模式匹配,排除重复包路径

+ 0 - 1
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/PluginUtils.java

@@ -27,7 +27,6 @@ import org.apache.ibatis.reflection.SystemMetaObject;
 
 import com.baomidou.mybatisplus.annotations.SqlParser;
 import com.baomidou.mybatisplus.entity.SqlParserInfo;
-import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
 
 /**
  * <p>

+ 5 - 5
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/ReflectionKit.java

@@ -76,7 +76,7 @@ public class ReflectionKit {
         try {
             if (MapUtils.isEmpty(fieldMaps)) {
                 throw new MybatisPlusException(
-                        String.format("Error: NoSuchField in %s for %s.  Cause:", cls.getSimpleName(), str));
+                    String.format("Error: NoSuchField in %s for %s.  Cause:", cls.getSimpleName(), str));
             }
             Method method = cls.getMethod(getMethodCapitalize(fieldMaps.get(str), str));
             return method.invoke(entity);
@@ -84,8 +84,8 @@ public class ReflectionKit {
             throw new MybatisPlusException(String.format("Error: NoSuchMethod in %s.  Cause:", cls.getSimpleName()) + e);
         } catch (IllegalAccessException e) {
             throw new MybatisPlusException(String.format("Error: Cannot execute a private method. in %s.  Cause:",
-                    cls.getSimpleName())
-                    + e);
+                cls.getSimpleName())
+                + e);
         } catch (InvocationTargetException e) {
             throw new MybatisPlusException("Error: InvocationTargetException on getMethodValue.  Cause:" + e);
         }
@@ -126,7 +126,7 @@ public class ReflectionKit {
         Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
         if (index >= params.length || index < 0) {
             logger.warn(String.format("Warn: Index: %s, Size of %s's Parameterized Type: %s .", index, clazz.getSimpleName(),
-                    params.length));
+                params.length));
             return Object.class;
         }
         if (!(params[index] instanceof Class)) {
@@ -212,4 +212,4 @@ public class ReflectionKit {
         }
         return fieldList;
     }
-}
+}

+ 4 - 4
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/Sequence.java

@@ -73,7 +73,7 @@ public class Sequence {
         }
         if (datacenterId > maxDatacenterId || datacenterId < 0) {
             throw new MybatisPlusException(
-                    String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
+                String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
         }
         this.workerId = workerId;
         this.datacenterId = datacenterId;
@@ -164,9 +164,9 @@ public class Sequence {
         lastTimestamp = timestamp;
 
         return ((timestamp - twepoch) << timestampLeftShift)    // 时间戳部分
-                | (datacenterId << datacenterIdShift)           // 数据中心部分
-                | (workerId << workerIdShift)                   // 机器标识部分
-                | sequence;                                     // 序列号部分
+            | (datacenterId << datacenterIdShift)           // 数据中心部分
+            | (workerId << workerIdShift)                   // 机器标识部分
+            | sequence;                                     // 序列号部分
     }
 
     protected long tilNextMillis(long lastTimestamp) {

+ 10 - 10
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlFormatter.java

@@ -99,9 +99,9 @@ public class SqlFormatter {
 
         public FormatProcess(String sql) {
             tokens = new StringTokenizer(
-                    sql,
-                    "()+*/-=<>'`\"[]," + WHITESPACE,
-                    true
+                sql,
+                "()+*/-=<>'`\"[]," + WHITESPACE,
+                true
             );
         }
 
@@ -266,8 +266,8 @@ public class SqlFormatter {
             newline();
             afterBeginBeforeEnd = false;
             afterByOrSetOrFromOrSelect = "by".equals(lcToken)
-                    || "set".equals(lcToken)
-                    || "from".equals(lcToken);
+                || "set".equals(lcToken)
+                || "from".equals(lcToken);
         }
 
         private void beginNewClause() {
@@ -335,11 +335,11 @@ public class SqlFormatter {
             final char begin = tok.charAt(0);
             final boolean isIdentifier = Character.isJavaIdentifierStart(begin) || '"' == begin;
             return isIdentifier &&
-                    !LOGICAL.contains(tok) &&
-                    !END_CLAUSES.contains(tok) &&
-                    !QUANTIFIERS.contains(tok) &&
-                    !DML.contains(tok) &&
-                    !MISC.contains(tok);
+                !LOGICAL.contains(tok) &&
+                !END_CLAUSES.contains(tok) &&
+                !QUANTIFIERS.contains(tok) &&
+                !DML.contains(tok) &&
+                !MISC.contains(tok);
         }
 
         private static boolean isWhitespace(String token) {

+ 104 - 104
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlReservedWords.java

@@ -36,110 +36,110 @@ public class SqlReservedWords {
 
     static {
         String[] words = {"AUDIT", "VOLUMES", "MINVALUE", "STATIC", "FLOOR", "CATALOG", "YEAR", "TRIGGER_CATALOG", "WLM",
-                "DISCONNECT", "PARTITION", "LEFT", " MODE", "SEARCH", "CURRENT_PATH", "DAYOFYEAR", "SIZE", "RESTRICT", "RELEASE",
-                "WHERE", "POSTFIX", "SQLWARNING", "UID", "AS", "AT", "SYSID", "DATABASE", "SPECIFIC_NAME", "TIMEZONE_MINUTE",
-                "LC_CTYPE", "ATTRIBUTES", "LOCATION", "A", "DOMAIN", "C", "SET", " INCREMENT", "MERGE", "G", "DAYS", "HEADER",
-                "K", "CONSTRAINT", "M", "PRECISION", "ROLE", "COLLATION_NAME", "BY", "STRAIGHT_JOIN", "CHARACTER", "INSTEAD",
-                "DUAL", "DSNHATTR", "BERNOULLI", " ADD", "CLUSTERED", "CONTINUE", "DIV", "OPERATOR", "SETS", "SECURITY",
-                "CURRENT_LC_CTYPE", "TRUNCATE", "CURSOR", "SQL_LOW_PRIORITY_UPDATES", "CONSTRAINT_SCHEMA", "STATEMENT",
-                "TABLE_NAME", "NODENUMBER", "DO", "RECOVERY", "LOW_PRIORITY", "ADMIN", "ESCAPED", "CAPTURE", "ALLOW", "VARYING",
-                "DISABLE", "STRICT", "SQL_BIG_RESULT", "ABORT", "FOR", "IMPLICIT", "USING", "EXEC", "DEFERRABLE", "RAISERROR",
-                "USER_DEFINED_TYPE_NAME", "VALIDATOR", "UNDO", "STATE", "WITHIN", "NCHAR", "ABSOLUTE", "PREORDER", "SCHEMA",
-                "SEQUENCE", "ASSIGNMENT", "COLUMNS", "END-EXEC1", "GO", "ROW_NUMBER", "BIT", "INTERSECT", "SYSDATE", "WITH",
-                "CLASS_ORIGIN", "ACTION", "ISNULL", "VALIDATE", " COMPRESS", "START", "CHARACTER_LENGTH", "BULK", "EVERY",
-                "NULLIF", "CEIL", "FLUSH", "MIN_ROWS", "GRANTED", "IF", "BIT_LENGTH", "PARAMETER", "CHARACTER_SET_SCHEMA",
-                "DEFINITION", "NCLOB", "FIELDS", "IN", "DISTINCT", "STYLE", "IS", "MASTER_BIND", "REGR_INTERCEPT", "TERMINATE",
-                "FORCE", "FENCED", " IMMEDIATE", "MAP", "READTEXT", "SYSFUN", "EXIT", "DBCC", "OPENROWSET", "COLLATION", "GOTO",
-                "RAID0", "MAX", "CASCADE", "DELIMITERS", "TRANSACTION", "SECQTY", "IGNORE", "COMMENT", "OFF", "CHARACTERS",
-                "IDENTITYCOL", "USAGE", "UPDATE", "SAVE", "REQUIRE", "DISTINCTROW", "USE", "RETURNS", "LOCATORS",
-                "CHARACTERISTICS", "FIRST", "LINENO", "ONLINE", "SELECT", "EXCLUDING", "TABLES", "OUTFILE", "ERASE", "GREATEST",
-                "UTC_DATE", "VARCHARACTER", "INVOKER", "STOGROUP", "DEPTH", "CURRENT_USER", "LN", "ARRAY", "ATOMIC", " ALTER",
-                "COLUMN_NAME", "COLUMN", "MODE", " COMMENT", "DECIMAL", "RESET", "NEW_TABLE", "ROUTINE_NAME", "COMPRESS",
-                "OVERLAY", "READ_WRITE", "COALESCE", "STATUS", " EXCLUSIVE", "UNBOUNDED", "REGR_SLOPE", "CORRESPONDING",
-                "TIMESTAMP", "MESSAGE_OCTET_LENGTH", "SQL_LOG_OFF", "RETURNED_LENGTH", "DISALLOW", "PRIVILEGES", "SQL", "READ",
-                " IDENTIFIED", "REAL", "LESS", "DIAGNOSTICS", "QUERYNO", "NO", "FLOAT", "COMMAND_FUNCTION_CODE",
-                "CURRENT_TIMESTAMP", "TIES", "ROUTINE", "SUBLIST", "FOLLOWING", "ROLLBACK", "MEMBER", "DSSIZE", "DUMP",
-                "EXTERNAL", "GROUPING", "OF", "CHANGE", "RECHECK", " NUMBER", "ON", "DBINFO", "OR", "EQUALS", "CREATEROLE",
-                "PRIMARY", "SSL", "MATCHED", "DAYOFWEEK", "DYNAMIC_FUNCTION_CODE", "ENCODING", "OPTIMIZATION", "SECOND",
-                "UNKNOWN", "HOUR_SECOND", "REFERENCES", "ROWS", "JAVA", "SPATIAL", "INHERIT", "CREATE",
-                "PARAMETER_SPECIFIC_SCHEMA", "LEAST", "OLD", "TRIGGER", "BETWEEN", "OBID", "CONVERT", "POSITION", "PROCESS",
-                "SQL_SELECT_LIMIT", "NOTHING", "DEALLOCATE", "SUBPAGES", "INNER", "SQL_BIG_SELECTS", "EACH", "OPTIONALLY",
-                "SETUSER", "BIGINT", "NOAUDIT", "SUM", "OPTIONS", "MIN", "BITVAR", "VARCHAR", "SQLCA", "KEY", "PROGRAM", "CALL",
-                "WAITFOR", "RELOAD", "DELAY_KEY_WRITE", "USER_DEFINED_TYPE_SCHEMA", "RLIKE", "EDITPROC", "GROUP",
-                "DATETIME_INTERVAL_PRECISION", "ASSOCIATE", "RESTORE", "OFFSET", "TEMPORARY", "STANDARD", "OPENDATASOURCE",
-                "STATISTICS", "COBOL", "SECOND_MICROSECOND", "NULLABLE", "COMMITTED", "DELAYED", "PERCENT", " ONLINE", "DB2SQL",
-                "TO", "CONSTRUCTOR", "DB2GNRL", "UNION", "FREEZE", "SCOPE", "CLASS", "VIEW", "LINES", "ASSERTION", "PACKAGE",
-                "TRIGGER_NAME", "CONSTRAINTS", "LABEL", "CURRENT_TIME", "DEFERRED", "REPLACE", "KEY_MEMBER", "INTEGER",
-                "OVERRIDING", "UNIQUE", " MAXEXTENTS", "TRAILING", "COVAR_SAMP", "FINAL", " NOAUDIT", "FULL", "NAME", "YEARS",
-                "ROW_COUNT", "NOCREATEROLE", "CEILING", "LAST", "MAXVALUE", "QUOTE", "TOAST", "LOCALTIME", "CONTAINS", "GENERAL",
-                "DELIMITER", "STDIN", "REGEXP", "REGR_COUNT", "NOTIFY", "NEXT", "GLOBAL", "LEAVE", "SHOW", "SHUTDOWN", "VERBOSE",
-                "NORMALIZE", "CURRENT_TIMEZONE", "MOD", "EXISTS", "TIME", "MYISAM", "INHERITS", "DATETIME", "HOURS",
-                "NOMINVALUE", "BOOL", "ERRLVL", "NESTING", "FALSE", "MINUTES", "SECTION", "NOCHECK", "NOTNULL",
-                "PERCENTILE_CONT", "SYMMETRIC", "VALID", "PLAN", "SHARE", "TRAN", "STDDEV_SAMP", "WHEN",
-                "TRANSACTIONS_COMMITTED", "BREAK", "LOCAL", "CONSTRAINT_CATALOG", "DICTIONARY", "LOGIN", "CLUSTER", "GRANTS",
-                "DAY_MINUTE", "LONGBLOB", "CYCLE", "CAST", "INSTANCE", "VARCHAR2", "FUNCTION", "LEADING", "MODIFIES", "NOWAIT",
-                "CASE", "OUT", "OPTIMIZE", "REGR_SXX", "REGR_SXY", "OVERLAPS", "GET", "DENSE_RANK", "PUBLIC", "COUNT", "TREAT",
-                "NAMES", " NOCOMPRESS", "IDENTITY_INSERT", "NONCLUSTERED", "LENGTH", "UNSIGNED", "CHAR", "BEGIN", "MAX_ROWS",
-                "WRITE", "ORDER", "ISOLATION", "REPLICATION", "SQL_CALC_FOUND_ROWS", "REGR_SYY", "LANCOMPILER", " CLUSTER",
-                "CHARACTER_SET_NAME", "SIGNAL", "SUBMULTISET", "COLLATE", "MODIFY", "INSTANTIABLE", "UNCOMMITTED", "RESIGNAL",
-                "MORE", "PROC", "REPEATABLE", "COMPLETION", "KEY_TYPE", "KILL", "TRANSFORMS", "VOLATILE", "INPUT", "SUBSTRING",
-                "ZONE", "VCAT", "DEREF", "AUXILIARY", "REGR_AVGY", "REGR_AVGX", "TEMPLATE", "INCLUDING", "INSENSITIVE", "BOTH",
-                "CHARACTER_SET_CATALOG", "ENABLE", "EXCEPT", "HOSTS", "SCHEMA_NAME", "PREFIX", "SCROLL", "METHOD", "DAY_SECOND",
-                "DESTRUCTOR", "OIDS", "INT", "PASCAL", "COLLID", "PART", "ALSO", "CARDINALITY", "ACCESS", "OPENQUERY", "CLOB",
-                "COMMIT", "DISPATCH", "STRUCTURE", "DETERMINISTIC", "SAVEPOINT", "UNTIL", "USER", "TEMP", "MEDIUMBLOB", "MOVE",
-                "CROSS", "SMALLINT", "UESCAPE", "USER_DEFINED_TYPE_CATALOG", "RESULT", "SQLID", "PATH", "RESULT_SET_LOCATOR",
-                "PURGE", "TRIM", "ROWGUIDCOL", "RAW", "RANK", "VAR_POP", "MUMPS", "TRANSLATION", "MINUS", "EXPLAIN",
-                "PARAMETER_SPECIFIC_CATALOG", " INITIAL", "MESSAGE_LENGTH", "HOUR_MINUTE", "LISTEN", "WIDTH_BUCKET", "STORAGE",
-                "CURRENT_DEFAULT_TRANSFORM_GROUP", "STDOUT", "CUBE", "IMMUTABLE", "REGR_R2", "SQL_LOG_UPDATE", "XOR",
-                "FREETEXTTABLE", "ALTER", "MONTHNAME", "FUSION", "DESTROY", "PARAMETER_SPECIFIC_NAME", "TEXTSIZE", "SPACE",
-                "UPPER", "ABS", "CREATEUSER", "INTEGRITY", "OCTET_LENGTH", "TINYINT", "INTERVAL", "COLLATION_SCHEMA",
-                "CATALOG_NAME", "UNLISTEN", "MASTER_SSL_VERIFY_SERVER_CERT", "POWER", "CONNECTION", "PAD", "REF", "LOCALE",
-                "OPERATION", "SIMPLE", "VARBINARY", "VARIABLES", "ADA", "VIRTUAL", " FILE", "SYSTEM", "ADD", "SCOPE_CATALOG",
-                "SQLERROR", "CHECKED", "VARIANT", "OLD_TABLE", "INFIX", "TRUSTED", "INDEX", "FOUND", "HOLD", "EXTRACT",
-                "OFFSETS", "ATTRIBUTE", "PERCENTILE_DISC", "ITERATE", "CURRENT_SERVER", "CACHE", " LOCK", "CURRENT", " NOWAIT",
-                "RETURNED_SQLSTATE", "SYSPROC", "CONNECTION_NAME", "END", "PRESERVE", "LOAD", "TERMINATED", "BINARY", "FORWARD",
-                "SOME", "LAST_INSERT_ID", "OUTER", "INFILE", "RENAME", "EXCLUSIVE", "FILTER", "IDENTIFIED", "NORMALIZED",
-                " COLUMN", "INITIALLY", "OVER", "CURRENT_ROLE", "GRANT", "OTHERS", "SONAME", "CHAR_LENGTH", "NOMAXVALUE",
-                "ROWID", "DEFAULT", "SQRT", "JOIN", "LOCK", "TEXT", "UNNEST", "AVG_ROW_LENGTH", "SESSION_USER", "AGGREGATE",
-                "MULTISET", "ELSE", "TRANSACTION_ACTIVE", "LANGUAGE", "PERCENT_RANK", "ENUM", "NATIONAL", "SETOF",
-                "RETURNED_CARDINALITY", "SYNONYM", "CURRENT_TRANSFORM_GROUP_FOR_TYPE", "SPECIFICTYPE", "TOP", "FORTRAN",
-                "DEGREE", "ASYMMETRIC", "GRAPHIC", "ALWAYS", "MEDIUMTEXT", "SYSTEM_USER", "ROUTINE_CATALOG", "CURSOR_NAME",
-                "RIGHT", "STABLE", "FILE", "CREATEDB", "DISTRIBUTED", "FILLFACTOR", "FETCH", "NUMERIC", "STARTING", "REVOKE",
-                "SQLEXCEPTION", "DYNAMIC", "CHAIN", "CALLED", "INCREMENT", "ELEMENT", "MAXEXTENTS", "ROUTINE_SCHEMA",
-                "IO_AFTER_GTIDS", "TRIGGER_SCHEMA", "ALL", "NEW", "THAN", "ALIAS", "HOST", "VALUE", "LOGS", "SERIALIZABLE",
-                "X509", "AUTO_INCREMENT", "BACKUP", "MINUTE_MICROSECOND", "ALLOCATE", "HOLDLOCK", "MINUTE", "SCALE", "TINYTEXT",
-                "DESCRIBE", "NOCREATEDB", " INTERSECT", " PCTFREE", " PRIOR", "NULL", "TRUE", "PCTFREE", "EXISTING",
-                "PARAMETERS", "OBJECT", "TABLESPACE", "UTC_TIME", " LEVEL", "MODULE", "PASSWORD", "EXCLUDE", "SQL_WARNINGS",
-                "AND", "SQLCODE", "ROW", "CURRENT_DATE", "MESSAGE_TEXT", "DISK", "RANGE", "VACUUM", "MLSLABEL", "STORED", "HOUR",
-                "CONCAT", "APPLICATION", "INITIAL", "ANY", "PLI", "HEAP", " AUDIT", "NATURAL", "NOINHERIT", "STORES", "UNNAMED",
-                "KEYS", "RESTART", "READS", "NUMPARTS", "CSV", "IMPLEMENTATION", "ORDERING", "TRANSLATE", "REINDEX", "JAR",
-                "EXP", "MATCH", "PRINT", "NOCREATEUSER", "CHECKSUM", "ELSEIF", "MONTH", "ROWCOUNT", "AFTER", "CLOSE", "RRN",
-                "MONTHS", "OWNER", "DENY", "END-EXEC", "INCLUDE", "OCTETS", "UPDATETEXT", "PRIOR", "SYSIBM", " DATE",
-                "SCRATCHPAD", "NODENAME", "IDENTITY", "ARE", "FULLTEXT", "SOURCE", "CONDITION", "THEN", "PROCEDURAL", "UNLOCK",
-                "HIERARCHY", "ORDINALITY", "INTO", "MICROSECONDS", "REPEAT", "MICROSECOND", "EXCEPTION", "INDICATOR", "FREE",
-                "RETURNED_OCTET_LENGTH", "NOCOMPRESS", "ASC", "DELETE", "COVAR_POP", "VARIABLE", " INDEX", "PREPARED",
-                "GENERATED", "SIMILAR", "LONG", "RESOURCE", "INT1", "INT2", "PROCEDURE", "INT3", "STDDEV_POP", "INT4", "SECONDS",
-                "COLLECT", "ANALYZE", "RUN", "UNDER", "INT8", "OPEN", "DERIVED", "NO_WRITE_TO_BINLOG", "REFERENCING", "STRING",
-                "PSID", "BREADTH", "STAY", "LOCATOR", "NOCACHE", "LOOP", "HIGH_PRIORITY", "IMMEDIATE", "DESC", "FREETEXT",
-                "NUMBER", "AUX", "OUTPUT", "LONGTEXT", "DATABASES", "BOOLEAN", "AVG", "NOT", "PLACING", "INTERSECTION", "LOWER",
-                "SPECIFIC", "MINUTE_SECOND", "FLOAT8", "HAVING", "FIELDPROC", "FLOAT4", "SQLSTATE", "RECONFIGURE", "LOCKMAX",
-                "BACKWARD", "BUFFERPOOL", "VALIDPROC", " MINUS", "COMMAND_FUNCTION", "DROP", "RETURN", "FOREIGN",
-                "PARAMETER_NAME", "TSEQUAL", "SQL_SMALL_RESULT", "RULE", "SERVER_NAME", "DAYOFMONTH", "IO_BEFORE_GTIDS",
-                "PARTIAL", "MEDIUMINT", "TRANSACTIONS_ROLLED_BACK", "OPENXML", " DROP", "ESCAPE", "SCOPE_NAME", "ISAM", "LINEAR",
-                "PARAMETER_ORDINAL_POSITION", " OFFLINE", "ROWNUM", "DATETIME_INTERVAL_CODE", "DEFINED", "LOCALTIMESTAMP",
-                " CONNECT", "ISOBID", "TABLE", "ANALYSE", "DEFINER", "SCOPE_SCHEMA", "COLLATION_CATALOG", "NONE", "PROCESSLIST",
-                "TYPE", "USER_DEFINED_TYPE_CODE", "DESCRIPTOR", "PIECESIZE", "OPTION", "WHENEVER", "ENCLOSED", "LEVEL",
-                "COUNT_BIG", "ASENSITIVE", "LOCKSIZE", "TINYBLOB", "PREPARE", "CHECK", "WITHOUT", "WORK", "HANDLER", "CUME_DIST",
-                "WRITETEXT", "INITIALIZE", "DAY_HOUR", "ILIKE", "CONNECT", "TABLESAMPLE", "INSERT_ID", "MIDDLEINT", "RELATIVE",
-                "LARGE", "ACCESSIBLE", "VALUES", "DOUBLE", "ASUTIME", "DEFAULTS", "NOLOGIN", "TIMEZONE_HOUR", "COMPUTE", "COPY",
-                "SELF", "SESSION", "NOCYCLE", "DUMMY", "WINDOW", "EXECUTE", "PRECEDING", "PACK_KEYS", "NOORDER", "CHECKPOINT",
-                " LONG", "DAY", "AUTHORIZATION", "CCSID", "COLLECTION", "BLOB", "PRIQTY", "RECURSIVE", "ONLY", "FROM",
-                "SQL_BIG_TABLES", "LATERAL", "TRANSFORM", "HOUR_MICROSECOND", "SENSITIVE", "SUBCLASS_ORIGIN", "CONVERSION",
-                "DAY_MICROSECOND", "SEPARATOR", "OPTIMIZER_COSTS", "NOSUPERUSER", "DATE", "ROLLUP", "TOP_LEVEL_COUNT", "CORR",
-                "UNENCRYPTED", "UTC_TIMESTAMP", "LIKE", "ZEROFILL", "DATA", "SUCCESSFUL", "INSERT", "YEAR_MONTH", "OFFLINE",
-                "INOUT", "VAR_SAMP", "BROWSE", "SCHEMAS", "CONSTRAINT_NAME", "PARAMETER_MODE", "LIMIT", "LINKTYPE", "NULLS",
-                "DEC", "CASCADED", "ENCRYPTED", "CONTAINSTABLE", "DYNAMIC_FUNCTION", "CONDITION_NUMBER", "BEFORE", "DB2GENERAL",
-                "DECLARE", "SUPERUSER", "WHILE"};
+            "DISCONNECT", "PARTITION", "LEFT", " MODE", "SEARCH", "CURRENT_PATH", "DAYOFYEAR", "SIZE", "RESTRICT", "RELEASE",
+            "WHERE", "POSTFIX", "SQLWARNING", "UID", "AS", "AT", "SYSID", "DATABASE", "SPECIFIC_NAME", "TIMEZONE_MINUTE",
+            "LC_CTYPE", "ATTRIBUTES", "LOCATION", "A", "DOMAIN", "C", "SET", " INCREMENT", "MERGE", "G", "DAYS", "HEADER",
+            "K", "CONSTRAINT", "M", "PRECISION", "ROLE", "COLLATION_NAME", "BY", "STRAIGHT_JOIN", "CHARACTER", "INSTEAD",
+            "DUAL", "DSNHATTR", "BERNOULLI", " ADD", "CLUSTERED", "CONTINUE", "DIV", "OPERATOR", "SETS", "SECURITY",
+            "CURRENT_LC_CTYPE", "TRUNCATE", "CURSOR", "SQL_LOW_PRIORITY_UPDATES", "CONSTRAINT_SCHEMA", "STATEMENT",
+            "TABLE_NAME", "NODENUMBER", "DO", "RECOVERY", "LOW_PRIORITY", "ADMIN", "ESCAPED", "CAPTURE", "ALLOW", "VARYING",
+            "DISABLE", "STRICT", "SQL_BIG_RESULT", "ABORT", "FOR", "IMPLICIT", "USING", "EXEC", "DEFERRABLE", "RAISERROR",
+            "USER_DEFINED_TYPE_NAME", "VALIDATOR", "UNDO", "STATE", "WITHIN", "NCHAR", "ABSOLUTE", "PREORDER", "SCHEMA",
+            "SEQUENCE", "ASSIGNMENT", "COLUMNS", "END-EXEC1", "GO", "ROW_NUMBER", "BIT", "INTERSECT", "SYSDATE", "WITH",
+            "CLASS_ORIGIN", "ACTION", "ISNULL", "VALIDATE", " COMPRESS", "START", "CHARACTER_LENGTH", "BULK", "EVERY",
+            "NULLIF", "CEIL", "FLUSH", "MIN_ROWS", "GRANTED", "IF", "BIT_LENGTH", "PARAMETER", "CHARACTER_SET_SCHEMA",
+            "DEFINITION", "NCLOB", "FIELDS", "IN", "DISTINCT", "STYLE", "IS", "MASTER_BIND", "REGR_INTERCEPT", "TERMINATE",
+            "FORCE", "FENCED", " IMMEDIATE", "MAP", "READTEXT", "SYSFUN", "EXIT", "DBCC", "OPENROWSET", "COLLATION", "GOTO",
+            "RAID0", "MAX", "CASCADE", "DELIMITERS", "TRANSACTION", "SECQTY", "IGNORE", "COMMENT", "OFF", "CHARACTERS",
+            "IDENTITYCOL", "USAGE", "UPDATE", "SAVE", "REQUIRE", "DISTINCTROW", "USE", "RETURNS", "LOCATORS",
+            "CHARACTERISTICS", "FIRST", "LINENO", "ONLINE", "SELECT", "EXCLUDING", "TABLES", "OUTFILE", "ERASE", "GREATEST",
+            "UTC_DATE", "VARCHARACTER", "INVOKER", "STOGROUP", "DEPTH", "CURRENT_USER", "LN", "ARRAY", "ATOMIC", " ALTER",
+            "COLUMN_NAME", "COLUMN", "MODE", " COMMENT", "DECIMAL", "RESET", "NEW_TABLE", "ROUTINE_NAME", "COMPRESS",
+            "OVERLAY", "READ_WRITE", "COALESCE", "STATUS", " EXCLUSIVE", "UNBOUNDED", "REGR_SLOPE", "CORRESPONDING",
+            "TIMESTAMP", "MESSAGE_OCTET_LENGTH", "SQL_LOG_OFF", "RETURNED_LENGTH", "DISALLOW", "PRIVILEGES", "SQL", "READ",
+            " IDENTIFIED", "REAL", "LESS", "DIAGNOSTICS", "QUERYNO", "NO", "FLOAT", "COMMAND_FUNCTION_CODE",
+            "CURRENT_TIMESTAMP", "TIES", "ROUTINE", "SUBLIST", "FOLLOWING", "ROLLBACK", "MEMBER", "DSSIZE", "DUMP",
+            "EXTERNAL", "GROUPING", "OF", "CHANGE", "RECHECK", " NUMBER", "ON", "DBINFO", "OR", "EQUALS", "CREATEROLE",
+            "PRIMARY", "SSL", "MATCHED", "DAYOFWEEK", "DYNAMIC_FUNCTION_CODE", "ENCODING", "OPTIMIZATION", "SECOND",
+            "UNKNOWN", "HOUR_SECOND", "REFERENCES", "ROWS", "JAVA", "SPATIAL", "INHERIT", "CREATE",
+            "PARAMETER_SPECIFIC_SCHEMA", "LEAST", "OLD", "TRIGGER", "BETWEEN", "OBID", "CONVERT", "POSITION", "PROCESS",
+            "SQL_SELECT_LIMIT", "NOTHING", "DEALLOCATE", "SUBPAGES", "INNER", "SQL_BIG_SELECTS", "EACH", "OPTIONALLY",
+            "SETUSER", "BIGINT", "NOAUDIT", "SUM", "OPTIONS", "MIN", "BITVAR", "VARCHAR", "SQLCA", "KEY", "PROGRAM", "CALL",
+            "WAITFOR", "RELOAD", "DELAY_KEY_WRITE", "USER_DEFINED_TYPE_SCHEMA", "RLIKE", "EDITPROC", "GROUP",
+            "DATETIME_INTERVAL_PRECISION", "ASSOCIATE", "RESTORE", "OFFSET", "TEMPORARY", "STANDARD", "OPENDATASOURCE",
+            "STATISTICS", "COBOL", "SECOND_MICROSECOND", "NULLABLE", "COMMITTED", "DELAYED", "PERCENT", " ONLINE", "DB2SQL",
+            "TO", "CONSTRUCTOR", "DB2GNRL", "UNION", "FREEZE", "SCOPE", "CLASS", "VIEW", "LINES", "ASSERTION", "PACKAGE",
+            "TRIGGER_NAME", "CONSTRAINTS", "LABEL", "CURRENT_TIME", "DEFERRED", "REPLACE", "KEY_MEMBER", "INTEGER",
+            "OVERRIDING", "UNIQUE", " MAXEXTENTS", "TRAILING", "COVAR_SAMP", "FINAL", " NOAUDIT", "FULL", "NAME", "YEARS",
+            "ROW_COUNT", "NOCREATEROLE", "CEILING", "LAST", "MAXVALUE", "QUOTE", "TOAST", "LOCALTIME", "CONTAINS", "GENERAL",
+            "DELIMITER", "STDIN", "REGEXP", "REGR_COUNT", "NOTIFY", "NEXT", "GLOBAL", "LEAVE", "SHOW", "SHUTDOWN", "VERBOSE",
+            "NORMALIZE", "CURRENT_TIMEZONE", "MOD", "EXISTS", "TIME", "MYISAM", "INHERITS", "DATETIME", "HOURS",
+            "NOMINVALUE", "BOOL", "ERRLVL", "NESTING", "FALSE", "MINUTES", "SECTION", "NOCHECK", "NOTNULL",
+            "PERCENTILE_CONT", "SYMMETRIC", "VALID", "PLAN", "SHARE", "TRAN", "STDDEV_SAMP", "WHEN",
+            "TRANSACTIONS_COMMITTED", "BREAK", "LOCAL", "CONSTRAINT_CATALOG", "DICTIONARY", "LOGIN", "CLUSTER", "GRANTS",
+            "DAY_MINUTE", "LONGBLOB", "CYCLE", "CAST", "INSTANCE", "VARCHAR2", "FUNCTION", "LEADING", "MODIFIES", "NOWAIT",
+            "CASE", "OUT", "OPTIMIZE", "REGR_SXX", "REGR_SXY", "OVERLAPS", "GET", "DENSE_RANK", "PUBLIC", "COUNT", "TREAT",
+            "NAMES", " NOCOMPRESS", "IDENTITY_INSERT", "NONCLUSTERED", "LENGTH", "UNSIGNED", "CHAR", "BEGIN", "MAX_ROWS",
+            "WRITE", "ORDER", "ISOLATION", "REPLICATION", "SQL_CALC_FOUND_ROWS", "REGR_SYY", "LANCOMPILER", " CLUSTER",
+            "CHARACTER_SET_NAME", "SIGNAL", "SUBMULTISET", "COLLATE", "MODIFY", "INSTANTIABLE", "UNCOMMITTED", "RESIGNAL",
+            "MORE", "PROC", "REPEATABLE", "COMPLETION", "KEY_TYPE", "KILL", "TRANSFORMS", "VOLATILE", "INPUT", "SUBSTRING",
+            "ZONE", "VCAT", "DEREF", "AUXILIARY", "REGR_AVGY", "REGR_AVGX", "TEMPLATE", "INCLUDING", "INSENSITIVE", "BOTH",
+            "CHARACTER_SET_CATALOG", "ENABLE", "EXCEPT", "HOSTS", "SCHEMA_NAME", "PREFIX", "SCROLL", "METHOD", "DAY_SECOND",
+            "DESTRUCTOR", "OIDS", "INT", "PASCAL", "COLLID", "PART", "ALSO", "CARDINALITY", "ACCESS", "OPENQUERY", "CLOB",
+            "COMMIT", "DISPATCH", "STRUCTURE", "DETERMINISTIC", "SAVEPOINT", "UNTIL", "USER", "TEMP", "MEDIUMBLOB", "MOVE",
+            "CROSS", "SMALLINT", "UESCAPE", "USER_DEFINED_TYPE_CATALOG", "RESULT", "SQLID", "PATH", "RESULT_SET_LOCATOR",
+            "PURGE", "TRIM", "ROWGUIDCOL", "RAW", "RANK", "VAR_POP", "MUMPS", "TRANSLATION", "MINUS", "EXPLAIN",
+            "PARAMETER_SPECIFIC_CATALOG", " INITIAL", "MESSAGE_LENGTH", "HOUR_MINUTE", "LISTEN", "WIDTH_BUCKET", "STORAGE",
+            "CURRENT_DEFAULT_TRANSFORM_GROUP", "STDOUT", "CUBE", "IMMUTABLE", "REGR_R2", "SQL_LOG_UPDATE", "XOR",
+            "FREETEXTTABLE", "ALTER", "MONTHNAME", "FUSION", "DESTROY", "PARAMETER_SPECIFIC_NAME", "TEXTSIZE", "SPACE",
+            "UPPER", "ABS", "CREATEUSER", "INTEGRITY", "OCTET_LENGTH", "TINYINT", "INTERVAL", "COLLATION_SCHEMA",
+            "CATALOG_NAME", "UNLISTEN", "MASTER_SSL_VERIFY_SERVER_CERT", "POWER", "CONNECTION", "PAD", "REF", "LOCALE",
+            "OPERATION", "SIMPLE", "VARBINARY", "VARIABLES", "ADA", "VIRTUAL", " FILE", "SYSTEM", "ADD", "SCOPE_CATALOG",
+            "SQLERROR", "CHECKED", "VARIANT", "OLD_TABLE", "INFIX", "TRUSTED", "INDEX", "FOUND", "HOLD", "EXTRACT",
+            "OFFSETS", "ATTRIBUTE", "PERCENTILE_DISC", "ITERATE", "CURRENT_SERVER", "CACHE", " LOCK", "CURRENT", " NOWAIT",
+            "RETURNED_SQLSTATE", "SYSPROC", "CONNECTION_NAME", "END", "PRESERVE", "LOAD", "TERMINATED", "BINARY", "FORWARD",
+            "SOME", "LAST_INSERT_ID", "OUTER", "INFILE", "RENAME", "EXCLUSIVE", "FILTER", "IDENTIFIED", "NORMALIZED",
+            " COLUMN", "INITIALLY", "OVER", "CURRENT_ROLE", "GRANT", "OTHERS", "SONAME", "CHAR_LENGTH", "NOMAXVALUE",
+            "ROWID", "DEFAULT", "SQRT", "JOIN", "LOCK", "TEXT", "UNNEST", "AVG_ROW_LENGTH", "SESSION_USER", "AGGREGATE",
+            "MULTISET", "ELSE", "TRANSACTION_ACTIVE", "LANGUAGE", "PERCENT_RANK", "ENUM", "NATIONAL", "SETOF",
+            "RETURNED_CARDINALITY", "SYNONYM", "CURRENT_TRANSFORM_GROUP_FOR_TYPE", "SPECIFICTYPE", "TOP", "FORTRAN",
+            "DEGREE", "ASYMMETRIC", "GRAPHIC", "ALWAYS", "MEDIUMTEXT", "SYSTEM_USER", "ROUTINE_CATALOG", "CURSOR_NAME",
+            "RIGHT", "STABLE", "FILE", "CREATEDB", "DISTRIBUTED", "FILLFACTOR", "FETCH", "NUMERIC", "STARTING", "REVOKE",
+            "SQLEXCEPTION", "DYNAMIC", "CHAIN", "CALLED", "INCREMENT", "ELEMENT", "MAXEXTENTS", "ROUTINE_SCHEMA",
+            "IO_AFTER_GTIDS", "TRIGGER_SCHEMA", "ALL", "NEW", "THAN", "ALIAS", "HOST", "VALUE", "LOGS", "SERIALIZABLE",
+            "X509", "AUTO_INCREMENT", "BACKUP", "MINUTE_MICROSECOND", "ALLOCATE", "HOLDLOCK", "MINUTE", "SCALE", "TINYTEXT",
+            "DESCRIBE", "NOCREATEDB", " INTERSECT", " PCTFREE", " PRIOR", "NULL", "TRUE", "PCTFREE", "EXISTING",
+            "PARAMETERS", "OBJECT", "TABLESPACE", "UTC_TIME", " LEVEL", "MODULE", "PASSWORD", "EXCLUDE", "SQL_WARNINGS",
+            "AND", "SQLCODE", "ROW", "CURRENT_DATE", "MESSAGE_TEXT", "DISK", "RANGE", "VACUUM", "MLSLABEL", "STORED", "HOUR",
+            "CONCAT", "APPLICATION", "INITIAL", "ANY", "PLI", "HEAP", " AUDIT", "NATURAL", "NOINHERIT", "STORES", "UNNAMED",
+            "KEYS", "RESTART", "READS", "NUMPARTS", "CSV", "IMPLEMENTATION", "ORDERING", "TRANSLATE", "REINDEX", "JAR",
+            "EXP", "MATCH", "PRINT", "NOCREATEUSER", "CHECKSUM", "ELSEIF", "MONTH", "ROWCOUNT", "AFTER", "CLOSE", "RRN",
+            "MONTHS", "OWNER", "DENY", "END-EXEC", "INCLUDE", "OCTETS", "UPDATETEXT", "PRIOR", "SYSIBM", " DATE",
+            "SCRATCHPAD", "NODENAME", "IDENTITY", "ARE", "FULLTEXT", "SOURCE", "CONDITION", "THEN", "PROCEDURAL", "UNLOCK",
+            "HIERARCHY", "ORDINALITY", "INTO", "MICROSECONDS", "REPEAT", "MICROSECOND", "EXCEPTION", "INDICATOR", "FREE",
+            "RETURNED_OCTET_LENGTH", "NOCOMPRESS", "ASC", "DELETE", "COVAR_POP", "VARIABLE", " INDEX", "PREPARED",
+            "GENERATED", "SIMILAR", "LONG", "RESOURCE", "INT1", "INT2", "PROCEDURE", "INT3", "STDDEV_POP", "INT4", "SECONDS",
+            "COLLECT", "ANALYZE", "RUN", "UNDER", "INT8", "OPEN", "DERIVED", "NO_WRITE_TO_BINLOG", "REFERENCING", "STRING",
+            "PSID", "BREADTH", "STAY", "LOCATOR", "NOCACHE", "LOOP", "HIGH_PRIORITY", "IMMEDIATE", "DESC", "FREETEXT",
+            "NUMBER", "AUX", "OUTPUT", "LONGTEXT", "DATABASES", "BOOLEAN", "AVG", "NOT", "PLACING", "INTERSECTION", "LOWER",
+            "SPECIFIC", "MINUTE_SECOND", "FLOAT8", "HAVING", "FIELDPROC", "FLOAT4", "SQLSTATE", "RECONFIGURE", "LOCKMAX",
+            "BACKWARD", "BUFFERPOOL", "VALIDPROC", " MINUS", "COMMAND_FUNCTION", "DROP", "RETURN", "FOREIGN",
+            "PARAMETER_NAME", "TSEQUAL", "SQL_SMALL_RESULT", "RULE", "SERVER_NAME", "DAYOFMONTH", "IO_BEFORE_GTIDS",
+            "PARTIAL", "MEDIUMINT", "TRANSACTIONS_ROLLED_BACK", "OPENXML", " DROP", "ESCAPE", "SCOPE_NAME", "ISAM", "LINEAR",
+            "PARAMETER_ORDINAL_POSITION", " OFFLINE", "ROWNUM", "DATETIME_INTERVAL_CODE", "DEFINED", "LOCALTIMESTAMP",
+            " CONNECT", "ISOBID", "TABLE", "ANALYSE", "DEFINER", "SCOPE_SCHEMA", "COLLATION_CATALOG", "NONE", "PROCESSLIST",
+            "TYPE", "USER_DEFINED_TYPE_CODE", "DESCRIPTOR", "PIECESIZE", "OPTION", "WHENEVER", "ENCLOSED", "LEVEL",
+            "COUNT_BIG", "ASENSITIVE", "LOCKSIZE", "TINYBLOB", "PREPARE", "CHECK", "WITHOUT", "WORK", "HANDLER", "CUME_DIST",
+            "WRITETEXT", "INITIALIZE", "DAY_HOUR", "ILIKE", "CONNECT", "TABLESAMPLE", "INSERT_ID", "MIDDLEINT", "RELATIVE",
+            "LARGE", "ACCESSIBLE", "VALUES", "DOUBLE", "ASUTIME", "DEFAULTS", "NOLOGIN", "TIMEZONE_HOUR", "COMPUTE", "COPY",
+            "SELF", "SESSION", "NOCYCLE", "DUMMY", "WINDOW", "EXECUTE", "PRECEDING", "PACK_KEYS", "NOORDER", "CHECKPOINT",
+            " LONG", "DAY", "AUTHORIZATION", "CCSID", "COLLECTION", "BLOB", "PRIQTY", "RECURSIVE", "ONLY", "FROM",
+            "SQL_BIG_TABLES", "LATERAL", "TRANSFORM", "HOUR_MICROSECOND", "SENSITIVE", "SUBCLASS_ORIGIN", "CONVERSION",
+            "DAY_MICROSECOND", "SEPARATOR", "OPTIMIZER_COSTS", "NOSUPERUSER", "DATE", "ROLLUP", "TOP_LEVEL_COUNT", "CORR",
+            "UNENCRYPTED", "UTC_TIMESTAMP", "LIKE", "ZEROFILL", "DATA", "SUCCESSFUL", "INSERT", "YEAR_MONTH", "OFFLINE",
+            "INOUT", "VAR_SAMP", "BROWSE", "SCHEMAS", "CONSTRAINT_NAME", "PARAMETER_MODE", "LIMIT", "LINKTYPE", "NULLS",
+            "DEC", "CASCADED", "ENCRYPTED", "CONTAINSTABLE", "DYNAMIC_FUNCTION", "CONDITION_NUMBER", "BEFORE", "DB2GENERAL",
+            "DECLARE", "SUPERUSER", "WHILE"};
 
         RESERVED_WORDS = new HashSet<>(words.length);
         Collections.addAll(RESERVED_WORDS, words);

+ 1 - 0
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/SqlUtils.java

@@ -49,6 +49,7 @@ public class SqlUtils {
      * <p>
      * 获取 COUNT 原生 SQL 包装
      * </p>
+     *
      * @param originalSql
      * @return
      */

+ 791 - 791
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/StringUtils.java

@@ -36,795 +36,795 @@ import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
  */
 public class StringUtils {
 
-	/**
-	 * UTF-8 编码格式
-	 */
-	public static final String UTF8 = "UTF-8";
-
-	/**
-	 * 空字符
-	 */
-	public static final String EMPTY = "";
-	/**
-	 * 字符串 is
-	 */
-	public static final String IS = "is";
-
-	/**
-	 * 下划线字符
-	 */
-	public static final char UNDERLINE = '_';
-
-	/**
-	 * 占位符
-	 */
-	public static final String PLACE_HOLDER = "{%s}";
-
-	private static boolean separatorBeforeDigit = false;
-	private static boolean separatorAfterDigit = true;
-
-
-	private StringUtils() {
-	}
-
-
-	/**
-	 * <p>
-	 * Blob 转为 String 格式
-	 * </p>
-	 *
-	 * @param blob Blob 对象
-	 * @return
-	 */
-	public static String blob2String(Blob blob) {
-		if (null != blob) {
-			try {
-				byte[] returnValue = blob.getBytes(1, (int) blob.length());
-				return new String(returnValue, UTF8);
-			} catch (Exception e) {
-				throw new MybatisPlusException("Blob Convert To String Error!");
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * <p>
-	 * 判断字符串是否为空
-	 * </p>
-	 *
-	 * @param cs 需要判断字符串
-	 * @return 判断结果
-	 */
-	public static boolean isEmpty(final CharSequence cs) {
-		int strLen;
-		if (cs == null || (strLen = cs.length()) == 0) {
-			return true;
-		}
-		for (int i = 0; i < strLen; i++) {
-			if (!Character.isWhitespace(cs.charAt(i))) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * <p>
-	 * 判断字符串是否不为空
-	 * </p>
-	 *
-	 * @param cs 需要判断字符串
-	 * @return 判断结果
-	 */
-	public static boolean isNotEmpty(final CharSequence cs) {
-		return !isEmpty(cs);
-	}
-
-	/**
-	 * <p>
-	 * 字符串驼峰转下划线格式
-	 * </p>
-	 *
-	 * @param param 需要转换的字符串
-	 * @return 转换好的字符串
-	 */
-	public static String camelToUnderline(String param) {
-		if (isEmpty(param)) {
-			return EMPTY;
-		}
-		int len = param.length();
-		StringBuilder sb = new StringBuilder(len);
-		for (int i = 0; i < len; i++) {
-			char c = param.charAt(i);
-			if (Character.isUpperCase(c) && i > 0) {
-				sb.append(UNDERLINE);
-			}
-			sb.append(Character.toLowerCase(c));
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * <p>
-	 * 字符串下划线转驼峰格式
-	 * </p>
-	 *
-	 * @param param 需要转换的字符串
-	 * @return 转换好的字符串
-	 */
-	public static String underlineToCamel(String param) {
-		if (isEmpty(param)) {
-			return EMPTY;
-		}
-		String temp = param.toLowerCase();
-		int len = temp.length();
-		StringBuilder sb = new StringBuilder(len);
-		for (int i = 0; i < len; i++) {
-			char c = temp.charAt(i);
-			if (c == UNDERLINE) {
-				if (++i < len) {
-					sb.append(Character.toUpperCase(temp.charAt(i)));
-				}
-			} else {
-				sb.append(c);
-			}
-		}
-		return sb.toString();
-	}
-
-	/**
-	 * <p>
-	 * 首字母转换小写
-	 * </p>
-	 *
-	 * @param param 需要转换的字符串
-	 * @return 转换好的字符串
-	 */
-	public static String firstToLowerCase(String param) {
-		if (isEmpty(param)) {
-			return EMPTY;
-		}
-		StringBuilder sb = new StringBuilder(param.length());
-		sb.append(param.substring(0, 1).toLowerCase());
-		sb.append(param.substring(1));
-		return sb.toString();
-	}
-
-	/**
-	 * <p>
-	 * 判断字符串是否为纯大写字母
-	 * </p>
-	 *
-	 * @param str 要匹配的字符串
-	 * @return
-	 */
-	public static boolean isUpperCase(String str) {
-		return match("^[A-Z]+$", str);
-	}
-
-	/**
-	 * <p>
-	 * 正则表达式匹配
-	 * </p>
-	 *
-	 * @param regex 正则表达式字符串
-	 * @param str   要匹配的字符串
-	 * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
-	 */
-	public static boolean match(String regex, String str) {
-		Pattern pattern = Pattern.compile(regex);
-		Matcher matcher = pattern.matcher(str);
-		return matcher.matches();
-	}
-
-	/**
-	 * <p>
-	 * SQL 参数填充
-	 * </p>
-	 *
-	 * @param content 填充内容
-	 * @param args    填充参数
-	 * @return
-	 */
-	public static String sqlArgsFill(String content, Object... args) {
-		if (StringUtils.isEmpty(content)) {
-			return null;
-		}
-		if (args != null) {
-			int length = args.length;
-			if (length >= 1) {
-				for (int i = 0; i < length; i++) {
-					content = content.replace(String.format(PLACE_HOLDER, i), sqlParam(args[i]));
-				}
-			}
-		}
-		return content;
-	}
-
-	/**
-	 * <p>
-	 * 获取SQL PARAMS字符串
-	 * </p>
-	 *
-	 * @param obj
-	 * @return
-	 */
-	public static String sqlParam(Object obj) {
-		String repStr;
-		if (obj instanceof Collection) {
-			repStr = StringUtils.quotaMarkList((Collection<?>) obj);
-		} else {
-			repStr = StringUtils.quotaMark(obj);
-		}
-		return repStr;
-	}
-
-	/**
-	 * <p>
-	 * 使用单引号包含字符串
-	 * </p>
-	 *
-	 * @param obj 原字符串
-	 * @return 单引号包含的原字符串
-	 */
-	public static String quotaMark(Object obj) {
-		String srcStr = String.valueOf(obj);
-		if (obj instanceof CharSequence) {
-			// fix #79
-			return StringEscape.escapeString(srcStr);
-		}
-		return srcStr;
-	}
-
-	/**
-	 * <p>
-	 * 使用单引号包含字符串
-	 * </p>
-	 *
-	 * @param coll 集合
-	 * @return 单引号包含的原字符串的集合形式
-	 */
-	public static String quotaMarkList(Collection<?> coll) {
-		StringBuilder sqlBuild = new StringBuilder();
-		sqlBuild.append("(");
-		int size = coll.size();
-		int i = 0;
-		Iterator<?> iterator = coll.iterator();
-		while (iterator.hasNext()) {
-			String tempVal = StringUtils.quotaMark(iterator.next());
-			sqlBuild.append(tempVal);
-			if (i + 1 < size) {
-				sqlBuild.append(",");
-			}
-			i++;
-		}
-		sqlBuild.append(")");
-		return sqlBuild.toString();
-	}
-
-	/**
-	 * <p>
-	 * 拼接字符串第二个字符串第一个字母大写
-	 * </p>
-	 *
-	 * @param concatStr
-	 * @param str
-	 * @return
-	 */
-	public static String concatCapitalize(String concatStr, final String str) {
-		if (isEmpty(concatStr)) {
-			concatStr = EMPTY;
-		}
-		int strLen;
-		if (str == null || (strLen = str.length()) == 0) {
-			return str;
-		}
-
-		final char firstChar = str.charAt(0);
-		if (Character.isTitleCase(firstChar)) {
-			// already capitalized
-			return str;
-		}
-
-		StringBuilder sb = new StringBuilder(strLen);
-		sb.append(concatStr);
-		sb.append(Character.toTitleCase(firstChar));
-		sb.append(str.substring(1));
-		return sb.toString();
-	}
-
-	/**
-	 * <p>
-	 * 字符串第一个字母大写
-	 * </p>
-	 *
-	 * @param str
-	 * @return
-	 */
-	public static String capitalize(final String str) {
-		return concatCapitalize(null, str);
-	}
-
-	/**
-	 * <p>
-	 * 判断对象是否为空
-	 * </p>
-	 *
-	 * @param object
-	 * @return
-	 */
-	public static boolean checkValNotNull(Object object) {
-		if (object instanceof CharSequence) {
-			return isNotEmpty((CharSequence) object);
-		}
-		return object != null;
-	}
-
-	/**
-	 * <p>
-	 * 判断对象是否为空
-	 * </p>
-	 *
-	 * @param object
-	 * @return
-	 */
-	public static boolean checkValNull(Object object) {
-		return !checkValNotNull(object);
-	}
-
-	/**
-	 * <p>
-	 * 包含大写字母
-	 * </p>
-	 *
-	 * @param word 待判断字符串
-	 * @return
-	 */
-	public static boolean containsUpperCase(String word) {
-		for (int i = 0; i < word.length(); i++) {
-			char c = word.charAt(i);
-			if (Character.isUpperCase(c)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * <p>
-	 * 是否为大写命名
-	 * </p>
-	 *
-	 * @param word 待判断字符串
-	 * @return
-	 */
-	public static boolean isCapitalMode(String word) {
-		return null != word && word.matches("^[0-9A-Z/_]+$");
-	}
-
-	/**
-	 * <p>
-	 * 是否为驼峰下划线混合命名
-	 * </p>
-	 *
-	 * @param word 待判断字符串
-	 * @return
-	 */
-	public static boolean isMixedMode(String word) {
-		return Pattern.compile(".*[A-Z]+.*").matcher(word).matches() && Pattern.compile(".*[/_]+.*").matcher(word).matches();
-	}
-
-	/**
-	 * <p>
-	 * Check if a String ends with a specified suffix.
-	 * </p>
-	 * <p>
-	 * <p>
-	 * <code>null</code>s are handled without exceptions. Two <code>null</code>
-	 * references are considered to be equal. The comparison is case sensitive.
-	 * </p>
-	 * <p>
-	 * <pre>
-	 * StringUtils.endsWith(null, null)      = true
-	 * StringUtils.endsWith(null, "abcdef")  = false
-	 * StringUtils.endsWith("def", null)     = false
-	 * StringUtils.endsWith("def", "abcdef") = true
-	 * StringUtils.endsWith("def", "ABCDEF") = false
-	 * </pre>
-	 *
-	 * @param str    the String to check, may be null
-	 * @param suffix the suffix to find, may be null
-	 * @return <code>true</code> if the String ends with the suffix, case
-	 * sensitive, or both <code>null</code>
-	 * @see java.lang.String#endsWith(String)
-	 * @since 2.4
-	 */
-	public static boolean endsWith(String str, String suffix) {
-		return endsWith(str, suffix, false);
-	}
-
-	/**
-	 * <p>
-	 * Case insensitive check if a String ends with a specified suffix.
-	 * </p>
-	 * <p>
-	 * <p>
-	 * <code>null</code>s are handled without exceptions. Two <code>null</code>
-	 * references are considered to be equal. The comparison is case
-	 * insensitive.
-	 * </p>
-	 * <p>
-	 * <pre>
-	 * StringUtils.endsWithIgnoreCase(null, null)      = true
-	 * StringUtils.endsWithIgnoreCase(null, "abcdef")  = false
-	 * StringUtils.endsWithIgnoreCase("def", null)     = false
-	 * StringUtils.endsWithIgnoreCase("def", "abcdef") = true
-	 * StringUtils.endsWithIgnoreCase("def", "ABCDEF") = false
-	 * </pre>
-	 *
-	 * @param str    the String to check, may be null
-	 * @param suffix the suffix to find, may be null
-	 * @return <code>true</code> if the String ends with the suffix, case
-	 * insensitive, or both <code>null</code>
-	 * @see java.lang.String#endsWith(String)
-	 * @since 2.4
-	 */
-	public static boolean endsWithIgnoreCase(String str, String suffix) {
-		return endsWith(str, suffix, true);
-	}
-
-	/**
-	 * <p>
-	 * Check if a String ends with a specified suffix (optionally case
-	 * insensitive).
-	 * </p>
-	 *
-	 * @param str        the String to check, may be null
-	 * @param suffix     the suffix to find, may be null
-	 * @param ignoreCase inidicates whether the compare should ignore case (case
-	 *                   insensitive) or not.
-	 * @return <code>true</code> if the String starts with the prefix or both
-	 * <code>null</code>
-	 * @see java.lang.String#endsWith(String)
-	 */
-	private static boolean endsWith(String str, String suffix, boolean ignoreCase) {
-		if (str == null || suffix == null) {
-			return (str == null && suffix == null);
-		}
-		if (suffix.length() > str.length()) {
-			return false;
-		}
-		int strOffset = str.length() - suffix.length();
-		return str.regionMatches(ignoreCase, strOffset, suffix, 0, suffix.length());
-	}
-
-	/**
-	 * <p>
-	 * Splits the provided text into an array, separators specified. This is an
-	 * alternative to using StringTokenizer.
-	 * </p>
-	 * <p>
-	 * <p>
-	 * The separator is not included in the returned String array. Adjacent
-	 * separators are treated as one separator. For more control over the split
-	 * use the StrTokenizer class.
-	 * </p>
-	 * <p>
-	 * <p>
-	 * A {@code null} input String returns {@code null}. A {@code null}
-	 * separatorChars splits on whitespace.
-	 * </p>
-	 * <p>
-	 * <pre>
-	 * StringUtils.split(null, *)         = null
-	 * StringUtils.split("", *)           = []
-	 * StringUtils.split("abc def", null) = ["abc", "def"]
-	 * StringUtils.split("abc def", " ")  = ["abc", "def"]
-	 * StringUtils.split("abc  def", " ") = ["abc", "def"]
-	 * StringUtils.split("ab:cd:ef", ":") = ["ab", "cd", "ef"]
-	 * </pre>
-	 *
-	 * @param str            the String to parse, may be null
-	 * @param separatorChars the characters used as the delimiters, {@code null} splits on
-	 *                       whitespace
-	 * @return an array of parsed Strings, {@code null} if null String input
-	 */
-	public static String[] split(final String str, final String separatorChars) {
-		List<String> strings = splitWorker(str, separatorChars, -1, false);
-		return strings.toArray(new String[strings.size()]);
-	}
-
-	/**
-	 * Performs the logic for the {@code split} and
-	 * {@code splitPreserveAllTokens} methods that return a maximum array
-	 * length.
-	 *
-	 * @param str               the String to parse, may be {@code null}
-	 * @param separatorChars    the separate character
-	 * @param max               the maximum number of elements to include in the array. A zero
-	 *                          or negative value implies no limit.
-	 * @param preserveAllTokens if {@code true}, adjacent separators are treated as empty
-	 *                          token separators; if {@code false}, adjacent separators are
-	 *                          treated as one separator.
-	 * @return an array of parsed Strings, {@code null} if null String input
-	 */
-	public static List<String> splitWorker(final String str, final String separatorChars, final int max,
-										   final boolean preserveAllTokens) {
-		// Performance tuned for 2.0 (JDK1.4)
-		// Direct code is quicker than StringTokenizer.
-		// Also, StringTokenizer uses isSpace() not isWhitespace()
-
-		if (str == null) {
-			return null;
-		}
-		final int len = str.length();
-		if (len == 0) {
-			return Collections.emptyList();
-		}
-		final List<String> list = new ArrayList<>();
-		int sizePlus1 = 1;
-		int i = 0, start = 0;
-		boolean match = false;
-		boolean lastMatch = false;
-		if (separatorChars == null) {
-			// Null separator means use whitespace
-			while (i < len) {
-				if (Character.isWhitespace(str.charAt(i))) {
-					if (match || preserveAllTokens) {
-						lastMatch = true;
-						if (sizePlus1++ == max) {
-							i = len;
-							lastMatch = false;
-						}
-						list.add(str.substring(start, i));
-						match = false;
-					}
-					start = ++i;
-					continue;
-				}
-				lastMatch = false;
-				match = true;
-				i++;
-			}
-		} else if (separatorChars.length() == 1) {
-			// Optimise 1 character case
-			final char sep = separatorChars.charAt(0);
-			while (i < len) {
-				if (str.charAt(i) == sep) {
-					if (match || preserveAllTokens) {
-						lastMatch = true;
-						if (sizePlus1++ == max) {
-							i = len;
-							lastMatch = false;
-						}
-						list.add(str.substring(start, i));
-						match = false;
-					}
-					start = ++i;
-					continue;
-				}
-				lastMatch = false;
-				match = true;
-				i++;
-			}
-		} else {
-			// standard case
-			while (i < len) {
-				if (separatorChars.indexOf(str.charAt(i)) >= 0) {
-					if (match || preserveAllTokens) {
-						lastMatch = true;
-						if (sizePlus1++ == max) {
-							i = len;
-							lastMatch = false;
-						}
-						list.add(str.substring(start, i));
-						match = false;
-					}
-					start = ++i;
-					continue;
-				}
-				lastMatch = false;
-				match = true;
-				i++;
-			}
-		}
-		if (match || preserveAllTokens && lastMatch) {
-			list.add(str.substring(start, i));
-		}
-		return list;
-	}
-
-	/**
-	 * <p>
-	 * 是否为CharSequence类型
-	 * </p>
-	 *
-	 * @param cls
-	 * @return
-	 */
-	public static Boolean isCharSequence(Class<?> cls) {
-		return cls != null && CharSequence.class.isAssignableFrom(cls);
-	}
-
-	/**
-	 * <p>
-	 * 去除boolean类型is开头的字符串
-	 * </p>
-	 *
-	 * @param propertyName 字段名
-	 * @param propertyType 字段类型
-	 * @return
-	 */
-	public static String removeIsPrefixIfBoolean(String propertyName, Class<?> propertyType) {
-		if (isBoolean(propertyType) && propertyName.startsWith(IS)) {
-			String property = propertyName.replaceFirst(IS, EMPTY);
-			if (isEmpty(property)) {
-				return propertyName;
-			} else {
-				String firstCharToLowerStr = firstCharToLower(property);
-				return property.equals(firstCharToLowerStr) ? propertyName : firstCharToLowerStr;
-			}
-		}
-		return propertyName;
-	}
-
-	/**
-	 * <p>
-	 * 是否为CharSequence类型
-	 * </p>
-	 *
-	 * @param propertyType
-	 * @return
-	 */
-	public static Boolean isCharSequence(String propertyType) {
-		try {
-			return isCharSequence(Class.forName(propertyType));
-		} catch (ClassNotFoundException e) {
-			return false;
-		}
-	}
-
-	/**
-	 * <p>
-	 * 是否为Boolean类型(包含普通类型)
-	 * </p>
-	 *
-	 * @param propertyCls
-	 * @return
-	 */
-	public static Boolean isBoolean(Class<?> propertyCls) {
-		return propertyCls != null && (boolean.class.isAssignableFrom(propertyCls) || Boolean.class.isAssignableFrom(propertyCls));
-	}
-
-	/**
-	 * <p>
-	 * 第一个首字母小写,之后字符大小写的不变<br>
-	 * StringUtils.firstCharToLower( "UserService" )     = userService
-	 * StringUtils.firstCharToLower( "UserServiceImpl" ) = userServiceImpl
-	 * </p>
-	 *
-	 * @param rawString 需要处理的字符串
-	 * @return
-	 */
-	public static String firstCharToLower(String rawString) {
-		return prefixToLower(rawString, 1);
-	}
-
-	/**
-	 * <p>
-	 * 前n个首字母小写,之后字符大小写的不变
-	 * </p>
-	 *
-	 * @param rawString 需要处理的字符串
-	 * @param index     多少个字符(从左至右)
-	 * @return
-	 */
-	public static String prefixToLower(String rawString, int index) {
-		String beforeChar = rawString.substring(0, index).toLowerCase();
-		String afterChar = rawString.substring(index, rawString.length());
-		return beforeChar + afterChar;
-	}
-
-	/**
-	 * <p>
-	 * 删除字符前缀之后,首字母小写,之后字符大小写的不变<br>
-	 * StringUtils.removePrefixAfterPrefixToLower( "isUser", 2 )     = user
-	 * StringUtils.removePrefixAfterPrefixToLower( "isUserInfo", 2 ) = userInfo
-	 * </p>
-	 *
-	 * @param rawString 需要处理的字符串
-	 * @param index     删除多少个字符(从左至右)
-	 * @return
-	 */
-	public static String removePrefixAfterPrefixToLower(String rawString, int index) {
-		return prefixToLower(rawString.substring(index, rawString.length()), 1);
-	}
-
-	/**
-	 * <p>
-	 * 驼峰转连字符<br>
-	 * StringUtils.camelToHyphen( "managerAdminUserService" ) = manager-admin-user-service
-	 * </p>
-	 *
-	 * @param input
-	 * @return 以'-'分隔
-	 * @see <a href="https://github.com/krasa/StringManipulation">document</a>
-	 */
-	public static String camelToHyphen(String input) {
-		return wordsToHyphenCase(wordsAndHyphenAndCamelToConstantCase(input));
-	}
-
-	private static String wordsAndHyphenAndCamelToConstantCase(String input) {
-		boolean betweenUpperCases = false;
-		boolean containsLowerCase = containsLowerCase(input);
-
-		StringBuilder buf = new StringBuilder();
-		char previousChar = ' ';
-		char[] chars = input.toCharArray();
-		for (int i = 0; i < chars.length; i++) {
-			char c = chars[i];
-			boolean isUpperCaseAndPreviousIsUpperCase = (Character.isUpperCase(previousChar)) && (Character.isUpperCase(c));
-			boolean isUpperCaseAndPreviousIsLowerCase = (Character.isLowerCase(previousChar)) && (Character.isUpperCase(c));
-
-			boolean previousIsWhitespace = Character.isWhitespace(previousChar);
-			boolean lastOneIsNotUnderscore = (buf.length() > 0) && (buf.charAt(buf.length() - 1) != '_');
-			boolean isNotUnderscore = c != '_';
-			if ((lastOneIsNotUnderscore) && ((isUpperCaseAndPreviousIsLowerCase) || (previousIsWhitespace) || ((betweenUpperCases)
-					&& (containsLowerCase) && (isUpperCaseAndPreviousIsUpperCase)))) {
-				buf.append("_");
-			} else if (((separatorAfterDigit) && (Character.isDigit(previousChar))
-					&& (Character.isLetter(c))) || ((separatorBeforeDigit) && (Character
-					.isDigit(c)) && (Character.isLetter(previousChar)))) {
-				buf.append('_');
-			}
-			if ((shouldReplace(c)) && (lastOneIsNotUnderscore)) {
-				buf.append('_');
-			} else if ((!Character.isWhitespace(c)) && ((isNotUnderscore) || (lastOneIsNotUnderscore))) {
-				buf.append(Character.toUpperCase(c));
-			}
-			previousChar = c;
-		}
-		if (Character.isWhitespace(previousChar)) {
-			buf.append("_");
-		}
-		return buf.toString();
-	}
-
-	public static boolean containsLowerCase(String s) {
-		for (char c : s.toCharArray()) {
-			if (Character.isLowerCase(c)) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private static boolean shouldReplace(char c) {
-		return (c == '.') || (c == '_') || (c == '-');
-	}
-
-	private static String wordsToHyphenCase(String s) {
-		StringBuilder buf = new StringBuilder();
-		char lastChar = 'a';
-		for (char c : s.toCharArray()) {
-			if ((Character.isWhitespace(lastChar)) && (!Character.isWhitespace(c))
-					&& ('-' != c) && (buf.length() > 0)
-					&& (buf.charAt(buf.length() - 1) != '-')) {
-				buf.append("-");
-			}
-			if ('_' == c) {
-				buf.append('-');
-			} else if ('.' == c) {
-				buf.append('-');
-			} else if (!Character.isWhitespace(c)) {
-				buf.append(Character.toLowerCase(c));
-			}
-			lastChar = c;
-		}
-		if (Character.isWhitespace(lastChar)) {
-			buf.append("-");
-		}
-		return buf.toString();
-	}
+    /**
+     * UTF-8 编码格式
+     */
+    public static final String UTF8 = "UTF-8";
+
+    /**
+     * 空字符
+     */
+    public static final String EMPTY = "";
+    /**
+     * 字符串 is
+     */
+    public static final String IS = "is";
+
+    /**
+     * 下划线字符
+     */
+    public static final char UNDERLINE = '_';
+
+    /**
+     * 占位符
+     */
+    public static final String PLACE_HOLDER = "{%s}";
+
+    private static boolean separatorBeforeDigit = false;
+    private static boolean separatorAfterDigit = true;
+
+
+    private StringUtils() {
+    }
+
+
+    /**
+     * <p>
+     * Blob 转为 String 格式
+     * </p>
+     *
+     * @param blob Blob 对象
+     * @return
+     */
+    public static String blob2String(Blob blob) {
+        if (null != blob) {
+            try {
+                byte[] returnValue = blob.getBytes(1, (int) blob.length());
+                return new String(returnValue, UTF8);
+            } catch (Exception e) {
+                throw new MybatisPlusException("Blob Convert To String Error!");
+            }
+        }
+        return null;
+    }
+
+    /**
+     * <p>
+     * 判断字符串是否为空
+     * </p>
+     *
+     * @param cs 需要判断字符串
+     * @return 判断结果
+     */
+    public static boolean isEmpty(final CharSequence cs) {
+        int strLen;
+        if (cs == null || (strLen = cs.length()) == 0) {
+            return true;
+        }
+        for (int i = 0; i < strLen; i++) {
+            if (!Character.isWhitespace(cs.charAt(i))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * <p>
+     * 判断字符串是否不为空
+     * </p>
+     *
+     * @param cs 需要判断字符串
+     * @return 判断结果
+     */
+    public static boolean isNotEmpty(final CharSequence cs) {
+        return !isEmpty(cs);
+    }
+
+    /**
+     * <p>
+     * 字符串驼峰转下划线格式
+     * </p>
+     *
+     * @param param 需要转换的字符串
+     * @return 转换好的字符串
+     */
+    public static String camelToUnderline(String param) {
+        if (isEmpty(param)) {
+            return EMPTY;
+        }
+        int len = param.length();
+        StringBuilder sb = new StringBuilder(len);
+        for (int i = 0; i < len; i++) {
+            char c = param.charAt(i);
+            if (Character.isUpperCase(c) && i > 0) {
+                sb.append(UNDERLINE);
+            }
+            sb.append(Character.toLowerCase(c));
+        }
+        return sb.toString();
+    }
+
+    /**
+     * <p>
+     * 字符串下划线转驼峰格式
+     * </p>
+     *
+     * @param param 需要转换的字符串
+     * @return 转换好的字符串
+     */
+    public static String underlineToCamel(String param) {
+        if (isEmpty(param)) {
+            return EMPTY;
+        }
+        String temp = param.toLowerCase();
+        int len = temp.length();
+        StringBuilder sb = new StringBuilder(len);
+        for (int i = 0; i < len; i++) {
+            char c = temp.charAt(i);
+            if (c == UNDERLINE) {
+                if (++i < len) {
+                    sb.append(Character.toUpperCase(temp.charAt(i)));
+                }
+            } else {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * <p>
+     * 首字母转换小写
+     * </p>
+     *
+     * @param param 需要转换的字符串
+     * @return 转换好的字符串
+     */
+    public static String firstToLowerCase(String param) {
+        if (isEmpty(param)) {
+            return EMPTY;
+        }
+        StringBuilder sb = new StringBuilder(param.length());
+        sb.append(param.substring(0, 1).toLowerCase());
+        sb.append(param.substring(1));
+        return sb.toString();
+    }
+
+    /**
+     * <p>
+     * 判断字符串是否为纯大写字母
+     * </p>
+     *
+     * @param str 要匹配的字符串
+     * @return
+     */
+    public static boolean isUpperCase(String str) {
+        return match("^[A-Z]+$", str);
+    }
+
+    /**
+     * <p>
+     * 正则表达式匹配
+     * </p>
+     *
+     * @param regex 正则表达式字符串
+     * @param str   要匹配的字符串
+     * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
+     */
+    public static boolean match(String regex, String str) {
+        Pattern pattern = Pattern.compile(regex);
+        Matcher matcher = pattern.matcher(str);
+        return matcher.matches();
+    }
+
+    /**
+     * <p>
+     * SQL 参数填充
+     * </p>
+     *
+     * @param content 填充内容
+     * @param args    填充参数
+     * @return
+     */
+    public static String sqlArgsFill(String content, Object... args) {
+        if (StringUtils.isEmpty(content)) {
+            return null;
+        }
+        if (args != null) {
+            int length = args.length;
+            if (length >= 1) {
+                for (int i = 0; i < length; i++) {
+                    content = content.replace(String.format(PLACE_HOLDER, i), sqlParam(args[i]));
+                }
+            }
+        }
+        return content;
+    }
+
+    /**
+     * <p>
+     * 获取SQL PARAMS字符串
+     * </p>
+     *
+     * @param obj
+     * @return
+     */
+    public static String sqlParam(Object obj) {
+        String repStr;
+        if (obj instanceof Collection) {
+            repStr = StringUtils.quotaMarkList((Collection<?>) obj);
+        } else {
+            repStr = StringUtils.quotaMark(obj);
+        }
+        return repStr;
+    }
+
+    /**
+     * <p>
+     * 使用单引号包含字符串
+     * </p>
+     *
+     * @param obj 原字符串
+     * @return 单引号包含的原字符串
+     */
+    public static String quotaMark(Object obj) {
+        String srcStr = String.valueOf(obj);
+        if (obj instanceof CharSequence) {
+            // fix #79
+            return StringEscape.escapeString(srcStr);
+        }
+        return srcStr;
+    }
+
+    /**
+     * <p>
+     * 使用单引号包含字符串
+     * </p>
+     *
+     * @param coll 集合
+     * @return 单引号包含的原字符串的集合形式
+     */
+    public static String quotaMarkList(Collection<?> coll) {
+        StringBuilder sqlBuild = new StringBuilder();
+        sqlBuild.append("(");
+        int size = coll.size();
+        int i = 0;
+        Iterator<?> iterator = coll.iterator();
+        while (iterator.hasNext()) {
+            String tempVal = StringUtils.quotaMark(iterator.next());
+            sqlBuild.append(tempVal);
+            if (i + 1 < size) {
+                sqlBuild.append(",");
+            }
+            i++;
+        }
+        sqlBuild.append(")");
+        return sqlBuild.toString();
+    }
+
+    /**
+     * <p>
+     * 拼接字符串第二个字符串第一个字母大写
+     * </p>
+     *
+     * @param concatStr
+     * @param str
+     * @return
+     */
+    public static String concatCapitalize(String concatStr, final String str) {
+        if (isEmpty(concatStr)) {
+            concatStr = EMPTY;
+        }
+        int strLen;
+        if (str == null || (strLen = str.length()) == 0) {
+            return str;
+        }
+
+        final char firstChar = str.charAt(0);
+        if (Character.isTitleCase(firstChar)) {
+            // already capitalized
+            return str;
+        }
+
+        StringBuilder sb = new StringBuilder(strLen);
+        sb.append(concatStr);
+        sb.append(Character.toTitleCase(firstChar));
+        sb.append(str.substring(1));
+        return sb.toString();
+    }
+
+    /**
+     * <p>
+     * 字符串第一个字母大写
+     * </p>
+     *
+     * @param str
+     * @return
+     */
+    public static String capitalize(final String str) {
+        return concatCapitalize(null, str);
+    }
+
+    /**
+     * <p>
+     * 判断对象是否为空
+     * </p>
+     *
+     * @param object
+     * @return
+     */
+    public static boolean checkValNotNull(Object object) {
+        if (object instanceof CharSequence) {
+            return isNotEmpty((CharSequence) object);
+        }
+        return object != null;
+    }
+
+    /**
+     * <p>
+     * 判断对象是否为空
+     * </p>
+     *
+     * @param object
+     * @return
+     */
+    public static boolean checkValNull(Object object) {
+        return !checkValNotNull(object);
+    }
+
+    /**
+     * <p>
+     * 包含大写字母
+     * </p>
+     *
+     * @param word 待判断字符串
+     * @return
+     */
+    public static boolean containsUpperCase(String word) {
+        for (int i = 0; i < word.length(); i++) {
+            char c = word.charAt(i);
+            if (Character.isUpperCase(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * <p>
+     * 是否为大写命名
+     * </p>
+     *
+     * @param word 待判断字符串
+     * @return
+     */
+    public static boolean isCapitalMode(String word) {
+        return null != word && word.matches("^[0-9A-Z/_]+$");
+    }
+
+    /**
+     * <p>
+     * 是否为驼峰下划线混合命名
+     * </p>
+     *
+     * @param word 待判断字符串
+     * @return
+     */
+    public static boolean isMixedMode(String word) {
+        return Pattern.compile(".*[A-Z]+.*").matcher(word).matches() && Pattern.compile(".*[/_]+.*").matcher(word).matches();
+    }
+
+    /**
+     * <p>
+     * Check if a String ends with a specified suffix.
+     * </p>
+     * <p>
+     * <p>
+     * <code>null</code>s are handled without exceptions. Two <code>null</code>
+     * references are considered to be equal. The comparison is case sensitive.
+     * </p>
+     * <p>
+     * <pre>
+     * StringUtils.endsWith(null, null)      = true
+     * StringUtils.endsWith(null, "abcdef")  = false
+     * StringUtils.endsWith("def", null)     = false
+     * StringUtils.endsWith("def", "abcdef") = true
+     * StringUtils.endsWith("def", "ABCDEF") = false
+     * </pre>
+     *
+     * @param str    the String to check, may be null
+     * @param suffix the suffix to find, may be null
+     * @return <code>true</code> if the String ends with the suffix, case
+     * sensitive, or both <code>null</code>
+     * @see java.lang.String#endsWith(String)
+     * @since 2.4
+     */
+    public static boolean endsWith(String str, String suffix) {
+        return endsWith(str, suffix, false);
+    }
+
+    /**
+     * <p>
+     * Case insensitive check if a String ends with a specified suffix.
+     * </p>
+     * <p>
+     * <p>
+     * <code>null</code>s are handled without exceptions. Two <code>null</code>
+     * references are considered to be equal. The comparison is case
+     * insensitive.
+     * </p>
+     * <p>
+     * <pre>
+     * StringUtils.endsWithIgnoreCase(null, null)      = true
+     * StringUtils.endsWithIgnoreCase(null, "abcdef")  = false
+     * StringUtils.endsWithIgnoreCase("def", null)     = false
+     * StringUtils.endsWithIgnoreCase("def", "abcdef") = true
+     * StringUtils.endsWithIgnoreCase("def", "ABCDEF") = false
+     * </pre>
+     *
+     * @param str    the String to check, may be null
+     * @param suffix the suffix to find, may be null
+     * @return <code>true</code> if the String ends with the suffix, case
+     * insensitive, or both <code>null</code>
+     * @see java.lang.String#endsWith(String)
+     * @since 2.4
+     */
+    public static boolean endsWithIgnoreCase(String str, String suffix) {
+        return endsWith(str, suffix, true);
+    }
+
+    /**
+     * <p>
+     * Check if a String ends with a specified suffix (optionally case
+     * insensitive).
+     * </p>
+     *
+     * @param str        the String to check, may be null
+     * @param suffix     the suffix to find, may be null
+     * @param ignoreCase inidicates whether the compare should ignore case (case
+     *                   insensitive) or not.
+     * @return <code>true</code> if the String starts with the prefix or both
+     * <code>null</code>
+     * @see java.lang.String#endsWith(String)
+     */
+    private static boolean endsWith(String str, String suffix, boolean ignoreCase) {
+        if (str == null || suffix == null) {
+            return (str == null && suffix == null);
+        }
+        if (suffix.length() > str.length()) {
+            return false;
+        }
+        int strOffset = str.length() - suffix.length();
+        return str.regionMatches(ignoreCase, strOffset, suffix, 0, suffix.length());
+    }
+
+    /**
+     * <p>
+     * Splits the provided text into an array, separators specified. This is an
+     * alternative to using StringTokenizer.
+     * </p>
+     * <p>
+     * <p>
+     * The separator is not included in the returned String array. Adjacent
+     * separators are treated as one separator. For more control over the split
+     * use the StrTokenizer class.
+     * </p>
+     * <p>
+     * <p>
+     * A {@code null} input String returns {@code null}. A {@code null}
+     * separatorChars splits on whitespace.
+     * </p>
+     * <p>
+     * <pre>
+     * StringUtils.split(null, *)         = null
+     * StringUtils.split("", *)           = []
+     * StringUtils.split("abc def", null) = ["abc", "def"]
+     * StringUtils.split("abc def", " ")  = ["abc", "def"]
+     * StringUtils.split("abc  def", " ") = ["abc", "def"]
+     * StringUtils.split("ab:cd:ef", ":") = ["ab", "cd", "ef"]
+     * </pre>
+     *
+     * @param str            the String to parse, may be null
+     * @param separatorChars the characters used as the delimiters, {@code null} splits on
+     *                       whitespace
+     * @return an array of parsed Strings, {@code null} if null String input
+     */
+    public static String[] split(final String str, final String separatorChars) {
+        List<String> strings = splitWorker(str, separatorChars, -1, false);
+        return strings.toArray(new String[strings.size()]);
+    }
+
+    /**
+     * Performs the logic for the {@code split} and
+     * {@code splitPreserveAllTokens} methods that return a maximum array
+     * length.
+     *
+     * @param str               the String to parse, may be {@code null}
+     * @param separatorChars    the separate character
+     * @param max               the maximum number of elements to include in the array. A zero
+     *                          or negative value implies no limit.
+     * @param preserveAllTokens if {@code true}, adjacent separators are treated as empty
+     *                          token separators; if {@code false}, adjacent separators are
+     *                          treated as one separator.
+     * @return an array of parsed Strings, {@code null} if null String input
+     */
+    public static List<String> splitWorker(final String str, final String separatorChars, final int max,
+                                           final boolean preserveAllTokens) {
+        // Performance tuned for 2.0 (JDK1.4)
+        // Direct code is quicker than StringTokenizer.
+        // Also, StringTokenizer uses isSpace() not isWhitespace()
+
+        if (str == null) {
+            return null;
+        }
+        final int len = str.length();
+        if (len == 0) {
+            return Collections.emptyList();
+        }
+        final List<String> list = new ArrayList<>();
+        int sizePlus1 = 1;
+        int i = 0, start = 0;
+        boolean match = false;
+        boolean lastMatch = false;
+        if (separatorChars == null) {
+            // Null separator means use whitespace
+            while (i < len) {
+                if (Character.isWhitespace(str.charAt(i))) {
+                    if (match || preserveAllTokens) {
+                        lastMatch = true;
+                        if (sizePlus1++ == max) {
+                            i = len;
+                            lastMatch = false;
+                        }
+                        list.add(str.substring(start, i));
+                        match = false;
+                    }
+                    start = ++i;
+                    continue;
+                }
+                lastMatch = false;
+                match = true;
+                i++;
+            }
+        } else if (separatorChars.length() == 1) {
+            // Optimise 1 character case
+            final char sep = separatorChars.charAt(0);
+            while (i < len) {
+                if (str.charAt(i) == sep) {
+                    if (match || preserveAllTokens) {
+                        lastMatch = true;
+                        if (sizePlus1++ == max) {
+                            i = len;
+                            lastMatch = false;
+                        }
+                        list.add(str.substring(start, i));
+                        match = false;
+                    }
+                    start = ++i;
+                    continue;
+                }
+                lastMatch = false;
+                match = true;
+                i++;
+            }
+        } else {
+            // standard case
+            while (i < len) {
+                if (separatorChars.indexOf(str.charAt(i)) >= 0) {
+                    if (match || preserveAllTokens) {
+                        lastMatch = true;
+                        if (sizePlus1++ == max) {
+                            i = len;
+                            lastMatch = false;
+                        }
+                        list.add(str.substring(start, i));
+                        match = false;
+                    }
+                    start = ++i;
+                    continue;
+                }
+                lastMatch = false;
+                match = true;
+                i++;
+            }
+        }
+        if (match || preserveAllTokens && lastMatch) {
+            list.add(str.substring(start, i));
+        }
+        return list;
+    }
+
+    /**
+     * <p>
+     * 是否为CharSequence类型
+     * </p>
+     *
+     * @param cls
+     * @return
+     */
+    public static Boolean isCharSequence(Class<?> cls) {
+        return cls != null && CharSequence.class.isAssignableFrom(cls);
+    }
+
+    /**
+     * <p>
+     * 去除boolean类型is开头的字符串
+     * </p>
+     *
+     * @param propertyName 字段名
+     * @param propertyType 字段类型
+     * @return
+     */
+    public static String removeIsPrefixIfBoolean(String propertyName, Class<?> propertyType) {
+        if (isBoolean(propertyType) && propertyName.startsWith(IS)) {
+            String property = propertyName.replaceFirst(IS, EMPTY);
+            if (isEmpty(property)) {
+                return propertyName;
+            } else {
+                String firstCharToLowerStr = firstCharToLower(property);
+                return property.equals(firstCharToLowerStr) ? propertyName : firstCharToLowerStr;
+            }
+        }
+        return propertyName;
+    }
+
+    /**
+     * <p>
+     * 是否为CharSequence类型
+     * </p>
+     *
+     * @param propertyType
+     * @return
+     */
+    public static Boolean isCharSequence(String propertyType) {
+        try {
+            return isCharSequence(Class.forName(propertyType));
+        } catch (ClassNotFoundException e) {
+            return false;
+        }
+    }
+
+    /**
+     * <p>
+     * 是否为Boolean类型(包含普通类型)
+     * </p>
+     *
+     * @param propertyCls
+     * @return
+     */
+    public static Boolean isBoolean(Class<?> propertyCls) {
+        return propertyCls != null && (boolean.class.isAssignableFrom(propertyCls) || Boolean.class.isAssignableFrom(propertyCls));
+    }
+
+    /**
+     * <p>
+     * 第一个首字母小写,之后字符大小写的不变<br>
+     * StringUtils.firstCharToLower( "UserService" )     = userService
+     * StringUtils.firstCharToLower( "UserServiceImpl" ) = userServiceImpl
+     * </p>
+     *
+     * @param rawString 需要处理的字符串
+     * @return
+     */
+    public static String firstCharToLower(String rawString) {
+        return prefixToLower(rawString, 1);
+    }
+
+    /**
+     * <p>
+     * 前n个首字母小写,之后字符大小写的不变
+     * </p>
+     *
+     * @param rawString 需要处理的字符串
+     * @param index     多少个字符(从左至右)
+     * @return
+     */
+    public static String prefixToLower(String rawString, int index) {
+        String beforeChar = rawString.substring(0, index).toLowerCase();
+        String afterChar = rawString.substring(index, rawString.length());
+        return beforeChar + afterChar;
+    }
+
+    /**
+     * <p>
+     * 删除字符前缀之后,首字母小写,之后字符大小写的不变<br>
+     * StringUtils.removePrefixAfterPrefixToLower( "isUser", 2 )     = user
+     * StringUtils.removePrefixAfterPrefixToLower( "isUserInfo", 2 ) = userInfo
+     * </p>
+     *
+     * @param rawString 需要处理的字符串
+     * @param index     删除多少个字符(从左至右)
+     * @return
+     */
+    public static String removePrefixAfterPrefixToLower(String rawString, int index) {
+        return prefixToLower(rawString.substring(index, rawString.length()), 1);
+    }
+
+    /**
+     * <p>
+     * 驼峰转连字符<br>
+     * StringUtils.camelToHyphen( "managerAdminUserService" ) = manager-admin-user-service
+     * </p>
+     *
+     * @param input
+     * @return 以'-'分隔
+     * @see <a href="https://github.com/krasa/StringManipulation">document</a>
+     */
+    public static String camelToHyphen(String input) {
+        return wordsToHyphenCase(wordsAndHyphenAndCamelToConstantCase(input));
+    }
+
+    private static String wordsAndHyphenAndCamelToConstantCase(String input) {
+        boolean betweenUpperCases = false;
+        boolean containsLowerCase = containsLowerCase(input);
+
+        StringBuilder buf = new StringBuilder();
+        char previousChar = ' ';
+        char[] chars = input.toCharArray();
+        for (int i = 0; i < chars.length; i++) {
+            char c = chars[i];
+            boolean isUpperCaseAndPreviousIsUpperCase = (Character.isUpperCase(previousChar)) && (Character.isUpperCase(c));
+            boolean isUpperCaseAndPreviousIsLowerCase = (Character.isLowerCase(previousChar)) && (Character.isUpperCase(c));
+
+            boolean previousIsWhitespace = Character.isWhitespace(previousChar);
+            boolean lastOneIsNotUnderscore = (buf.length() > 0) && (buf.charAt(buf.length() - 1) != '_');
+            boolean isNotUnderscore = c != '_';
+            if ((lastOneIsNotUnderscore) && ((isUpperCaseAndPreviousIsLowerCase) || (previousIsWhitespace) || ((betweenUpperCases)
+                && (containsLowerCase) && (isUpperCaseAndPreviousIsUpperCase)))) {
+                buf.append("_");
+            } else if (((separatorAfterDigit) && (Character.isDigit(previousChar))
+                && (Character.isLetter(c))) || ((separatorBeforeDigit) && (Character
+                .isDigit(c)) && (Character.isLetter(previousChar)))) {
+                buf.append('_');
+            }
+            if ((shouldReplace(c)) && (lastOneIsNotUnderscore)) {
+                buf.append('_');
+            } else if ((!Character.isWhitespace(c)) && ((isNotUnderscore) || (lastOneIsNotUnderscore))) {
+                buf.append(Character.toUpperCase(c));
+            }
+            previousChar = c;
+        }
+        if (Character.isWhitespace(previousChar)) {
+            buf.append("_");
+        }
+        return buf.toString();
+    }
+
+    public static boolean containsLowerCase(String s) {
+        for (char c : s.toCharArray()) {
+            if (Character.isLowerCase(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean shouldReplace(char c) {
+        return (c == '.') || (c == '_') || (c == '-');
+    }
+
+    private static String wordsToHyphenCase(String s) {
+        StringBuilder buf = new StringBuilder();
+        char lastChar = 'a';
+        for (char c : s.toCharArray()) {
+            if ((Character.isWhitespace(lastChar)) && (!Character.isWhitespace(c))
+                && ('-' != c) && (buf.length() > 0)
+                && (buf.charAt(buf.length() - 1) != '-')) {
+                buf.append("-");
+            }
+            if ('_' == c) {
+                buf.append('-');
+            } else if ('.' == c) {
+                buf.append('-');
+            } else if (!Character.isWhitespace(c)) {
+                buf.append(Character.toLowerCase(c));
+            }
+            lastChar = c;
+        }
+        if (Character.isWhitespace(lastChar)) {
+            buf.append("-");
+        }
+        return buf.toString();
+    }
 }

+ 4 - 4
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/TableInfoHelper.java

@@ -237,7 +237,7 @@ public class TableInfoHelper {
                 } else {
                     tableInfo.setIdType(globalConfig.getIdType());
                 }
-                
+
                 /* 字段 */
                 String column = field.getName();
                 if (StringUtils.isNotEmpty(tableId.value())) {
@@ -405,10 +405,10 @@ public class TableInfoHelper {
         String keyProperty = tableInfo.getKeyProperty();
         String keyColumn = tableInfo.getKeyColumn();
         SqlSource sqlSource = languageDriver.createSqlSource(builderAssistant.getConfiguration(),
-                keyGenerator.executeSql(tableInfo.getKeySequence().value()), null);
+            keyGenerator.executeSql(tableInfo.getKeySequence().value()), null);
         builderAssistant.addMappedStatement(id, sqlSource, statementType, SqlCommandType.SELECT, null, null, null,
-                null, null, resultTypeClass, null, false, false, false,
-                new NoKeyGenerator(), keyProperty, keyColumn, null, languageDriver, null);
+            null, null, resultTypeClass, null, false, false, false,
+            new NoKeyGenerator(), keyProperty, keyColumn, null, languageDriver, null);
         id = builderAssistant.applyCurrentNamespace(id, false);
         MappedStatement keyStatement = builderAssistant.getConfiguration().getMappedStatement(id, false);
         SelectKeyGenerator selectKeyGenerator = new SelectKeyGenerator(keyStatement, true);

+ 1 - 1
mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/toolkit/VersionUtils.java

@@ -32,7 +32,7 @@ public class VersionUtils {
         int diff = 0;
         // 先比较长度 再比较字符
         while (idx < minLength && (diff = versionArray1[idx].length() - versionArray2[idx].length()) == 0
-                && (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {
+            && (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {
             ++idx;
         }
         // 如果已经分出大小,则直接返回,如果未分出大小,则再比较位数,有子版本的为大;