jobob 8 年 前
コミット
98d23d02e6
25 ファイル変更567 行追加349 行削除
  1. 2 2
      src/main/java/com/baomidou/mybatisplus/annotations/KeySequence.java
  2. 2 2
      src/main/java/com/baomidou/mybatisplus/annotations/TableId.java
  3. 2 2
      src/main/java/com/baomidou/mybatisplus/annotations/TableName.java
  4. 0 126
      src/main/java/com/baomidou/mybatisplus/generator/AbstractGenerator.java
  5. 105 5
      src/main/java/com/baomidou/mybatisplus/generator/AutoGenerator.java
  6. 6 3
      src/main/java/com/baomidou/mybatisplus/generator/InjectionConfig.java
  7. 12 6
      src/main/java/com/baomidou/mybatisplus/generator/config/DataSourceConfig.java
  8. 3 2
      src/main/java/com/baomidou/mybatisplus/generator/config/FileOutConfig.java
  9. 26 13
      src/main/java/com/baomidou/mybatisplus/generator/config/GlobalConfig.java
  10. 17 9
      src/main/java/com/baomidou/mybatisplus/generator/config/PackageConfig.java
  11. 36 18
      src/main/java/com/baomidou/mybatisplus/generator/config/StrategyConfig.java
  12. 14 8
      src/main/java/com/baomidou/mybatisplus/generator/config/TemplateConfig.java
  13. 6 2
      src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java
  14. 7 0
      src/main/java/com/baomidou/mybatisplus/generator/config/rules/DbColumnType.java
  15. 20 7
      src/main/java/com/baomidou/mybatisplus/mapper/SqlHelper.java
  16. 13 1
      src/main/java/com/baomidou/mybatisplus/mapper/SqlPlus.java
  17. 4 0
      src/main/java/com/baomidou/mybatisplus/mapper/SqlRunner.java
  18. 81 1
      src/main/java/com/baomidou/mybatisplus/mapper/Wrapper.java
  19. 4 2
      src/main/java/com/baomidou/mybatisplus/toolkit/DruidUtils.java
  20. 23 9
      src/main/java/com/baomidou/mybatisplus/toolkit/GlobalConfigUtils.java
  21. 17 12
      src/main/java/com/baomidou/mybatisplus/toolkit/JsqlParserUtils.java
  22. 14 0
      src/main/java/com/baomidou/mybatisplus/toolkit/ReflectionKit.java
  23. 40 3
      src/main/java/com/baomidou/mybatisplus/toolkit/StringUtils.java
  24. 4 0
      src/test/java/com/baomidou/mybatisplus/test/GlobalConfigurationTest.java
  25. 109 116
      src/test/java/com/baomidou/mybatisplus/test/generator/MysqlGenerator.java

+ 2 - 2
src/main/java/com/baomidou/mybatisplus/annotations/KeySequence.java

@@ -35,14 +35,14 @@ import java.lang.annotation.Target;
 @Inherited
 public @interface KeySequence {
 
-    /*
+    /**
      * <p>
      * 序列名
      * </p>
      */
     String value() default "";
 
-    /*
+    /**
      * <p>
      * id的类型
      * </p>

+ 2 - 2
src/main/java/com/baomidou/mybatisplus/annotations/TableId.java

@@ -34,14 +34,14 @@ import com.baomidou.mybatisplus.enums.IdType;
 @Target(ElementType.FIELD)
 public @interface TableId {
 
-    /*
+    /**
      * <p>
      * 字段值(驼峰命名方式,该值可无)
      * </p>
      */
     String value() default "";
 
-    /*
+    /**
      * <p>
      * 主键ID
      * </p>

+ 2 - 2
src/main/java/com/baomidou/mybatisplus/annotations/TableName.java

@@ -32,14 +32,14 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 public @interface TableName {
 
-    /*
+    /**
      * <p>
      * 实体对应的表名
      * </p>
      */
     String value() default "";
 
-    /*
+    /**
      * <p>
      * 实体映射结果集
      * </p>

+ 0 - 126
src/main/java/com/baomidou/mybatisplus/generator/AbstractGenerator.java

@@ -1,126 +0,0 @@
-/**
- * Copyright (c) 2011-2020, hubin (jobob@qq.com).
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.baomidou.mybatisplus.generator;
-
-import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
-import com.baomidou.mybatisplus.generator.config.GlobalConfig;
-import com.baomidou.mybatisplus.generator.config.PackageConfig;
-import com.baomidou.mybatisplus.generator.config.StrategyConfig;
-import com.baomidou.mybatisplus.generator.config.TemplateConfig;
-import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
-
-/**
- * <p>
- * 插件基类,用于属性配置 设计成抽象类主要是用于后期可扩展,共享参数配置。
- * </p>
- *
- * @author YangHu
- * @since 2016/8/30
- */
-public abstract class AbstractGenerator {
-
-    protected ConfigBuilder config;
-    protected InjectionConfig injectionConfig;
-    /**
-     * 数据源配置
-     */
-    private DataSourceConfig dataSource;
-    /**
-     * 数据库表配置
-     */
-    private StrategyConfig strategy;
-    /**
-     * 包 相关配置
-     */
-    private PackageConfig packageInfo;
-    /**
-     * 模板 相关配置
-     */
-    private TemplateConfig template;
-    /**
-     * 全局 相关配置
-     */
-    private GlobalConfig globalConfig;
-
-    /**
-     * 初始化配置
-     */
-    protected void initConfig() {
-        if (null == config) {
-            config = new ConfigBuilder(packageInfo, dataSource, strategy, template, globalConfig);
-            if (null != injectionConfig) {
-                injectionConfig.setConfig(config);
-            }
-        }
-    }
-
-    public DataSourceConfig getDataSource() {
-        return dataSource;
-    }
-
-    public void setDataSource(DataSourceConfig dataSource) {
-        this.dataSource = dataSource;
-    }
-
-    public StrategyConfig getStrategy() {
-        return strategy;
-    }
-
-    public void setStrategy(StrategyConfig strategy) {
-        this.strategy = strategy;
-    }
-
-    public PackageConfig getPackageInfo() {
-        return packageInfo;
-    }
-
-    public void setPackageInfo(PackageConfig packageInfo) {
-        this.packageInfo = packageInfo;
-    }
-
-    public TemplateConfig getTemplate() {
-        return template;
-    }
-
-    public void setTemplate(TemplateConfig template) {
-        this.template = template;
-    }
-
-    public ConfigBuilder getConfig() {
-        return config;
-    }
-
-    public void setConfig(ConfigBuilder config) {
-        this.config = config;
-    }
-
-    public GlobalConfig getGlobalConfig() {
-        return globalConfig;
-    }
-
-    public void setGlobalConfig(GlobalConfig globalConfig) {
-        this.globalConfig = globalConfig;
-    }
-
-    public InjectionConfig getCfg() {
-        return injectionConfig;
-    }
-
-    public void setCfg(InjectionConfig injectionConfig) {
-        this.injectionConfig = injectionConfig;
-    }
-
-}

+ 105 - 5
src/main/java/com/baomidou/mybatisplus/generator/AutoGenerator.java

@@ -35,7 +35,11 @@ import org.apache.velocity.app.Velocity;
 import org.apache.velocity.app.VelocityEngine;
 
 import com.baomidou.mybatisplus.generator.config.ConstVal;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
 import com.baomidou.mybatisplus.generator.config.FileOutConfig;
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.PackageConfig;
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
 import com.baomidou.mybatisplus.generator.config.TemplateConfig;
 import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
 import com.baomidou.mybatisplus.generator.config.po.TableField;
@@ -49,10 +53,32 @@ import com.baomidou.mybatisplus.toolkit.StringUtils;
  * @author YangHu, tangguo
  * @since 2016-08-30
  */
-public class AutoGenerator extends AbstractGenerator {
+public class AutoGenerator {
 
     private static final Log logger = LogFactory.getLog(AutoGenerator.class);
 
+    protected ConfigBuilder config;
+    protected InjectionConfig injectionConfig;
+    /**
+     * 数据源配置
+     */
+    private DataSourceConfig dataSource;
+    /**
+     * 数据库表配置
+     */
+    private StrategyConfig strategy;
+    /**
+     * 包 相关配置
+     */
+    private PackageConfig packageInfo;
+    /**
+     * 模板 相关配置
+     */
+    private TemplateConfig template;
+    /**
+     * 全局 相关配置
+     */
+    private GlobalConfig globalConfig;
     /**
      * velocity引擎
      */
@@ -155,10 +181,8 @@ public class AutoGenerator extends AbstractGenerator {
                 for (TableField field : tableInfo.getFields()) {
                     if (field.getPropertyType().equalsIgnoreCase("boolean")) {
                         if (field.getPropertyName().indexOf("is") != -1) {
-                            String noIsPropertyName = field.getPropertyName().substring(2, field.getPropertyName().length());
-                            String firstChar = noIsPropertyName.substring(0, 1).toLowerCase();
-                            String afterChar = noIsPropertyName.substring(1, noIsPropertyName.length());
-                            field.setPropertyName(config.getStrategyConfig(), firstChar + afterChar);
+                            field.setPropertyName(config.getStrategyConfig(),
+                                    field.getPropertyName().substring(0, 3).toLowerCase().substring(2));
                         }
                     }
                 }
@@ -336,4 +360,80 @@ public class AutoGenerator extends AbstractGenerator {
         return !file.exists() || config.getGlobalConfig().isFileOverride();
     }
 
+
+    // ==================================  相关配置  ==================================
+    /**
+     * 初始化配置
+     */
+    protected void initConfig() {
+        if (null == config) {
+            config = new ConfigBuilder(packageInfo, dataSource, strategy, template, globalConfig);
+            if (null != injectionConfig) {
+                injectionConfig.setConfig(config);
+            }
+        }
+    }
+
+    public DataSourceConfig getDataSource() {
+        return dataSource;
+    }
+
+    public AutoGenerator setDataSource(DataSourceConfig dataSource) {
+        this.dataSource = dataSource;
+        return this;
+    }
+
+    public StrategyConfig getStrategy() {
+        return strategy;
+    }
+
+    public AutoGenerator setStrategy(StrategyConfig strategy) {
+        this.strategy = strategy;
+        return this;
+    }
+
+    public PackageConfig getPackageInfo() {
+        return packageInfo;
+    }
+
+    public AutoGenerator setPackageInfo(PackageConfig packageInfo) {
+        this.packageInfo = packageInfo;
+        return this;
+    }
+
+    public TemplateConfig getTemplate() {
+        return template;
+    }
+
+    public AutoGenerator setTemplate(TemplateConfig template) {
+        this.template = template;
+        return this;
+    }
+
+    public ConfigBuilder getConfig() {
+        return config;
+    }
+
+    public AutoGenerator setConfig(ConfigBuilder config) {
+        this.config = config;
+        return this;
+    }
+
+    public GlobalConfig getGlobalConfig() {
+        return globalConfig;
+    }
+
+    public AutoGenerator setGlobalConfig(GlobalConfig globalConfig) {
+        this.globalConfig = globalConfig;
+        return this;
+    }
+
+    public InjectionConfig getCfg() {
+        return injectionConfig;
+    }
+
+    public AutoGenerator setCfg(InjectionConfig injectionConfig) {
+        this.injectionConfig = injectionConfig;
+        return this;
+    }
 }

+ 6 - 3
src/main/java/com/baomidou/mybatisplus/generator/InjectionConfig.java

@@ -55,24 +55,27 @@ public abstract class InjectionConfig {
         return config;
     }
 
-    public void setConfig(ConfigBuilder config) {
+    public InjectionConfig setConfig(ConfigBuilder config) {
         this.config = config;
+        return this;
     }
 
     public Map<String, Object> getMap() {
         return map;
     }
 
-    public void setMap(Map<String, Object> map) {
+    public InjectionConfig setMap(Map<String, Object> map) {
         this.map = map;
+        return this;
     }
 
     public List<FileOutConfig> getFileOutConfigList() {
         return fileOutConfigList;
     }
 
-    public void setFileOutConfigList(List<FileOutConfig> fileOutConfigList) {
+    public InjectionConfig setFileOutConfigList(List<FileOutConfig> fileOutConfigList) {
         this.fileOutConfigList = fileOutConfigList;
+        return this;
     }
 
 }

+ 12 - 6
src/main/java/com/baomidou/mybatisplus/generator/config/DataSourceConfig.java

@@ -81,8 +81,9 @@ public class DataSourceConfig {
         return dbType;
     }
 
-    public void setDbType(DbType dbType) {
+    public DataSourceConfig setDbType(DbType dbType) {
         this.dbType = dbType;
+        return this;
     }
 
     public ITypeConvert getTypeConvert() {
@@ -106,8 +107,9 @@ public class DataSourceConfig {
         return typeConvert;
     }
 
-    public void setTypeConvert(ITypeConvert typeConvert) {
+    public DataSourceConfig setTypeConvert(ITypeConvert typeConvert) {
         this.typeConvert = typeConvert;
+        return this;
     }
 
     /**
@@ -130,32 +132,36 @@ public class DataSourceConfig {
         return url;
     }
 
-    public void setUrl(String url) {
+    public DataSourceConfig setUrl(String url) {
         this.url = url;
+        return this;
     }
 
     public String getDriverName() {
         return driverName;
     }
 
-    public void setDriverName(String driverName) {
+    public DataSourceConfig setDriverName(String driverName) {
         this.driverName = driverName;
+        return this;
     }
 
     public String getUsername() {
         return username;
     }
 
-    public void setUsername(String username) {
+    public DataSourceConfig setUsername(String username) {
         this.username = username;
+        return this;
     }
 
     public String getPassword() {
         return password;
     }
 
-    public void setPassword(String password) {
+    public DataSourceConfig setPassword(String password) {
         this.password = password;
+        return this;
     }
 
 }

+ 3 - 2
src/main/java/com/baomidou/mybatisplus/generator/config/FileOutConfig.java

@@ -33,7 +33,7 @@ public abstract class FileOutConfig {
     private String templatePath;
 
     public FileOutConfig() {
-
+        // to do nothing
     }
 
     public FileOutConfig(String templatePath) {
@@ -49,8 +49,9 @@ public abstract class FileOutConfig {
         return templatePath;
     }
 
-    public void setTemplatePath(String templatePath) {
+    public FileOutConfig setTemplatePath(String templatePath) {
         this.templatePath = templatePath;
+        return this;
     }
 
 }

+ 26 - 13
src/main/java/com/baomidou/mybatisplus/generator/config/GlobalConfig.java

@@ -82,104 +82,117 @@ public class GlobalConfig {
         return outputDir;
     }
 
-    public void setOutputDir(String outputDir) {
+    public GlobalConfig setOutputDir(String outputDir) {
         this.outputDir = outputDir;
+        return this;
     }
 
     public boolean isFileOverride() {
         return fileOverride;
     }
 
-    public void setFileOverride(boolean fileOverride) {
+    public GlobalConfig setFileOverride(boolean fileOverride) {
         this.fileOverride = fileOverride;
+        return this;
     }
 
     public boolean isOpen() {
         return open;
     }
 
-    public void setOpen(boolean open) {
+    public GlobalConfig setOpen(boolean open) {
         this.open = open;
+        return this;
     }
 
     public boolean isEnableCache() {
         return enableCache;
     }
 
-    public void setEnableCache(boolean enableCache) {
+    public GlobalConfig setEnableCache(boolean enableCache) {
         this.enableCache = enableCache;
+        return this;
     }
 
     public String getAuthor() {
         return author;
     }
 
-    public void setAuthor(String author) {
+    public GlobalConfig setAuthor(String author) {
         this.author = author;
+        return this;
     }
 
     public boolean isActiveRecord() {
         return activeRecord;
     }
 
-    public void setActiveRecord(boolean activeRecord) {
+    public GlobalConfig setActiveRecord(boolean activeRecord) {
         this.activeRecord = activeRecord;
+        return this;
     }
 
     public boolean isBaseResultMap() {
         return baseResultMap;
     }
 
-    public void setBaseResultMap(boolean baseResultMap) {
+    public GlobalConfig setBaseResultMap(boolean baseResultMap) {
         this.baseResultMap = baseResultMap;
+        return this;
     }
 
     public boolean isBaseColumnList() {
         return baseColumnList;
     }
 
-    public void setBaseColumnList(boolean baseColumnList) {
+    public GlobalConfig setBaseColumnList(boolean baseColumnList) {
         this.baseColumnList = baseColumnList;
+        return this;
     }
 
     public String getMapperName() {
         return mapperName;
     }
 
-    public void setMapperName(String mapperName) {
+    public GlobalConfig setMapperName(String mapperName) {
         this.mapperName = mapperName;
+        return this;
     }
 
     public String getXmlName() {
         return xmlName;
     }
 
-    public void setXmlName(String xmlName) {
+    public GlobalConfig setXmlName(String xmlName) {
         this.xmlName = xmlName;
+        return this;
     }
 
     public String getServiceName() {
         return serviceName;
     }
 
-    public void setServiceName(String serviceName) {
+    public GlobalConfig setServiceName(String serviceName) {
         this.serviceName = serviceName;
+        return this;
     }
 
     public String getServiceImplName() {
         return serviceImplName;
     }
 
-    public void setServiceImplName(String serviceImplName) {
+    public GlobalConfig setServiceImplName(String serviceImplName) {
         this.serviceImplName = serviceImplName;
+        return this;
     }
 
     public String getControllerName() {
         return controllerName;
     }
 
-    public void setControllerName(String controllerName) {
+    public GlobalConfig setControllerName(String controllerName) {
         this.controllerName = controllerName;
+        return this;
     }
 
     public String getLogicDeletePropertyName() {

+ 17 - 9
src/main/java/com/baomidou/mybatisplus/generator/config/PackageConfig.java

@@ -21,7 +21,7 @@ import com.baomidou.mybatisplus.toolkit.StringUtils;
  * <p>
  * 跟包相关的配置项
  *
- * @author YangHu, tangguo
+ * @author YangHu, tangguo, hubin
  * @since 2016-08-30
  */
 public class PackageConfig {
@@ -72,56 +72,63 @@ public class PackageConfig {
         return parent;
     }
 
-    public void setParent(String parent) {
+    public PackageConfig setParent(String parent) {
         this.parent = parent;
+        return this;
     }
 
     public String getModuleName() {
         return moduleName;
     }
 
-    public void setModuleName(String moduleName) {
+    public PackageConfig setModuleName(String moduleName) {
         this.moduleName = moduleName;
+        return this;
     }
 
     public String getEntity() {
         return entity;
     }
 
-    public void setEntity(String entity) {
+    public PackageConfig setEntity(String entity) {
         this.entity = entity;
+        return this;
     }
 
     public String getService() {
         return service;
     }
 
-    public void setService(String service) {
+    public PackageConfig setService(String service) {
         this.service = service;
+        return this;
     }
 
     public String getServiceImpl() {
         return serviceImpl;
     }
 
-    public void setServiceImpl(String serviceImpl) {
+    public PackageConfig setServiceImpl(String serviceImpl) {
         this.serviceImpl = serviceImpl;
+        return this;
     }
 
     public String getMapper() {
         return mapper;
     }
 
-    public void setMapper(String mapper) {
+    public PackageConfig setMapper(String mapper) {
         this.mapper = mapper;
+        return this;
     }
 
     public String getXml() {
         return xml;
     }
 
-    public void setXml(String xml) {
+    public PackageConfig setXml(String xml) {
         this.xml = xml;
+        return this;
     }
 
     public String getController() {
@@ -131,8 +138,9 @@ public class PackageConfig {
         return controller;
     }
 
-    public void setController(String controller) {
+    public PackageConfig setController(String controller) {
         this.controller = controller;
+        return this;
     }
 
 }

+ 36 - 18
src/main/java/com/baomidou/mybatisplus/generator/config/StrategyConfig.java

@@ -128,8 +128,9 @@ public class StrategyConfig {
     private boolean controllerMappingHyphenStyle = false;
 
 
-    public void setDbColumnUnderline(boolean dbColumnUnderline) {
+    public StrategyConfig setDbColumnUnderline(boolean dbColumnUnderline) {
         DB_COLUMN_UNDERLINE = dbColumnUnderline;
+        return this;
     }
 
     /**
@@ -170,32 +171,36 @@ public class StrategyConfig {
         return isCapitalMode;
     }
 
-    public void setCapitalMode(boolean isCapitalMode) {
+    public StrategyConfig setCapitalMode(boolean isCapitalMode) {
         this.isCapitalMode = isCapitalMode;
+        return this;
     }
 
     public NamingStrategy getNaming() {
         return naming;
     }
 
-    public void setNaming(NamingStrategy naming) {
+    public StrategyConfig setNaming(NamingStrategy naming) {
         this.naming = naming;
+        return this;
     }
 
     public String[] getTablePrefix() {
         return tablePrefix;
     }
 
-    public void setTablePrefix(String[] tablePrefix) {
+    public StrategyConfig setTablePrefix(String[] tablePrefix) {
         this.tablePrefix = tablePrefix;
+        return this;
     }
 
     public String getSuperEntityClass() {
         return superEntityClass;
     }
 
-    public void setSuperEntityClass(String superEntityClass) {
+    public StrategyConfig setSuperEntityClass(String superEntityClass) {
         this.superEntityClass = superEntityClass;
+        return this;
     }
 
     public boolean includeSuperEntityColumns(String fieldName) {
@@ -213,103 +218,116 @@ public class StrategyConfig {
         return superEntityColumns;
     }
 
-    public void setSuperEntityColumns(String[] superEntityColumns) {
+    public StrategyConfig setSuperEntityColumns(String[] superEntityColumns) {
         this.superEntityColumns = superEntityColumns;
+        return this;
     }
 
     public String getSuperMapperClass() {
         return superMapperClass;
     }
 
-    public void setSuperMapperClass(String superMapperClass) {
+    public StrategyConfig setSuperMapperClass(String superMapperClass) {
         this.superMapperClass = superMapperClass;
+        return this;
     }
 
     public String getSuperServiceClass() {
         return superServiceClass;
     }
 
-    public void setSuperServiceClass(String superServiceClass) {
+    public StrategyConfig setSuperServiceClass(String superServiceClass) {
         this.superServiceClass = superServiceClass;
+        return this;
     }
 
     public String getSuperServiceImplClass() {
         return superServiceImplClass;
     }
 
-    public void setSuperServiceImplClass(String superServiceImplClass) {
+    public StrategyConfig setSuperServiceImplClass(String superServiceImplClass) {
         this.superServiceImplClass = superServiceImplClass;
+        return this;
     }
 
     public String getSuperControllerClass() {
         return superControllerClass;
     }
 
-    public void setSuperControllerClass(String superControllerClass) {
+    public StrategyConfig setSuperControllerClass(String superControllerClass) {
         this.superControllerClass = superControllerClass;
+        return this;
     }
 
     public String[] getInclude() {
         return include;
     }
 
-    public void setInclude(String[] include) {
+    public StrategyConfig setInclude(String[] include) {
         this.include = include;
+        return this;
     }
 
     public String[] getExclude() {
         return exclude;
     }
 
-    public void setExclude(String[] exclude) {
+    public StrategyConfig setExclude(String[] exclude) {
         this.exclude = exclude;
+        return this;
     }
 
     public boolean isEntityColumnConstant() {
         return entityColumnConstant;
     }
 
-    public void setEntityColumnConstant(boolean entityColumnConstant) {
+    public StrategyConfig setEntityColumnConstant(boolean entityColumnConstant) {
         this.entityColumnConstant = entityColumnConstant;
+        return this;
     }
 
     public boolean isEntityBuilderModel() {
         return entityBuilderModel;
     }
 
-    public void setEntityBuilderModel(boolean entityBuilderModel) {
+    public StrategyConfig setEntityBuilderModel(boolean entityBuilderModel) {
         this.entityBuilderModel = entityBuilderModel;
+        return this;
     }
 
     public boolean isEntityLombokModel() {
         return entityLombokModel;
     }
 
-    public void setEntityLombokModel(boolean entityLombokModel) {
+    public StrategyConfig setEntityLombokModel(boolean entityLombokModel) {
         this.entityLombokModel = entityLombokModel;
+        return this;
     }
 
     public boolean isEntityBooleanColumnRemoveIsPrefix() {
         return entityBooleanColumnRemoveIsPrefix;
     }
 
-    public void setEntityBooleanColumnRemoveIsPrefix(boolean entityBooleanColumnRemoveIsPrefix) {
+    public StrategyConfig setEntityBooleanColumnRemoveIsPrefix(boolean entityBooleanColumnRemoveIsPrefix) {
         this.entityBooleanColumnRemoveIsPrefix = entityBooleanColumnRemoveIsPrefix;
+        return this;
     }
 
     public boolean isRestControllerStyle() {
         return restControllerStyle;
     }
 
-    public void setRestControllerStyle(boolean restControllerStyle) {
+    public StrategyConfig setRestControllerStyle(boolean restControllerStyle) {
         this.restControllerStyle = restControllerStyle;
+        return this;
     }
 
     public boolean isControllerMappingHyphenStyle() {
         return controllerMappingHyphenStyle;
     }
 
-    public void setControllerMappingHyphenStyle(boolean controllerMappingHyphenStyle) {
+    public StrategyConfig setControllerMappingHyphenStyle(boolean controllerMappingHyphenStyle) {
         this.controllerMappingHyphenStyle = controllerMappingHyphenStyle;
+        return this;
     }
 }

+ 14 - 8
src/main/java/com/baomidou/mybatisplus/generator/config/TemplateConfig.java

@@ -20,8 +20,8 @@ package com.baomidou.mybatisplus.generator.config;
  * 模板路径配置项
  * </p>
  *
- * @author tzg
- * @since 2016/11/10
+ * @author tzg hubin
+ * @since 2017-06-17
  */
 public class TemplateConfig {
 
@@ -41,48 +41,54 @@ public class TemplateConfig {
         return entity;
     }
 
-    public void setEntity(String entity) {
+    public TemplateConfig setEntity(String entity) {
         this.entity = entity;
+        return this;
     }
 
     public String getService() {
         return service;
     }
 
-    public void setService(String service) {
+    public TemplateConfig setService(String service) {
         this.service = service;
+        return this;
     }
 
     public String getServiceImpl() {
         return serviceImpl;
     }
 
-    public void setServiceImpl(String serviceImpl) {
+    public TemplateConfig setServiceImpl(String serviceImpl) {
         this.serviceImpl = serviceImpl;
+        return this;
     }
 
     public String getMapper() {
         return mapper;
     }
 
-    public void setMapper(String mapper) {
+    public TemplateConfig setMapper(String mapper) {
         this.mapper = mapper;
+        return this;
     }
 
     public String getXml() {
         return xml;
     }
 
-    public void setXml(String xml) {
+    public TemplateConfig setXml(String xml) {
         this.xml = xml;
+        return this;
     }
 
     public String getController() {
         return controller;
     }
 
-    public void setController(String controller) {
+    public TemplateConfig setController(String controller) {
         this.controller = controller;
+        return this;
     }
 
 }

+ 6 - 2
src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -41,7 +41,9 @@ import com.baomidou.mybatisplus.generator.config.rules.QuerySQL;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
 
 /**
+ * <p>
  * 配置汇总 传递给文件生成工具
+ * </p>
  *
  * @author YangHu, tangguo, hubin
  * @since 2016-08-30
@@ -578,16 +580,18 @@ public class ConfigBuilder {
         return strategyConfig;
     }
 
-    public void setStrategyConfig(StrategyConfig strategyConfig) {
+    public ConfigBuilder setStrategyConfig(StrategyConfig strategyConfig) {
         this.strategyConfig = strategyConfig;
+        return this;
     }
 
     public GlobalConfig getGlobalConfig() {
         return globalConfig;
     }
 
-    public void setGlobalConfig(GlobalConfig globalConfig) {
+    public ConfigBuilder setGlobalConfig(GlobalConfig globalConfig) {
         this.globalConfig = globalConfig;
+        return this;
     }
 
 }

+ 7 - 0
src/main/java/com/baomidou/mybatisplus/generator/config/rules/DbColumnType.java

@@ -24,6 +24,13 @@ package com.baomidou.mybatisplus.generator.config.rules;
  * @since 2017-01-11
  */
 public enum DbColumnType {
+    // 基本类型
+    BASE_INT("int", null),
+    BASE_BOOLEAN("boolean", null),
+    BASE_FLOAT("float", null),
+    BASE_DOUBLE("double", null),
+
+    // 包装类型
     STRING("String", null),
     LONG("Long", null),
     INTEGER("Integer", null),

+ 20 - 7
src/main/java/com/baomidou/mybatisplus/mapper/SqlHelper.java

@@ -44,7 +44,9 @@ public class SqlHelper {
     private static final Log logger = LogFactory.getLog(SqlHelper.class);
 
     /**
+     * <p>
      * 获取Session 默认自动提交
+     * </p>
      * <p>
      * 特别说明:这里获取SqlSession时这里虽然设置了自动提交但是如果事务托管了的话 是不起作用的 切记!!
      * <p/>
@@ -68,9 +70,11 @@ public class SqlHelper {
     }
 
     /**
-     * 获取sqlSessionå
+     * <p>
+     * 获取sqlSession
+     * </p>
      *
-     * @param clazz
+     * @param clazz 对象类
      * @return
      */
     private static SqlSession getSqlSession(Class<?> clazz) {
@@ -100,9 +104,12 @@ public class SqlHelper {
     }
 
     /**
+     * <p>
      * 获取TableInfo
+     * </p>
      *
-     * @return TableInfo
+     * @param clazz 对象类
+     * @return TableInfo 对象表信息
      */
     public static TableInfo table(Class<?> clazz) {
         TableInfo tableInfo = TableInfoHelper.getTableInfo(clazz);
@@ -157,10 +164,12 @@ public class SqlHelper {
     }
 
     /**
+     * <p>
      * 填充Wrapper
+     * </p>
      *
-     * @param page
-     * @param wrapper
+     * @param page    分页对象
+     * @param wrapper SQL包装对象
      */
     public static void fillWrapper(Page<?> page, Wrapper<?> wrapper) {
         if (null == page) {
@@ -175,9 +184,11 @@ public class SqlHelper {
     }
 
     /**
+     * <p>
      * 判断Wrapper为空
+     * </p>
      *
-     * @param wrapper
+     * @param wrapper SQL包装对象
      * @return
      */
     public static boolean isEmptyOfWrapper(Wrapper<?> wrapper) {
@@ -185,9 +196,11 @@ public class SqlHelper {
     }
 
     /**
+     * <p>
      * 判断Wrapper不为空
+     * </p>
      *
-     * @param wrapper
+     * @param wrapper SQL包装对象
      * @return
      */
     public static boolean isNotEmptyOfWrapper(Wrapper<?> wrapper) {

+ 13 - 1
src/main/java/com/baomidou/mybatisplus/mapper/SqlPlus.java

@@ -23,7 +23,7 @@ import com.baomidou.mybatisplus.toolkit.StringUtils;
  * 实现AbstractSQL ,实现WHERE条件自定义
  * </p>
  *
- * @author yanghu , Caratacus
+ * @author yanghu , Caratacus , hubin
  * @Date 2016-08-22
  */
 @SuppressWarnings("serial")
@@ -38,7 +38,9 @@ public class SqlPlus extends MybatisAbstractSQL<SqlPlus> {
     }
 
     /**
+     * <p>
      * IS NOT NULL查询
+     * </p>
      *
      * @param columns 以逗号分隔的字段名称
      * @return this
@@ -49,7 +51,9 @@ public class SqlPlus extends MybatisAbstractSQL<SqlPlus> {
     }
 
     /**
+     * <p>
      * IS NULL查询
+     * </p>
      *
      * @param columns 以逗号分隔的字段名称
      * @return
@@ -60,7 +64,9 @@ public class SqlPlus extends MybatisAbstractSQL<SqlPlus> {
     }
 
     /**
+     * <p>
      * 将EXISTS语句添加到WHERE条件中
+     * </p>
      *
      * @param value
      * @return
@@ -71,7 +77,9 @@ public class SqlPlus extends MybatisAbstractSQL<SqlPlus> {
     }
 
     /**
+     * <p>
      * 处理EXISTS操作
+     * </p>
      *
      * @param value
      * @param isNot 是否为NOT EXISTS操作
@@ -88,7 +96,9 @@ public class SqlPlus extends MybatisAbstractSQL<SqlPlus> {
     }
 
     /**
+     * <p>
      * 将NOT_EXISTS语句添加到WHERE条件中
+     * </p>
      *
      * @param value
      * @return
@@ -99,7 +109,9 @@ public class SqlPlus extends MybatisAbstractSQL<SqlPlus> {
     }
 
     /**
+     * <p>
      * 以相同的方式处理null和notnull
+     * </p>
      *
      * @param columns 以逗号分隔的字段名称
      * @param sqlPart SQL部分

+ 4 - 0
src/main/java/com/baomidou/mybatisplus/mapper/SqlRunner.java

@@ -62,7 +62,9 @@ public class SqlRunner {
     }
 
     /**
+     * <p>
      * 获取默认的SqlQuery(适用于单库)
+     * </p>
      *
      * @return
      */
@@ -75,7 +77,9 @@ public class SqlRunner {
     }
 
     /**
+     * <p>
      * 根据当前class对象获取SqlQuery(适用于多库)
+     * </p>
      *
      * @param clazz
      * @return

+ 81 - 1
src/main/java/com/baomidou/mybatisplus/mapper/Wrapper.java

@@ -75,7 +75,9 @@ public abstract class Wrapper<T> implements Serializable {
     protected String AND_OR = "AND";
 
     /**
+     * <p>
      * 兼容EntityWrapper
+     * </p>
      *
      * @return
      */
@@ -95,9 +97,11 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * 使用对象封装的setsqlselect
+     * </p>
      *
-     * @param column
+     * @param column 字段
      * @return
      */
     public Wrapper<T> setSqlSelect(Column... column) {
@@ -122,7 +126,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * SQL 片段 (子类实现)
+     * </p>
      */
     public abstract String getSqlSegment();
 
@@ -139,7 +145,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * 替换占位符
+     * </p>
      *
      * @param sqlSegment
      * @return
@@ -152,7 +160,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * 原生占位符sql
+     * </p>
      *
      * @return
      */
@@ -746,7 +756,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -760,7 +772,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值
@@ -771,7 +785,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -785,7 +801,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值
@@ -796,7 +814,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * 处理LIKE操作
+     * </p>
      *
      * @param column 字段名称
      * @param value  like匹配值
@@ -815,7 +835,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -830,7 +852,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值
@@ -842,7 +866,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -857,7 +883,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT LIKE条件语句,value中无需前后%
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值
@@ -869,7 +897,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * is not null 条件
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param columns   字段名称。多个字段以逗号分隔。
@@ -882,7 +912,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * is not null 条件
+     * </p>
      *
      * @param columns 字段名称。多个字段以逗号分隔。
      * @return this
@@ -892,7 +924,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * is not null 条件
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param columns   字段名称。多个字段以逗号分隔。
@@ -905,7 +939,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * is not null 条件
+     * </p>
      *
      * @param columns 字段名称。多个字段以逗号分隔。
      * @return this
@@ -915,7 +951,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * EXISTS 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param value     匹配值
@@ -928,7 +966,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * EXISTS 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param value 匹配值
      * @return this
@@ -938,7 +978,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT EXISTS条件语句
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param value     匹配值
@@ -951,7 +993,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT EXISTS条件语句
+     * </p>
      *
      * @param value 匹配值
      * @return this
@@ -961,7 +1005,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -976,7 +1022,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param column 字段名称
      * @param value  逗号拼接的字符串
@@ -987,7 +1035,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT IN条件语句
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -1002,7 +1052,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT IN条件语句
+     * </p>
      *
      * @param column 字段名称
      * @param value  逗号拼接的字符串
@@ -1013,7 +1065,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -1027,7 +1081,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值 List集合
@@ -1038,7 +1094,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -1052,7 +1110,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值 List集合
@@ -1063,7 +1123,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -1077,7 +1139,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值 object数组
@@ -1088,7 +1152,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -1102,7 +1168,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT IN 条件语句,目前适配mysql及oracle
+     * </p>
      *
      * @param column 字段名称
      * @param value  匹配值 object数组
@@ -1113,7 +1181,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * 获取in表达式
+     * </p>
      *
      * @param column 字段名称
      * @param value  集合List
@@ -1142,7 +1212,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * betwwee 条件语句
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -1157,7 +1229,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * betwwee 条件语句
+     * </p>
      *
      * @param column 字段名称
      * @param val1
@@ -1169,7 +1243,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT betwwee 条件语句
+     * </p>
      *
      * @param condition 拼接的前置条件
      * @param column    字段名称
@@ -1184,7 +1260,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * NOT betwwee 条件语句
+     * </p>
      *
      * @param column 字段名称
      * @param val1
@@ -1197,7 +1275,9 @@ public abstract class Wrapper<T> implements Serializable {
     }
 
     /**
+     * <p>
      * 为了兼容之前的版本,可使用where()或and()替代
+     * </p>
      *
      * @param sqlWhere where sql部分
      * @param params   参数集

+ 4 - 2
src/main/java/com/baomidou/mybatisplus/toolkit/DruidUtils.java

@@ -28,10 +28,12 @@ import com.alibaba.druid.sql.PagerUtils;
 public class DruidUtils {
 
     /**
+     * <p>
      * 通过Druid方式获取count语句
+     * </p>
      *
-     * @param originalSql
-     * @param dialectType
+     * @param originalSql 原执行 SQL
+     * @param dialectType 数据库方言类型
      * @return
      */
     public static String count(String originalSql, String dialectType) {

+ 23 - 9
src/main/java/com/baomidou/mybatisplus/toolkit/GlobalConfigUtils.java

@@ -33,12 +33,12 @@ import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
  */
 public class GlobalConfigUtils {
 
+    // 日志
+    private static final Log logger = LogFactory.getLog(GlobalConfigUtils.class);
     /**
      * 默认参数
      */
     public static final GlobalConfiguration DEFAULT = defaults();
-    // 日志
-    private static final Log logger = LogFactory.getLog(GlobalConfigUtils.class);
     /**
      * 缓存全局信息
      */
@@ -49,9 +49,11 @@ public class GlobalConfigUtils {
     }
 
     /**
+     * <p>
      * 获取当前的SqlSessionFactory
+     * </p>
      *
-     * @param clazz
+     * @param clazz 实体类
      * @return
      */
     public static SqlSessionFactory currentSessionFactory(Class<?> clazz) {
@@ -61,7 +63,9 @@ public class GlobalConfigUtils {
     }
 
     /**
+     * <p>
      * 获取默认MybatisGlobalConfig
+     * </p>
      *
      * @return
      */
@@ -74,8 +78,8 @@ public class GlobalConfigUtils {
      * 设置全局设置(以configuration地址值作为Key)
      * <p/>
      *
-     * @param configuration
-     * @param mybatisGlobalConfig
+     * @param configuration       Mybatis 容器配置对象
+     * @param mybatisGlobalConfig 全局配置
      * @return
      */
     public static void setGlobalConfig(Configuration configuration, GlobalConfiguration mybatisGlobalConfig) {
@@ -87,9 +91,11 @@ public class GlobalConfigUtils {
     }
 
     /**
+     * <p>
      * 获取MybatisGlobalConfig (统一所有入口)
+     * </p>
      *
-     * @param configuration
+     * @param configuration Mybatis 容器配置对象
      * @return
      */
     public static GlobalConfiguration getGlobalConfig(Configuration configuration) {
@@ -100,9 +106,11 @@ public class GlobalConfigUtils {
     }
 
     /**
+     * <p>
      * 获取MybatisGlobalConfig (统一所有入口)
+     * </p>
      *
-     * @param configMark
+     * @param configMark 配置标记
      * @return
      */
     public static GlobalConfiguration getGlobalConfig(String configMark) {
@@ -168,10 +176,12 @@ public class GlobalConfigUtils {
     }
 
     /**
+     * <p>
      * 设置元数据相关属性
+     * </p>
      *
-     * @param dataSource
-     * @param globalConfig
+     * @param dataSource   数据源
+     * @param globalConfig 全局配置
      */
     public static void setMetaData(DataSource dataSource, GlobalConfiguration globalConfig) {
         try (Connection connection = dataSource.getConnection()) {
@@ -184,4 +194,8 @@ public class GlobalConfigUtils {
             throw new MybatisPlusException("Error: GlobalConfigUtils setMetaData Fail !  Cause:" + e);
         }
     }
+<<<<<<< HEAD
+=======
+
+>>>>>>> dev
 }

+ 17 - 12
src/main/java/com/baomidou/mybatisplus/toolkit/JsqlParserUtils.java

@@ -45,43 +45,48 @@ public class JsqlParserUtils {
     private static List<SelectItem> countSelectItem = null;
 
     /**
+     * <p>
      * jsqlparser方式获取select的count语句
+     * </p>
      *
      * @param originalSql selectSQL
      * @return
      */
     public static CountOptimize jsqlparserCount(CountOptimize countOptimize, String originalSql) {
-        String sqlCount;
         try {
             Select selectStatement = (Select) CCJSqlParserUtil.parse(originalSql);
             PlainSelect plainSelect = (PlainSelect) selectStatement.getSelectBody();
             Distinct distinct = plainSelect.getDistinct();
             List<Expression> groupBy = plainSelect.getGroupByColumnReferences();
-            // 优化Order by
             List<OrderByElement> orderBy = plainSelect.getOrderByElements();
-            // 添加包含groupby 不去除orderby
+
+            // 添加包含groupBy 不去除orderBy
             if (CollectionUtils.isEmpty(groupBy) && CollectionUtils.isNotEmpty(orderBy)) {
                 plainSelect.setOrderByElements(null);
                 countOptimize.setOrderBy(false);
             }
+
             // 包含 distinct、groupBy不优化
             if (distinct != null || CollectionUtils.isNotEmpty(groupBy)) {
-                sqlCount = String.format(SqlUtils.SQL_BASE_COUNT, selectStatement.toString());
-                countOptimize.setCountSQL(sqlCount);
+                countOptimize.setCountSQL(String.format(SqlUtils.SQL_BASE_COUNT, selectStatement.toString()));
                 return countOptimize;
             }
-            List<SelectItem> selectCount = countSelectItem();
-            plainSelect.setSelectItems(selectCount);
-            sqlCount = selectStatement.toString();
-        } catch (Exception e) {
-            sqlCount = String.format(SqlUtils.SQL_BASE_COUNT, originalSql);
+
+            // 优化 SQL
+            plainSelect.setSelectItems(countSelectItem());
+            countOptimize.setCountSQL(selectStatement.toString());
+            return countOptimize;
+        } catch (Throwable e) {
+            // 无法优化使用原 SQL
+            countOptimize.setCountSQL(String.format(SqlUtils.SQL_BASE_COUNT, originalSql));
+            return countOptimize;
         }
-        countOptimize.setCountSQL(sqlCount);
-        return countOptimize;
     }
 
     /**
+     * <p>
      * 获取jsqlparser中count的SelectItem
+     * </p>
      *
      * @return
      */

+ 14 - 0
src/main/java/com/baomidou/mybatisplus/toolkit/ReflectionKit.java

@@ -65,7 +65,9 @@ public class ReflectionKit {
     }
 
     /**
+     * <p>
      * 获取 public get方法的值
+     * </p>
      *
      * @param cls
      * @param entity 实体
@@ -93,7 +95,9 @@ public class ReflectionKit {
     }
 
     /**
+     * <p>
      * 获取 public get方法的值
+     * </p>
      *
      * @param entity 实体
      * @param str    属性字符串内容
@@ -107,7 +111,9 @@ public class ReflectionKit {
     }
 
     /**
+     * <p>
      * 调用对象的get方法检查对象所有属性是否为null
+     * </p>
      *
      * @param bean 检查对象
      * @return boolean true对象所有属性不为null,false对象所有属性为null
@@ -140,7 +146,9 @@ public class ReflectionKit {
     }
 
     /**
+     * <p>
      * 反射对象获取泛型
+     * </p>
      *
      * @param clazz 对象
      * @param index 泛型所在位置
@@ -167,7 +175,9 @@ public class ReflectionKit {
     }
 
     /**
+     * <p>
      * 获取该类的所有属性列表
+     * </p>
      *
      * @param clazz 反射类
      * @return
@@ -185,7 +195,9 @@ public class ReflectionKit {
     }
 
     /**
+     * <p>
      * 获取该类的所有属性列表
+     * </p>
      *
      * @param clazz 反射类
      * @return
@@ -240,7 +252,9 @@ public class ReflectionKit {
     }
 
     /**
+     * <p>
      * 递归自身的class,获取TableInfo
+     * </p>
      *
      * @param cls
      * @return TableInfo

+ 40 - 3
src/main/java/com/baomidou/mybatisplus/toolkit/StringUtils.java

@@ -210,7 +210,9 @@ public class StringUtils {
     }
 
     /**
+     * <p>
      * 获取SQL PARAMS字符串
+     * </p>
      *
      * @param obj
      * @return
@@ -589,7 +591,9 @@ public class StringUtils {
     }
 
     /**
+     * <p>
      * 是否为CharSequence类型
+     * </p>
      *
      * @param cls
      * @return
@@ -599,23 +603,25 @@ public class StringUtils {
     }
 
     /**
+     * <p>
      * 是否为CharSequence类型
+     * </p>
      *
      * @param propertyType
      * @return
      */
     public static Boolean isCharSequence(String propertyType) {
-        Class<?> cls;
         try {
-            cls = Class.forName(propertyType);
+            return isCharSequence(Class.forName(propertyType));
         } catch (ClassNotFoundException e) {
             return false;
         }
-        return isCharSequence(cls);
     }
 
     /**
+     * <p>
      * 驼峰转连字符
+     * </p>
      * <pre>
      *     StringUtils.camelToHyphen( "managerAdminUserService" ) = manager-admin-user-service
      * </pre>
@@ -637,17 +643,30 @@ public class StringUtils {
         char[] chars = input.toCharArray();
         for (int i = 0; i < chars.length; i++) {
             char c = chars[i];
+<<<<<<< HEAD
             boolean isUpperCaseAndPreviousIsUpperCase = (Character.isUpperCase(previousChar)) && (Character.isUpperCase(
                     c));
             boolean isUpperCaseAndPreviousIsLowerCase = (Character.isLowerCase(previousChar)) && (Character.isUpperCase(
                     c));
+=======
+            boolean isUpperCaseAndPreviousIsUpperCase = (Character.isUpperCase(previousChar)) && (Character.isUpperCase(c));
+            boolean isUpperCaseAndPreviousIsLowerCase = (Character.isLowerCase(previousChar)) && (Character.isUpperCase(c));
+>>>>>>> dev
 
             boolean previousIsWhitespace = Character.isWhitespace(previousChar);
             boolean lastOneIsNotUnderscore = (buf.length() > 0) && (buf.charAt(buf.length() - 1) != '_');
             boolean isNotUnderscore = c != '_';
+<<<<<<< HEAD
             if ((lastOneIsNotUnderscore) && ((isUpperCaseAndPreviousIsLowerCase) || (previousIsWhitespace) || ((_betweenUpperCases) && (containsLowerCase) && (isUpperCaseAndPreviousIsUpperCase)))) {
                 buf.append("_");
             } else if (((separatorAfterDigit) && (Character.isDigit(previousChar)) && (Character.isLetter(c))) || ((separatorBeforeDigit) && (Character
+=======
+            if ((lastOneIsNotUnderscore) && ((isUpperCaseAndPreviousIsLowerCase) || (previousIsWhitespace) || ((_betweenUpperCases)
+                    && (containsLowerCase) && (isUpperCaseAndPreviousIsUpperCase)))) {
+                buf.append("_");
+            } else if (((separatorAfterDigit) && (Character.isDigit(previousChar))
+                    && (Character.isLetter(c))) || ((separatorBeforeDigit) && (Character
+>>>>>>> dev
                     .isDigit(c)) && (Character.isLetter(previousChar)))) {
                 buf.append('_');
             }
@@ -664,7 +683,11 @@ public class StringUtils {
         return buf.toString();
     }
 
+<<<<<<< HEAD
     public static boolean containsLowerCase(String s) {
+=======
+    public static boolean containsLowerCase ( String s ) {
+>>>>>>> dev
         for (char c : s.toCharArray()) {
             if (Character.isLowerCase(c)) {
                 return true;
@@ -673,6 +696,7 @@ public class StringUtils {
         return false;
     }
 
+<<<<<<< HEAD
     private static boolean shouldReplace(char c) {
         return (c == '.') || (c == '_') || (c == '-');
     }
@@ -683,6 +707,19 @@ public class StringUtils {
         for (char c : s.toCharArray()) {
             if ((Character.isWhitespace(lastChar)) && (!Character.isWhitespace(c)) && ('-' != c) && (buf.length() > 0) && (buf
                     .charAt(buf.length() - 1) != '-')) {
+=======
+    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) != '-')) {
+>>>>>>> dev
                 buf.append("-");
             }
             if ('_' == c) {

+ 4 - 0
src/test/java/com/baomidou/mybatisplus/test/GlobalConfigurationTest.java

@@ -50,6 +50,10 @@ public class GlobalConfigurationTest {
     @SuppressWarnings("unchecked")
     public static void main(String[] args) {
         GlobalConfiguration global = GlobalConfigUtils.defaults();
+<<<<<<< HEAD
+=======
+        // global.setAutoSetDbType(true);
+>>>>>>> dev
         // 设置全局校验机制为FieldStrategy.Empty
         global.setFieldStrategy(2);
         BasicDataSource dataSource = new BasicDataSource();

+ 109 - 116
src/test/java/com/baomidou/mybatisplus/test/generator/MysqlGenerator.java

@@ -15,9 +15,14 @@
  */
 package com.baomidou.mybatisplus.test.generator;
 
+<<<<<<< HEAD
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+=======
+import java.util.Arrays;
+import java.util.HashMap;
+>>>>>>> dev
 import java.util.Map;
 
 import com.baomidou.mybatisplus.generator.AutoGenerator;
@@ -50,126 +55,114 @@ public class MysqlGenerator {
      * </p>
      */
     public static void main(String[] args) {
-        AutoGenerator mpg = new AutoGenerator();
-
-        // 全局配置
-        GlobalConfig gc = new GlobalConfig();
-        gc.setOutputDir("/develop/code/");
-        gc.setFileOverride(true);
-        gc.setActiveRecord(true);// 开启 activeRecord 模式
-        gc.setEnableCache(false);// XML 二级缓存
-        gc.setBaseResultMap(true);// XML ResultMap
-        gc.setBaseColumnList(true);// XML columList
-        gc.setAuthor("Yanghu");
-
-        // 自定义文件命名,注意 %s 会自动填充表实体属性!
-        // gc.setMapperName("%sDao");
-        // gc.setXmlName("%sDao");
-        // gc.setServiceName("MP%sService");
-        // gc.setServiceImplName("%sServiceDiy");
-        // gc.setControllerName("%sAction");
-        mpg.setGlobalConfig(gc);
-
-        // 数据源配置
-        DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setDbType(DbType.MYSQL);
-        dsc.setTypeConvert(new MySqlTypeConvert() {
-            // 自定义数据库表字段类型转换【可选】
-            @Override
-            public DbColumnType processTypeConvert(String fieldType) {
-                System.out.println("转换类型:" + fieldType);
-                // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
-                //    return DbColumnType.BOOLEAN;
-                // }
-                return super.processTypeConvert(fieldType);
-            }
-        });
-        dsc.setDriverName("com.mysql.jdbc.Driver");
-        dsc.setUsername("root");
-        dsc.setPassword("521");
-        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mybatis-plus?characterEncoding=utf8");
-        mpg.setDataSource(dsc);
-
-        // 策略配置
-        StrategyConfig strategy = new StrategyConfig();
-        // strategy.setCapitalMode(true);// 全局大写命名
-        // strategy.setDbColumnUnderline(true);//全局下划线命名
-        strategy.setTablePrefix(new String[]{"bmd_", "mp_"});// 此处可以修改为您的表前缀
-        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        // strategy.setInclude(new String[] { "user" }); // 需要生成的表
-        // strategy.setExclude(new String[]{"test"}); // 排除生成的表
-        // 自定义实体父类
-        // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");
-        // 自定义实体,公共字段
-        strategy.setSuperEntityColumns(new String[]{"test_id", "age"});
-        // 自定义 mapper 父类
-        // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");
-        // 自定义 service 父类
-        // strategy.setSuperServiceClass("com.baomidou.demo.TestService");
-        // 自定义 service 实现类父类
-        // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl");
-        // 自定义 controller 父类
-        // strategy.setSuperControllerClass("com.baomidou.demo.TestController");
-        // 【实体】是否生成字段常量(默认 false)
-        // public static final String ID = "test_id";
-        // strategy.setEntityColumnConstant(true);
-        // 【实体】是否为构建者模型(默认 false)
-        // public User setName(String name) {this.name = name; return this;}
-        // strategy.setEntityBuilderModel(true);
-        // 【实体】是否为lombok模型(默认 false)<a href="https://projectlombok.org/">document</a>
-        // strategy.setEntityLombokModel(true);
-        // Boolean类型字段是否移除is前缀处理
-        // strategy.setEntityBooleanColumnRemoveIsPrefix(true);
-        // strategy.setRestControllerStyle(true);
-        // strategy.setControllerMappingHyphenStyle(true);
-        mpg.setStrategy(strategy);
-
-        // 包配置
-        PackageConfig pc = new PackageConfig();
-        pc.setModuleName("test");
-        pc.setParent("com.baomidou");// 自定义包路径
-        pc.setController("controller");// 这里是控制器包名,默认 web
-        mpg.setPackageInfo(pc);
-
-        // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值
-        InjectionConfig cfg = new InjectionConfig() {
-            @Override
-            public void initMap() {
-                Map<String, Object> map = new HashMap<>();
-                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
-                this.setMap(map);
-            }
-        };
-        List<FileOutConfig> focList = new ArrayList<>();
-        focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
-            @Override
-            public String outputFile(TableInfo tableInfo) {
-                return "/develop/code/xml/" + tableInfo.getEntityName() + ".xml";
-            }
-        });
-        cfg.setFileOutConfigList(focList);
-        mpg.setCfg(cfg);
-
-        // 关闭默认 xml 生成,调整生成 至 根目录
-        TemplateConfig tc = new TemplateConfig();
-        tc.setXml(null);
-        mpg.setTemplate(tc);
-
-        // 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template 使用 copy
-        // 至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
-        // TemplateConfig tc = new TemplateConfig();
-        // tc.setController("...");
-        // tc.setEntity("...");
-        // tc.setMapper("...");
-        // tc.setXml("...");
-        // tc.setService("...");
-        // tc.setServiceImpl("...");
-        // mpg.setTemplate(tc);
+        // 代码生成器
+        AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
+                // 全局配置
+                new GlobalConfig()
+                        .setOutputDir("/develop/code/")//输出目录
+                        .setFileOverride(true)// 是否覆盖文件
+                        .setActiveRecord(true)// 开启 activeRecord 模式
+                        .setEnableCache(false)// XML 二级缓存
+                        .setBaseResultMap(true)// XML ResultMap
+                        .setBaseColumnList(true)// XML columList
+                        .setAuthor("Yanghu")
+                // 自定义文件命名,注意 %s 会自动填充表实体属性!
+                // .setMapperName("%sDao")
+                // .setXmlName("%sDao")
+                // .setServiceName("MP%sService")
+                // .setServiceImplName("%sServiceDiy")
+                // .setControllerName("%sAction")
+        ).setDataSource(
+                // 数据源配置
+                new DataSourceConfig()
+                        .setDbType(DbType.MYSQL)// 数据库类型
+                        .setTypeConvert(new MySqlTypeConvert() {
+                            // 自定义数据库表字段类型转换【可选】
+                            @Override
+                            public DbColumnType processTypeConvert(String fieldType) {
+                                System.out.println("转换类型:" + fieldType);
+                                // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
+                                //    return DbColumnType.BOOLEAN;
+                                // }
+                                return super.processTypeConvert(fieldType);
+                            }
+                        })
+                        .setDriverName("com.mysql.jdbc.Driver")
+                        .setUsername("root")
+                        .setPassword("521")
+                        .setUrl("jdbc:mysql://127.0.0.1:3306/mybatis-plus?characterEncoding=utf8")
+        ).setStrategy(
+                // 策略配置
+                new StrategyConfig()
+                        // .setCapitalMode(true)// 全局大写命名
+                        // .setDbColumnUnderline(true)//全局下划线命名
+                        .setTablePrefix(new String[]{"bmd_", "mp_"})// 此处可以修改为您的表前缀
+                        .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
+                        // .setInclude(new String[] { "user" }) // 需要生成的表
+                        // .setExclude(new String[]{"test"}) // 排除生成的表
+                        // 自定义实体父类
+                        // .setSuperEntityClass("com.baomidou.demo.TestEntity")
+                        // 自定义实体,公共字段
+                        .setSuperEntityColumns(new String[]{"test_id", "age"})
+                // 自定义 mapper 父类
+                // .setSuperMapperClass("com.baomidou.demo.TestMapper")
+                // 自定义 service 父类
+                // .setSuperServiceClass("com.baomidou.demo.TestService")
+                // 自定义 service 实现类父类
+                // .setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl")
+                // 自定义 controller 父类
+                // .setSuperControllerClass("com.baomidou.demo.TestController")
+                // 【实体】是否生成字段常量(默认 false)
+                // public static final String ID = "test_id";
+                // .setEntityColumnConstant(true)
+                // 【实体】是否为构建者模型(默认 false)
+                // public User setName(String name) {this.name = name; return this;}
+                // .setEntityBuilderModel(true)
+                // 【实体】是否为lombok模型(默认 false)<a href="https://projectlombok.org/">document</a>
+                // .setEntityLombokModel(true)
+                // Boolean类型字段是否移除is前缀处理
+                // .setEntityBooleanColumnRemoveIsPrefix(true)
+                // .setRestControllerStyle(true)
+                // .setControllerMappingHyphenStyle(true)
+        ).setPackageInfo(
+                // 包配置
+                new PackageConfig()
+                        .setModuleName("test")
+                        .setParent("com.baomidou")// 自定义包路径
+                        .setController("controller")// 这里是控制器包名,默认 web
+        ).setCfg(
+                // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值
+                new InjectionConfig() {
+                    @Override
+                    public void initMap() {
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
+                        this.setMap(map);
+                    }
+                }.setFileOutConfigList(Arrays.<FileOutConfig>asList(new FileOutConfig("/templates/mapper.xml.vm") {
+                    // 自定义输出文件目录
+                    @Override
+                    public String outputFile(TableInfo tableInfo) {
+                        return "/develop/code/xml/" + tableInfo.getEntityName() + ".xml";
+                    }
+                }))
+        ).setTemplate(
+                // 关闭默认 xml 生成,调整生成 至 根目录
+                new TemplateConfig().setXml(null)
+                // 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template 使用 copy
+                // 至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
+                // .setController("...");
+                // .setEntity("...");
+                // .setMapper("...");
+                // .setXml("...");
+                // .setService("...");
+                // .setServiceImpl("...");
+        );
 
         // 执行生成
         mpg.execute();
 
-        // 打印注入设置
+        // 打印注入设置,这里演示模板里面怎么获取注入内容【可无】
         System.err.println(mpg.getCfg().getMap().get("abc"));
     }