浏览代码

Merge branch 'master' into 3.0

hubin 6 年之前
父节点
当前提交
48f2233d90

+ 1 - 0
build.gradle

@@ -68,6 +68,7 @@ ext {
         "oracle"                : fileTree(dir: 'libs', includes: ['ojdbc-11.2.0.3-jdk16.jar']),
         "h2"                    : "com.h2database:h2:1.4.197",
         "mysql"                 : "mysql:mysql-connector-java:8.0.15",
+        "sqlite"                : "org.xerial:sqlite-jdbc:3.27.2.1",
         //code generator
         "velocity"              : "org.apache.velocity:velocity-engine-core:2.0",
         "freemarker"            : "org.freemarker:freemarker:2.3.28",

+ 1 - 0
mybatis-plus-generator/build.gradle

@@ -10,6 +10,7 @@ dependencies {
     testCompile lib.oracle as ConfigurableFileTree
     testCompile "${lib.h2}"
     testCompile "${lib.mysql}"
+    testCompile "${lib.sqlite}"
     testCompile "${lib.'logback-classic'}"
     testCompile "${lib.'swagger-annotations'}"
 }

+ 3 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/DataSourceConfig.java

@@ -90,6 +90,9 @@ public class DataSourceConfig {
                 case H2:
                     dbQuery = new H2Query();
                     break;
+                case SQLITE:
+                    dbQuery = new SqliteQuery();
+                    break;
                 default:
                     // 默认 MYSQL
                     dbQuery = new MySqlQuery();

+ 22 - 11
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -95,8 +95,10 @@ public class ConfigBuilder {
      * 注入配置信息
      */
     private InjectionConfig injectionConfig;
-
-
+    /**
+     * 是否支持注释
+     */
+    private boolean commentSupported;
     /**
      * 在构造器中处理配置
      *
@@ -134,6 +136,9 @@ public class ConfigBuilder {
         } else {
             this.strategyConfig = strategyConfig;
         }
+        //SQLITE 数据库不支持注释获取
+        commentSupported = !dataSourceConfig.getDbType().equals(DbType.SQLITE);
+
         handlerStrategy(this.strategyConfig);
     }
 
@@ -454,14 +459,18 @@ public class ConfigBuilder {
                 while (results.next()) {
                     String tableName = results.getString(dbQuery.tableName());
                     if (StringUtils.isNotEmpty(tableName)) {
-                        String tableComment = results.getString(dbQuery.tableComment());
-                        if (config.isSkipView() && "VIEW".equals(tableComment)) {
-                            // 跳过视图
-                            continue;
-                        }
                         tableInfo = new TableInfo();
                         tableInfo.setName(tableName);
-                        tableInfo.setComment(tableComment);
+
+                        if (commentSupported) {
+                            String tableComment = results.getString(dbQuery.tableComment());
+                            if (config.isSkipView() && "VIEW".equals(tableComment)) {
+                                // 跳过视图
+                                continue;
+                            }
+                            tableInfo.setComment(tableComment);
+                        }
+
                         if (isInclude) {
                             for (String includeTable : config.getInclude()) {
                                 // 忽略大小写等于 或 正则 true
@@ -574,7 +583,7 @@ public class ConfigBuilder {
                         isId = h2PkColumns.contains(columnName);
                     } else {
                         String key = results.getString(dbQuery.fieldKey());
-                        if (DbType.DB2 == dbType) {
+                        if (DbType.DB2 == dbType || DbType.SQLITE == dbType) {
                             isId = StringUtils.isNotEmpty(key) && "1".equals(key);
                         } else {
                             isId = StringUtils.isNotEmpty(key) && "PRI".equals(key.toUpperCase());
@@ -584,7 +593,7 @@ public class ConfigBuilder {
                     // 处理ID
                     if (isId && !haveId) {
                         field.setKeyFlag(true);
-                        if (DbType.H2 == dbType || dbQuery.isKeyIdentity(results)) {
+                        if (DbType.H2 == dbType || DbType.SQLITE == dbType|| dbQuery.isKeyIdentity(results)) {
                             field.setKeyIdentityFlag(true);
                         }
                         haveId = true;
@@ -610,7 +619,9 @@ public class ConfigBuilder {
                         field.setPropertyName(strategyConfig, processName(field.getName(), config.getNaming()));
                     }
                     field.setColumnType(dataSourceConfig.getTypeConvert().processTypeConvert(globalConfig, field.getType()));
-                    field.setComment(results.getString(dbQuery.fieldComment()));
+                    if (commentSupported) {
+                        field.setComment(results.getString(dbQuery.fieldComment()));
+                    }
                     if (strategyConfig.includeSuperEntityColumns(field.getName())) {
                         // 跳过公共字段
                         commonFieldList.add(field);

+ 65 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/converts/SqliteTypeConvert.java

@@ -0,0 +1,65 @@
+package com.baomidou.mybatisplus.generator.config.converts;
+
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.ITypeConvert;
+import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
+import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
+/**
+ * SQLite 字段类型转换
+ *
+ * @author chen_wj
+ * @since 2019-05-08
+ */
+public class SqliteTypeConvert implements ITypeConvert {
+    @Override
+    public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
+        String t = fieldType.toLowerCase();
+       if (t.contains("bigint")) {
+            return DbColumnType.LONG;
+        } else if (t.contains("tinyint(1)") || t.contains("boolean")) {
+            return DbColumnType.BOOLEAN;
+        } else if (t.contains("int")) {
+            return DbColumnType.INTEGER;
+        } else if (t.contains("text") || t.contains("char") || t.contains("enum") || t.contains("set")) {
+            return DbColumnType.STRING;
+        } else if (t.contains("decimal") || t.contains("numeric")) {
+            return DbColumnType.BIG_DECIMAL;
+        } else if (t.contains("clob")) {
+            return DbColumnType.CLOB;
+        } else if (t.contains("blob")) {
+           return DbColumnType.BLOB;
+       } else if (t.contains("float")) {
+            return DbColumnType.FLOAT;
+        } else if (t.contains("double")) {
+            return DbColumnType.DOUBLE;
+        } else if (t.contains("date") || t.contains("time") || t.contains("year")) {
+            switch (globalConfig.getDateType()) {
+                case ONLY_DATE:
+                    return DbColumnType.DATE;
+                case SQL_PACK:
+                    switch (t) {
+                        case "date":
+                            return DbColumnType.DATE_SQL;
+                        case "time":
+                            return DbColumnType.TIME;
+                        case "year":
+                            return DbColumnType.DATE_SQL;
+                        default:
+                            return DbColumnType.TIMESTAMP;
+                    }
+                case TIME_PACK:
+                    switch (t) {
+                        case "date":
+                            return DbColumnType.LOCAL_DATE;
+                        case "time":
+                            return DbColumnType.LOCAL_TIME;
+                        case "year":
+                            return DbColumnType.YEAR;
+                        default:
+                            return DbColumnType.LOCAL_DATE_TIME;
+                    }
+            }
+        }
+        return DbColumnType.STRING;
+    }
+}

+ 57 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/SqliteQuery.java

@@ -0,0 +1,57 @@
+package com.baomidou.mybatisplus.generator.config.querys;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class SqliteQuery extends AbstractDbQuery {
+    @Override
+    public DbType dbType() {
+        return DbType.SQLITE;
+    }
+
+    @Override
+    public String tablesSql() {
+        return "select * from sqlite_master where type='table'";
+    }
+
+    @Override
+    public String tableFieldsSql() {
+        return "pragma table_info('%s');";
+    }
+
+    @Override
+    public String tableName() {
+        return "name";
+    }
+
+
+    @Override
+    public String tableComment() {
+        return "";
+    }
+
+
+    @Override
+    public String fieldName() {
+        return "name";
+    }
+
+
+    @Override
+    public String fieldType() {
+        return "type";
+    }
+
+
+    @Override
+    public String fieldComment() {
+        return "";
+    }
+
+    @Override
+    public String fieldKey() {
+        return "pk";
+    }
+}

+ 114 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/SqliteGeneratorTest.java

@@ -0,0 +1,114 @@
+package com.baomidou.mybatisplus.test.generator;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.InjectionConfig;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
+public class SqliteGeneratorTest {
+
+    /**
+     * <p>
+     * 读取控制台内容
+     * </p>
+     */
+    public static String scanner(String tip) {
+        Scanner scanner = new Scanner(System.in);
+        StringBuilder help = new StringBuilder();
+        help.append("请输入" + tip + ":");
+        System.out.println(help.toString());
+        if (scanner.hasNext()) {
+            String ipt = scanner.next();
+            if (StringUtils.isNotEmpty(ipt)) {
+                return ipt;
+            }
+        }
+        throw new MybatisPlusException("请输入正确的" + tip + "!");
+    }
+
+    public static void main(String[] args) {
+        // 代码生成器
+        AutoGenerator mpg = new AutoGenerator();
+
+        // 全局配置
+        GlobalConfig gc = new GlobalConfig();
+        Path resourceDirectory = Paths.get("mybatis-plus-generator/src", "test", "resources");
+        Path sqliteGenertorPath = Paths.get("mybatis-plus-generator/sqliteGeneratorCode");
+//            String projectPath = System.getProperty("user.dir") + "/sqliteGenertorCode";
+        gc.setOutputDir(sqliteGenertorPath + "/src/main/java");
+        gc.setAuthor("chen_wj");
+        gc.setOpen(false);
+        mpg.setGlobalConfig(gc);
+
+        // 数据源配置
+        DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setDriverName("org.sqlite.JDBC");
+        dsc.setUrl("jdbc:sqlite:" + resourceDirectory.toAbsolutePath() + "/sqlite/example.db");    //测试用
+        dsc.setDbType(DbType.SQLITE);
+        mpg.setDataSource(dsc);
+
+        // 包配置
+        PackageConfig pc = new PackageConfig();
+//        pc.setModuleName(scanner("模块名"));
+        pc.setModuleName("test");
+        mpg.setPackageInfo(pc);
+
+        // 自定义配置
+        InjectionConfig cfg = new InjectionConfig() {
+            @Override
+            public void initMap() {
+                // to do nothing
+            }
+        };
+
+        // 如果模板引擎是 freemarker
+        String templatePath = "/templates/mapper.xml.ftl";
+
+        // 自定义输出配置
+        List<FileOutConfig> focList = new ArrayList<>();
+        // 自定义配置会被优先输出
+        focList.add(new FileOutConfig(templatePath) {
+            @Override
+            public String outputFile(TableInfo tableInfo) {
+                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
+                return sqliteGenertorPath + "/src/main/resources/mapper/" + pc.getModuleName()
+                    + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
+            }
+        });
+        cfg.setFileOutConfigList(focList);
+        mpg.setCfg(cfg);
+
+        // 配置模板
+        TemplateConfig templateConfig = new TemplateConfig();
+
+        templateConfig.setXml(null);
+        mpg.setTemplate(templateConfig);
+
+        // 策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setNaming(NamingStrategy.underline_to_camel);
+        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
+        strategy.setEntityLombokModel(true);
+        strategy.setRestControllerStyle(true);
+//        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
+        strategy.setInclude(new String[]{"httpstatus", "User"});
+        strategy.setControllerMappingHyphenStyle(true);
+        mpg.setStrategy(strategy);
+        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
+        mpg.execute();
+    }
+
+}

二进制
mybatis-plus-generator/src/test/resources/sqlite/example.db