Jelajahi Sumber

增加sqlite代码自动生成的支持

chen_ 6 tahun lalu
induk
melakukan
cd9aff2da3

+ 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";
+    }
+}