ソースを参照

增强代码生成功能

shuzheng 9 年 前
コミット
516a3376c5

+ 1 - 1
zheng-common/src/main/java/com/zheng/common/util/JdbcUtil.java

@@ -23,7 +23,6 @@ public class JdbcUtil {
 	public JdbcUtil(String driver, String url, String username, String password) {
 		try {
 			Class.forName(driver);
-			System.out.println("注册驱动成功!!");
 			conn = DriverManager.getConnection(url, username, password);
 			System.out.println("数据库连接成功");
 		} catch (Exception e) {
@@ -84,6 +83,7 @@ public class JdbcUtil {
 		} catch (SQLException e) {
 			e.printStackTrace();
 		}
+		System.out.println("释放数据库连接");
 	}
 
 }

+ 65 - 0
zheng-common/src/main/java/com/zheng/common/util/MybatisGeneratorConfigUtil.java

@@ -0,0 +1,65 @@
+package com.zheng.common.util;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.velocity.VelocityContext;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 代码生成类
+ * Created by ZhangShuzheng on 2017/1/10.
+ */
+public class MybatisGeneratorConfigUtil {
+
+	// 模板路径
+	private static String VM_PATH = "zheng-common/src/main/resources/generatorConfig.vm";
+	// 项目名称
+	private static String PROJECT_NAME = "zheng";
+	// 数据库名称
+	private static String DATABASE_NAME = "zheng";
+
+	/**
+	 * 根据模板生成generatorConfig.xml文件
+	 * @param module_prefix_name
+	 */
+	public static void generator(
+			String jdbc_driver,
+			String jdbc_url,
+			String jdbc_username,
+			String jdbc_password,
+			String module_prefix_name) {
+		String module_path = PROJECT_NAME + "-" + module_prefix_name + "/" + PROJECT_NAME + "-" + module_prefix_name + "-dao/src/main/resources/generatorConfig.xml";
+		String sql = "SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '" + DATABASE_NAME + "' AND table_name LIKE '" + module_prefix_name + "_%';";
+		System.out.println("========== 开始生成代码 ==========");
+		try {
+			VelocityContext context= new VelocityContext();
+			List<Map<String, Object>> tables = new ArrayList<>();
+			Map<String, Object> table = null;
+
+			// 查询定制前缀项目的所有表
+			JdbcUtil jdbcUtil = new JdbcUtil(jdbc_driver, jdbc_url, jdbc_username, jdbc_password);
+			List<Map> result = jdbcUtil.selectByParams(sql, null);
+			for (Map map : result) {
+				System.out.println(map.get("TABLE_NAME"));
+				table = new HashMap<>();
+				table.put("table_name", map.get("TABLE_NAME"));
+				table.put("model_name", StringUtil.lineToHump(ObjectUtils.toString(map.get("TABLE_NAME"))));
+				tables.add(table);
+			}
+			jdbcUtil.release();
+
+			context.put("tables", tables);
+			context.put("generator_javaModelGenerator_targetPackage", "com." + PROJECT_NAME + "." + module_prefix_name + ".dao.model");
+			context.put("generator_sqlMapGenerator_targetPackage", "com." + PROJECT_NAME + "." + module_prefix_name + ".dao.mapper");
+			context.put("generator_javaClientGenerator_targetPackage", "com." + PROJECT_NAME + "." + module_prefix_name + ".dao.mapper");
+			VelocityUtil.generate(VM_PATH, module_path, context);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		System.out.println("========== 结束生成代码 ==========");
+	}
+
+}

+ 55 - 0
zheng-common/src/main/java/com/zheng/common/util/StringUtil.java

@@ -1,11 +1,64 @@
 package com.zheng.common.util;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * String 工具类
  * Created by shuzheng on 2016/12/07.
  */
 public class StringUtil {
 
+    private static Pattern linePattern = Pattern.compile("_(\\w)");
+    private static Pattern humpPattern = Pattern.compile("[A-Z]");
+
+    /**
+     * 下划线转驼峰
+     * @param str
+     * @return
+     */
+    public static String lineToHump(String str) {
+        if (null == str || "".equals(str)) {
+            return str;
+        }
+        str = str.toLowerCase();
+        Matcher matcher = linePattern.matcher(str);
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
+        }
+        matcher.appendTail(sb);
+
+        str = sb.toString();
+        str = str.substring(0, 1).toUpperCase() + str.substring(1);
+
+        return str;
+    }
+
+    /**
+     * 驼峰转下划线(简单写法,效率低于{@link #humpToLine2(String)})
+     * @param str
+     * @return
+     */
+    public static String humpToLine(String str) {
+        return str.replaceAll("[A-Z]", "_$0").toLowerCase();
+    }
+
+    /**
+     * 驼峰转下划线,效率比上面高
+     * @param str
+     * @return
+     */
+    public static String humpToLine2(String str) {
+        Matcher matcher = humpPattern.matcher(str);
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
+        }
+        matcher.appendTail(sb);
+        return sb.toString();
+    }
+
     /**
      * object转String
      * @param object
@@ -73,6 +126,8 @@ public class StringUtil {
         System.out.println(getInt("1"));
         System.out.println(getInt("xx"));
         System.out.println(getInt("xx", 4));
+
+        System.out.println(lineToHump("cms_article_test"));
     }
 
 }

+ 3 - 3
zheng-common/src/main/resources/generatorConfig.vm

@@ -55,13 +55,13 @@
                         password="${jdbc.password}" />
 
         <!-- model生成 -->
-        <javaModelGenerator targetPackage="${generator.javaModelGenerator.targetPackage}" targetProject="src/main/java" />
+        <javaModelGenerator targetPackage="${generator_javaModelGenerator_targetPackage}" targetProject="src/main/java" />
 
         <!-- MapperXML生成 -->
-        <sqlMapGenerator targetPackage="${generator.sqlMapGenerator.targetPackage}" targetProject="src/main/java" />
+        <sqlMapGenerator targetPackage="${generator_sqlMapGenerator_targetPackage}" targetProject="src/main/java" />
 
         <!-- Mapper接口生成 -->
-        <javaClientGenerator targetPackage="${generator.javaClientGenerator.targetPackage}" targetProject="src/main/java" type="XMLMAPPER" />
+        <javaClientGenerator targetPackage="${generator_javaClientGenerator_targetPackage}" targetProject="src/main/java" type="XMLMAPPER" />
 
         <!-- 需要映射的表 -->
         #foreach($table in $tables)