Ver código fonte

优化代码生成器

ZhouChenglin 7 anos atrás
pai
commit
797f604982

+ 3 - 0
src/main/java/net/chenlin/dp/common/utils/DateUtils.java

@@ -15,6 +15,9 @@ public class DateUtils {
 	
 	/** 时间格式(yyyy-MM-dd) */
 	public final static String DATE_PATTERN = "yyyy-MM-dd";
+
+	/** 时间格式(yyyy/MM/dd) */
+	public final static String DATE_PATTERN_SLASH = "yyyy/MM/dd";
 	
 	/** 时间格式(yyyy-MM-dd HH:mm:ss) */
 	public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

+ 117 - 0
src/main/java/net/chenlin/dp/common/utils/PropertiesUtils.java

@@ -0,0 +1,117 @@
+package net.chenlin.dp.common.utils;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * 资源文件读取工具
+ * @author ZhouChenglin
+ * @date 2017/12/14
+ */
+public class PropertiesUtils {
+
+    /**
+     * 当打开多个资源文件时,缓存资源文件
+     */
+    private static HashMap<String, PropertiesUtils> configMap = new HashMap<String, PropertiesUtils>(16);
+
+    /**
+     * 打开文件时间,判断超时使用
+     */
+    private Date loadTime = null;
+
+    /**
+     * 资源文件
+     */
+    private ResourceBundle resourceBundle = null;
+
+    /**
+     * 默认资源文件名称
+     */
+    private static final String NAME = "config";
+
+    /**
+     * 缓存时间
+     */
+    private static final Integer TIME_OUT = 60 * 1000;
+
+    /**
+     * 私有构造方法,创建单例
+     * @param name
+     */
+    private PropertiesUtils(String name) {
+        this.loadTime = new Date();
+        this.resourceBundle = ResourceBundle.getBundle(name);
+    }
+
+    public static synchronized PropertiesUtils getInstance() {
+        return getInstance(NAME);
+    }
+
+    public static synchronized PropertiesUtils getInstance(String name) {
+        PropertiesUtils conf = configMap.get(name);
+        if (null == conf) {
+            conf = new PropertiesUtils(name);
+            configMap.put(name, conf);
+        }
+        // 判断是否打开的资源文件是否超时1分钟
+        if ((System.currentTimeMillis() - conf.getLoadTime().getTime()) > TIME_OUT) {
+            conf = new PropertiesUtils(name);
+            configMap.put(name, conf);
+        }
+        return conf;
+    }
+
+    /**
+     * 根据key读取value
+     * @param key
+     * @return
+     */
+    public String get(String key) {
+        try {
+            String value = resourceBundle.getString(key);
+            return value;
+        } catch (MissingResourceException e) {
+            return "";
+        }
+    }
+
+    /**
+     * 根据key读取value(整型)
+     * @param key
+     * @return
+     */
+    public Integer getInt(String key) {
+        try {
+            String value = resourceBundle.getString(key);
+            return Integer.parseInt(value);
+        } catch (MissingResourceException e) {
+            return null;
+        }
+    }
+
+    /**
+     * 根据key读取value(布尔值)
+     * @param key
+     * @return
+     */
+    public boolean getBool(String key) {
+        String flag = "true";
+        try {
+            String value = resourceBundle.getString(key);
+            if (flag.equals(value)) {
+                return true;
+            }
+            return false;
+        } catch (MissingResourceException e) {
+            return false;
+        }
+    }
+
+    public Date getLoadTime() {
+        return loadTime;
+    }
+
+}

+ 26 - 0
src/main/java/net/chenlin/dp/modules/generator/constant/GenConstant.java

@@ -0,0 +1,26 @@
+package net.chenlin.dp.modules.generator.constant;
+
+/**
+ * 代码生成器常量
+ * @author ZhouChenglin
+ * @date 2018/1/8
+ */
+public class GenConstant {
+
+    public static final String JAVA_ENTITY = "Entity.java.vm";
+    public static final String JAVA_MAPPER = "Mapper.java.vm";
+    public static final String XML_MAPPER = "Mapper.xml.vm";
+    public static final String JAVA_MANAGER = "Manager.java.vm";
+    public static final String JAVA_MANAGER_IMPL = "ManagerImpl.java.vm";
+    public static final String JAVA_SERVICE = "Service.java.vm";
+    public static final String JAVA_SERVICE_IMPL = "ServiceImpl.java.vm";
+    public static final String JAVA_CONTROLLER = "Controller.java.vm";
+    public static final String HTML_LIST = "list.html.vm";
+    public static final String HTML_ADD = "add.html.vm";
+    public static final String HTML_EDIT = "edit.html.vm";
+    public static final String JS_LIST = "list.js.vm";
+    public static final String JS_ADD = "add.js.vm";
+    public static final String JS_EDIT = "edit.js.vm";
+    public static final String SQL_MENU = "menu.sql.vm";
+
+}

+ 55 - 55
src/main/java/net/chenlin/dp/modules/generator/utils/GenUtils.java

@@ -12,6 +12,8 @@ import java.util.Properties;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
+import net.chenlin.dp.common.utils.PropertiesUtils;
+import net.chenlin.dp.modules.generator.constant.GenConstant;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.PropertiesConfiguration;
@@ -63,22 +65,28 @@ public class GenUtils {
 	 */
 	public static void generatorCode(TableEntity table, List<ColumnEntity> columns, GeneratorParamEntity params,
 			ZipOutputStream zip) {
-		// 配置信息
-		Configuration config = getConfig();
 
 		// 表名转换成Java类名
-		String className = tableToJava(table.getTableName(), config.getString("tablePrefix"));// sys_user -> SysUser
-		table.setClassName(className);// SysUser
-		table.setObjName(StringUtils.uncapitalize(className));// sysUser
+
+		// sys_user -> SysUser
+		String className = tableToJava(table.getTableName(), PropertiesUtils.getInstance("velocity/generator").get("tablePrefix"));
+		// SysUser
+		table.setClassName(className);
+		// sysUser
+		table.setObjName(StringUtils.uncapitalize(className));
 
 		// 列信息
 		for (ColumnEntity column : columns) {
 			// 列名转换,java属性名及对应方法名
-			String columnName = columnToJava(column.getColumnName());// user_id -> UserId
-			column.setFieldName(StringUtils.uncapitalize(columnName));// userId
-			column.setMethodName(columnName);// UserId
+
+			// user_id -> UserId
+			String columnName = columnToJava(column.getColumnName());
+			// userId
+			column.setFieldName(StringUtils.uncapitalize(columnName));
+			// UserId
+			column.setMethodName(columnName);
 			// 列数据类型转换
-			String fieldType = config.getString(column.getDataType(), "unknowType");
+			String fieldType = PropertiesUtils.getInstance("velocity/generator").get(column.getDataType());
 			column.setFieldType(fieldType);
 			// 主键判断
 			if ("PRI".equals(column.getColumnKey()) && table.getPk() == null) {
@@ -109,11 +117,11 @@ public class GenUtils {
 		map.put("viewPath", params.getViewPath());
 		map.put("authKey", urlToAuthKey(params.getRequestMapping()));
 		map.put("columns", table.getColumns());
-		map.put("package", config.getString("package"));
+		map.put("package", PropertiesUtils.getInstance("velocity/generator").get("package"));
 		map.put("module", params.getModule());
-		map.put("author", config.getString("author"));
-		map.put("email", config.getString("email"));
-		map.put("url", config.getString("url"));
+		map.put("author", PropertiesUtils.getInstance("velocity/generator").get("author"));
+		map.put("email", PropertiesUtils.getInstance("velocity/generator").get("email"));
+		map.put("url", PropertiesUtils.getInstance("velocity/generator").get("url"));
 		map.put("datetime", DateUtils.format(new Date(), DateUtils.DATE_TIME_CHN_PATTERN));
 		VelocityContext context = new VelocityContext(map);
 
@@ -129,7 +137,7 @@ public class GenUtils {
 				// 添加到zip
 				if ("1".equals(params.getType())) {
 					zip.putNextEntry(new ZipEntry(getFileName(template, table.getClassName(), params.getModule(),
-							params.getFunctionCode(), config.getString("package"))));
+							params.getFunctionCode(), PropertiesUtils.getInstance("velocity/generator").get("package"))));
 				} else {
 					zip.putNextEntry(new ZipEntry(getFileName(template, table.getClassName())));
 				}
@@ -169,17 +177,6 @@ public class GenUtils {
 		return url.replace("/", ":");
 	}
 
-	/**
-	 * 获取配置信息
-	 */
-	public static Configuration getConfig() {
-		try {
-			return new PropertiesConfiguration("velocity/generator.properties");
-		} catch (ConfigurationException e) {
-			throw new RRException("获取配置文件失败,", e);
-		}
-	}
-
 	/**
 	 * 获取文件名,不带包名
 	 * 
@@ -189,63 +186,63 @@ public class GenUtils {
 	 */
 	public static String getFileName(String template, String className) {
 		String packagePath = "java" + File.separator;
-		if (template.contains("Entity.java.vm")) {
+		if (template.contains(GenConstant.JAVA_ENTITY)) {
 			return packagePath + className + "Entity.java";
 		}
 
-		if (template.contains("Mapper.java.vm")) {
+		if (template.contains(GenConstant.JAVA_MAPPER)) {
 			return packagePath + className + "Mapper.java";
 		}
 
-		if (template.contains("Mapper.xml.vm")) {
+		if (template.contains(GenConstant.XML_MAPPER)) {
 			return packagePath + className + "Mapper.xml";
 		}
 
-		if (template.contains("Manager.java.vm")) {
+		if (template.contains(GenConstant.JAVA_MANAGER)) {
 			return packagePath + className + "Manager.java";
 		}
 
-		if (template.contains("ManagerImpl.java.vm")) {
+		if (template.contains(GenConstant.JAVA_MANAGER_IMPL)) {
 			return packagePath + className + "ManagerImpl.java";
 		}
 
-		if (template.contains("Service.java.vm")) {
+		if (template.contains(GenConstant.JAVA_SERVICE)) {
 			return packagePath + className + "Service.java";
 		}
 
-		if (template.contains("ServiceImpl.java.vm")) {
+		if (template.contains(GenConstant.JAVA_SERVICE_IMPL)) {
 			return packagePath + className + "ServiceImpl.java";
 		}
 
-		if (template.contains("Controller.java.vm")) {
+		if (template.contains(GenConstant.JAVA_CONTROLLER)) {
 			return packagePath + className + "Controller.java";
 		}
 
-		if (template.contains("list.html.vm")) {
+		if (template.contains(GenConstant.HTML_LIST)) {
 			return "view" + File.separator + "list.html";
 		}
 
-		if (template.contains("add.html.vm")) {
+		if (template.contains(GenConstant.HTML_ADD)) {
 			return "view" + File.separator + "add.html";
 		}
 
-		if (template.contains("edit.html.vm")) {
+		if (template.contains(GenConstant.HTML_EDIT)) {
 			return "view" + File.separator + "edit.html";
 		}
 
-		if (template.contains("list.js.vm")) {
+		if (template.contains(GenConstant.JS_LIST)) {
 			return "js" + File.separator + "list.js";
 		}
 
-		if (template.contains("add.js.vm")) {
+		if (template.contains(GenConstant.JS_ADD)) {
 			return "js" + File.separator + "add.js";
 		}
 
-		if (template.contains("edit.js.vm")) {
+		if (template.contains(GenConstant.JS_EDIT)) {
 			return "js" + File.separator + "edit.js";
 		}
 
-		if (template.contains("menu.sql.vm")) {
+		if (template.contains(GenConstant.SQL_MENU)) {
 			return className.toLowerCase() + "_menu.sql";
 		}
 
@@ -262,63 +259,63 @@ public class GenUtils {
 			packagePath += packageName.replace(".", File.separator) + File.separator + "modules" + File.separator + module + File.separator;
 		}
 
-		if (template.contains("Entity.java.vm")) {
+		if (template.contains(GenConstant.JAVA_ENTITY)) {
 			return packagePath + "entity" + File.separator + className + "Entity.java";
 		}
 
-		if (template.contains("Mapper.java.vm")) {
+		if (template.contains(GenConstant.JAVA_MAPPER)) {
 			return packagePath + "dao" + File.separator + className + "Mapper.java";
 		}
 
-		if (template.contains("Mapper.xml.vm")) {
+		if (template.contains(GenConstant.XML_MAPPER)) {
 			return packagePath + "dao" + File.separator + className + "Mapper.xml";
 		}
 
-		if (template.contains("Manager.java.vm")) {
+		if (template.contains(GenConstant.JAVA_MANAGER)) {
 			return packagePath + "manager" + File.separator + className + "Manager.java";
 		}
 
-		if (template.contains("ManagerImpl.java.vm")) {
+		if (template.contains(GenConstant.JAVA_MANAGER_IMPL)) {
 			return packagePath + "manager" + File.separator + "impl" + File.separator + className + "ManagerImpl.java";
 		}
 
-		if (template.contains("Service.java.vm")) {
+		if (template.contains(GenConstant.JAVA_SERVICE)) {
 			return packagePath + "service" + File.separator + className + "Service.java";
 		}
 
-		if (template.contains("ServiceImpl.java.vm")) {
+		if (template.contains(GenConstant.JAVA_SERVICE_IMPL)) {
 			return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
 		}
 
-		if (template.contains("Controller.java.vm")) {
+		if (template.contains(GenConstant.JAVA_CONTROLLER)) {
 			return packagePath + "controller" + File.separator + className + "Controller.java";
 		}
 
-		if (template.contains("list.html.vm")) {
+		if (template.contains(GenConstant.HTML_LIST)) {
 			return "view" + File.separator + functionCode + File.separator + "list.html";
 		}
 
-		if (template.contains("add.html.vm")) {
+		if (template.contains(GenConstant.HTML_ADD)) {
 			return "view" + File.separator + functionCode + File.separator + "add.html";
 		}
 
-		if (template.contains("edit.html.vm")) {
+		if (template.contains(GenConstant.HTML_EDIT)) {
 			return "view" + File.separator + functionCode + File.separator + "edit.html";
 		}
 
-		if (template.contains("list.js.vm")) {
+		if (template.contains(GenConstant.JS_LIST)) {
 			return "js" + File.separator + functionCode + File.separator + "list.js";
 		}
 
-		if (template.contains("add.js.vm")) {
+		if (template.contains(GenConstant.JS_ADD)) {
 			return "js" + File.separator + functionCode + File.separator + "add.js";
 		}
 
-		if (template.contains("edit.js.vm")) {
+		if (template.contains(GenConstant.JS_EDIT)) {
 			return "js" + File.separator + functionCode + File.separator + "edit.js";
 		}
 
-		if (template.contains("menu.sql.vm")) {
+		if (template.contains(GenConstant.SQL_MENU)) {
 			return className.toLowerCase() + "_menu.sql";
 		}
 
@@ -328,6 +325,9 @@ public class GenUtils {
 	public static void main(String[] args) {
 		System.out.println(StringUtils.uncapitalize("user_id"));
 		System.out.println(StringUtils.uncapitalize(columnToJava("user_id")));
+
+		System.out.println(PropertiesUtils.getInstance("velocity/generator").get("package"));
+
 	}
 
 }

+ 68 - 0
src/main/java/net/chenlin/dp/modules/generator/utils/VelocityUtils.java

@@ -0,0 +1,68 @@
+package net.chenlin.dp.modules.generator.utils;
+
+import org.apache.commons.io.output.FileWriterWithEncoding;
+import org.apache.commons.lang.StringUtils;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
+
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * velocity工具类
+ * @author ZhouChenglin
+ * @date 2018/1/7
+ */
+public class VelocityUtils {
+
+    /**
+     * 根据模板生成文件
+     * @param inputVmFilePath 模板路径
+     * @param outputFilePath 输出文件路径
+     * @param context
+     * @throws Exception
+     */
+    public static void generate(String inputVmFilePath, String outputFilePath, VelocityContext context) throws Exception {
+        try {
+            Properties properties = new Properties();
+            properties.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, getPath(inputVmFilePath));
+            Velocity.init(properties);
+            Template template = Velocity.getTemplate(getFile(inputVmFilePath), "utf-8");
+            File outputFile = new File(outputFilePath);
+            FileWriterWithEncoding writer = new FileWriterWithEncoding(outputFile, "utf-8");
+            template.merge(context, writer);
+            writer.close();
+        } catch (Exception ex) {
+            throw ex;
+        }
+    }
+
+    /**
+     * 根据文件绝对路径获取目录
+     * @param filePath
+     * @return
+     */
+    public static String getPath(String filePath) {
+        String path = "";
+        if (StringUtils.isNotBlank(filePath)) {
+            path = filePath.substring(0, filePath.lastIndexOf("/") + 1);
+        }
+        return path;
+    }
+
+    /**
+     * 根据文件绝对路径获取文件
+     * @param filePath
+     * @return
+     */
+    public static String getFile(String filePath) {
+        String file = "";
+        if (StringUtils.isNotBlank(filePath)) {
+            file = filePath.substring(filePath.lastIndexOf("/") + 1);
+        }
+        return file;
+    }
+
+}