Browse Source

github #385 support code generation for oracle schema

yuxiaobin 7 years ago
parent
commit
35ffeddb84

+ 2 - 3
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/AutoGenerator.java

@@ -18,7 +18,6 @@ package com.baomidou.mybatisplus.generator;
 import java.io.Serializable;
 import java.util.List;
 
-import com.baomidou.mybatisplus.extension.activerecord.Model;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,13 +25,13 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.Version;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 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;
-import com.baomidou.mybatisplus.generator.config.po.TableField;
 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
 import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
@@ -142,7 +141,7 @@ public class AutoGenerator {
                 // 表注解
                 tableInfo.setImportPackages(TableName.class.getCanonicalName());
             }
-            if (tableInfo.isLogicDelete(config.getStrategyConfig().getLogicDeleteFieldName())) {
+            if (config.getStrategyConfig().getLogicDeleteFieldName() != null && tableInfo.isLogicDelete(config.getStrategyConfig().getLogicDeleteFieldName())) {
                 // 逻辑删除注解
                 tableInfo.setImportPackages(TableLogic.class.getCanonicalName());
             }

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

@@ -59,7 +59,7 @@ public class DataSourceConfig {
     /**
      * PostgreSQL schemaname
      */
-    private String schemaname = "public";
+    private String schemaname;
     /**
      * 类型转换
      */

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

@@ -427,19 +427,30 @@ public class ConfigBuilder {
         try {
             String tablesSql = dbQuery.tablesSql();
             if (DbType.POSTGRE_SQL == dbQuery.dbType()) {
-                tablesSql = String.format(tablesSql, dataSourceConfig.getSchemaname());
+                String schema = dataSourceConfig.getSchemaname();
+                if (schema == null) {
+                    schema = "public";//pg默认schema=public
+                    dataSourceConfig.setSchemaname(schema);
+                }
+                tablesSql = String.format(tablesSql, schema);
             }
             //oracle数据库表太多,出现最大游标错误
             else if (DbType.ORACLE == dbQuery.dbType()) {
+                String schema = dataSourceConfig.getSchemaname();
+                if (schema == null) {//oracle默认用户的schema=username
+                    schema = dataSourceConfig.getUsername().toUpperCase();
+                    dataSourceConfig.setSchemaname(schema);
+                }
+                tablesSql = String.format(tablesSql, schema);
                 if (isInclude) {
                     StringBuilder sb = new StringBuilder(tablesSql);
-                    sb.append(" WHERE ").append(dbQuery.tableName()).append(" IN (");
+                    sb.append(" AND ").append(dbQuery.tableName()).append(" IN (");
                     Arrays.stream(config.getInclude()).forEach(tbname -> sb.append("'").append(tbname.toUpperCase()).append("',"));
                     sb.replace(sb.length() - 1, sb.length(), ")");
                     tablesSql = sb.toString();
                 } else if (isExclude) {
                     StringBuilder sb = new StringBuilder(tablesSql);
-                    sb.append(" WHERE ").append(dbQuery.tableName()).append(" NOT IN (");
+                    sb.append(" AND ").append(dbQuery.tableName()).append(" NOT IN (");
                     Arrays.stream(config.getExclude()).forEach(tbname -> sb.append("'").append(tbname.toUpperCase()).append("',"));
                     sb.replace(sb.length() - 1, sb.length(), ")");
                     tablesSql = sb.toString();
@@ -554,6 +565,8 @@ public class ConfigBuilder {
             String tableFieldsSql = dbQuery.tableFieldsSql();
             if (DbType.POSTGRE_SQL == dbQuery.dbType()) {
                 tableFieldsSql = String.format(tableFieldsSql, dataSourceConfig.getSchemaname(), tableInfo.getName());
+            } else if (DbType.ORACLE == dbQuery.dbType()) {
+                tableFieldsSql = String.format(tableFieldsSql.replace("#schema", dataSourceConfig.getSchemaname()), tableInfo.getName());
             } else {
                 tableFieldsSql = String.format(tableFieldsSql, tableInfo.getName());
             }

+ 6 - 6
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/OracleQuery.java

@@ -36,7 +36,7 @@ public class OracleQuery extends AbstractDbQuery {
 
     @Override
     public String tablesSql() {
-        return "SELECT * FROM USER_TAB_COMMENTS";
+        return "SELECT * FROM ALL_TAB_COMMENTS WHERE OWNER='%s'";
     }
 
 
@@ -47,11 +47,11 @@ public class OracleQuery extends AbstractDbQuery {
             + "WHEN NVL(A.DATA_SCALE, 0) > 0 THEN A.DATA_TYPE||'('||A.DATA_PRECISION||','||A.DATA_SCALE||')' "
             + "ELSE A.DATA_TYPE||'('||A.DATA_PRECISION||')' END) "
             + "ELSE A.DATA_TYPE END DATA_TYPE, B.COMMENTS,DECODE(C.POSITION, '1', 'PRI') KEY "
-            + "FROM USER_TAB_COLUMNS A INNER JOIN USER_COL_COMMENTS B ON A.TABLE_NAME = B.TABLE_NAME"
-            + " AND A.COLUMN_NAME = B.COLUMN_NAME LEFT JOIN USER_CONSTRAINTS D "
-            + "ON D.TABLE_NAME = A.TABLE_NAME AND D.CONSTRAINT_TYPE = 'P' "
-            + "LEFT JOIN USER_CONS_COLUMNS C ON C.CONSTRAINT_NAME = D.CONSTRAINT_NAME "
-            + "AND C.COLUMN_NAME=A.COLUMN_NAME WHERE A.TABLE_NAME = '%s' ORDER BY A.COLUMN_ID ";
+            + "FROM ALL_TAB_COLUMNS A "
+            + " INNER JOIN ALL_COL_COMMENTS B ON A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME AND B.OWNER = '#schema'"
+            + " LEFT JOIN ALL_CONSTRAINTS D ON D.TABLE_NAME = A.TABLE_NAME AND D.CONSTRAINT_TYPE = 'P' AND D.OWNER = '#schema'"
+            + " LEFT JOIN ALL_CONS_COLUMNS C ON C.CONSTRAINT_NAME = D.CONSTRAINT_NAME AND C.COLUMN_NAME=A.COLUMN_NAME AND C.OWNER = '#schema'"
+            + "WHERE A.OWNER = '#schema' AND A.TABLE_NAME = '%s' ORDER BY A.COLUMN_ID ";
     }