Browse Source

!52 新增DB2代码自动生成
Merge pull request !52 from littlelobo/dev

青苗 7 years ago
parent
commit
d852a1895f

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

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
 import com.baomidou.mybatisplus.generator.config.converts.OracleTypeConvert;
 import com.baomidou.mybatisplus.generator.config.converts.PostgreSqlTypeConvert;
 import com.baomidou.mybatisplus.generator.config.converts.SqlServerTypeConvert;
+import com.baomidou.mybatisplus.generator.config.querys.DB2Query;
 import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
 import com.baomidou.mybatisplus.generator.config.querys.OracleQuery;
 import com.baomidou.mybatisplus.generator.config.querys.PostgreSqlQuery;
@@ -85,6 +86,9 @@ public class DataSourceConfig {
                 case POSTGRE_SQL:
                     dbQuery = new PostgreSqlQuery();
                     break;
+                case DB2:
+                	dbQuery = new DB2Query();
+                	break;
                 default:
                     // 默认 MYSQL
                     dbQuery = new MySqlQuery();

+ 59 - 0
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/converts/DB2TypeConvert.java

@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2011-2016, 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.config.converts;
+
+import com.baomidou.mybatisplus.generator.config.ITypeConvert;
+import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
+
+/**
+ * <p>
+ * DB2 字段类型转换
+ * </p>
+ *
+ * @author zhanyao
+ * @date 2018-05-16
+ */
+public class DB2TypeConvert implements ITypeConvert {
+
+    @Override
+    public DbColumnType processTypeConvert(String fieldType) {
+        String t = fieldType.toUpperCase();
+        if (t.contains("CHAR")) {
+            return DbColumnType.STRING;
+        } else if (t.contains("DATE") || t.contains("TIMESTAMP")) {
+            return DbColumnType.DATE;
+        } else if (t.contains("NUMBER")) {
+            if (t.matches("NUMBER\\(+\\d\\)")) {
+                return DbColumnType.INTEGER;
+            } else if (t.matches("NUMBER\\(+\\d{2}+\\)")) {
+                return DbColumnType.LONG;
+            }
+            return DbColumnType.DOUBLE;
+        } else if (t.contains("FLOAT")) {
+            return DbColumnType.FLOAT;
+        } else if (t.contains("clob")) {
+            return DbColumnType.CLOB;
+        } else if (t.contains("BLOB")) {
+            return DbColumnType.OBJECT;
+        } else if (t.contains("binary")) {
+            return DbColumnType.BYTE_ARRAY;
+        } else if (t.contains("RAW")) {
+            return DbColumnType.BYTE_ARRAY;
+        }
+        return DbColumnType.STRING;
+    }
+
+}

+ 85 - 0
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/querys/DB2Query.java

@@ -0,0 +1,85 @@
+/**
+ * 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.config.querys;
+
+import com.baomidou.mybatisplus.generator.config.rules.DbType;
+
+/**
+ * <p>
+ * DB2 表数据查询
+ * </p>
+ *
+ * @author zhanyao
+ * @since 2018-05-16
+ */
+public class DB2Query extends AbstractDbQuery {
+
+
+    @Override
+    public DbType dbType() {
+        return DbType.DB2;
+    }
+
+
+    @Override
+    public String tablesSql() {
+        //return "SELECT * FROM SYSCAT.TABLES";
+        return "SELECT * FROM SYSCAT.TABLES where tabschema =current schema";
+    }
+
+
+    @Override
+    public String tableFieldsSql() {
+        return "select *  from syscat.columns where tabschema =current schema and tabname = '%s'";
+    }
+
+
+    @Override
+    public String tableName() {
+        return "TABNAME";
+    }
+
+
+    @Override
+    public String tableComment() {
+        return "REMARKS";
+    }
+
+
+    @Override
+    public String fieldName() {
+        return "COLNAME";
+    }
+
+
+    @Override
+    public String fieldType() {
+        return "TYPENAME";
+    }
+
+
+    @Override
+    public String fieldComment() {
+        return "REMARKS";
+    }
+
+
+    @Override
+    public String fieldKey() {
+        return "IDENTITY";
+    }
+
+}

+ 62 - 0
mybatis-plus-generate/src/test/java/com/baomidou/mybatisplus/test/generator/DB2Generator.java

@@ -0,0 +1,62 @@
+package com.baomidou.mybatisplus.test.generator;
+
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+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.rules.DbType;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
+public class DB2Generator {
+	
+	public static void main(String[] args) {
+		String packageName = "com.crea.gwms";
+        boolean serviceNameStartWithI = true;//user -> UserService, 设置成true: user -> IUserService
+        generateByTables(serviceNameStartWithI, packageName, "USER");
+	}
+	
+	public static void generateByTables(boolean serviceNameStartWithI, String packageName, String... tableNames) {
+        GlobalConfig config = new GlobalConfig();
+        String dbUrl = "jdbc:db2://192.168.0.227:50000/TRADECTR";
+        DataSourceConfig dataSourceConfig = new DataSourceConfig();
+        dataSourceConfig.setDbType(DbType.DB2)
+                .setUrl(dbUrl)
+                .setUsername("tc")
+                .setPassword("business")
+                .setDriverName("com.ibm.db2.jcc.DB2Driver");
+        StrategyConfig strategyConfig = new StrategyConfig();
+        strategyConfig
+                .setCapitalMode(true)
+                .setEntityLombokModel(false)
+                .setDbColumnUnderline(true)
+                .setNaming(NamingStrategy.underline_to_camel)
+                .entityTableFieldAnnotationEnable(true)//实体属性上添加表字段映射
+                .setInclude(tableNames);//修改替换成你需要的表名,多个表名传数组
+        config.setActiveRecord(true)
+                .setEnableCache(false)// XML 二级缓存
+                .setAuthor("zhanyao")
+                .setBaseResultMap(true)// XML ResultMap
+                .setBaseColumnList(false)// XML columList
+                .setOutputDir("/Users/zhanyao/Downloads/code")
+                .setFileOverride(true);
+        if (!serviceNameStartWithI) {
+            config.setServiceName("%sService");
+        }
+        new AutoGenerator().setGlobalConfig(config)
+                .setDataSource(dataSourceConfig)
+                .setStrategy(strategyConfig)
+                .setPackageInfo(
+                        new PackageConfig()
+                                .setParent(packageName)
+                                .setController("controller")
+                                .setMapper("dao")
+                                .setEntity("bean")
+                ).execute();
+    }
+
+    private void generateByTables(String packageName, String... tableNames) {
+        generateByTables(true, packageName, tableNames);
+    }
+    
+}

+ 50 - 0
mybatis-plus-generate/src/test/java/com/baomidou/mybatisplus/test/generator/DB2PageSelectTest.java

@@ -0,0 +1,50 @@
+package com.baomidou.mybatisplus.test.generator;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.rules.DbType;
+import com.ibm.db2.jcc.am.DatabaseMetaData;
+
+public class DB2PageSelectTest {
+	public static void main(String[] args) {
+		String dbUrl = "jdbc:db2://192.168.0.227:50000/TRADECTR";
+		 DataSourceConfig dataSourceConfig = new DataSourceConfig();
+	        dataSourceConfig.setDbType(DbType.DB2)
+	                .setUrl(dbUrl)
+	                .setUsername("tc")
+	                .setPassword("business")
+	                .setDriverName("com.ibm.db2.jcc.DB2Driver");
+	        Connection conn = dataSourceConfig.getConn();
+	        //我们项目中得2.1.9版本自动生成的分页查询sql,此处直接复制sql过来执行
+	        String page1 = "select * from ( select rownumber() over() as rownumber_, id AS id,name,age,address,birthday,state FROM user WHERE state='U' ) as temp_ where rownumber_ <= 10";
+	        String page2 = "select * from ( select rownumber() over() as rownumber_, id AS id,name,age,address,birthday,state FROM user WHERE state='U' ) as temp_ where rownumber_ between 10+1 and 10+10";
+	        Statement stmt;
+			try {
+				stmt = conn.createStatement();
+				DatabaseMetaData dbmd=(DatabaseMetaData) conn.getMetaData();
+				stmt.execute(page1);
+				ResultSet rs = stmt.getResultSet();
+				while(rs.next()){
+			        int id = rs.getInt(1);
+			        String name = rs.getString(2);
+			        String gender = rs.getString(3);
+			        System.out.println("id:"+id+" 年龄:"+name+" 姓名:"+gender);
+			    }
+				System.out.println("----------第二页数据-----------");
+				stmt.execute(page2);
+				rs = stmt.getResultSet();
+				while(rs.next()){
+			        int id = rs.getInt(1);
+			        String name = rs.getString(2);
+			        String gender = rs.getString(3);
+			        System.out.println("id:"+id+" 年龄:"+name+" 姓名:"+gender);
+			    }
+			} catch (SQLException e) {
+				e.printStackTrace();
+			}
+	}
+}