Java之利用FreeMarker引擎实现枚举和脚本自动生成
来源:互联网 发布:如何自制app软件 编辑:程序博客网 时间:2024/05/22 17:17
开心一笑
【天气热了 翻箱倒柜找了半天短袖 结果找出来一看 全是些名牌短袖 感觉穿出去太高调了 比如什么中国电信啊 天翼4G啊 太太乐鸡精啊 莲花味精啊 海天酱油啊。。最珍贵的一件 要属那件史丹利复合肥 跟刘能同款 哎头大了纠结该穿哪个好呢?穿出去不会被人说我炫富吧】
视频教程
大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……
视频地址:http://edu.csdn.net/lecturer/994
提出问题
如何利用Java + FreeMarker 生成枚举类和相关的数据库脚本???
解决问题
业务场景
做业务开发的时候,我们通常要定义很多枚举类,写好java枚举类时候,还要在数据库插入相对应的字典值等,然后生成 sql 文件提交到SVN的增量脚本里面。为了解决这些问题,有必要开发一个枚举和脚本自动生成的工具类, 自动生成枚举类和增量脚本,避免简单和不必要的错误。
分享的这个工具类,并不是适合每个公司,因为每家公司有每家公司的框架,只是想传达一种实现:多开发一些适合你们公司的工具类,减少重复性的工作,把跟多的时间和精力投入到重要的事情上。
代码实现
EnumGenerateUtils工具类
在我们的项目中,枚举是有分类的。
package com.evada.inno.pm.code.generate.util;import com.evada.inno.pm.code.generate.model.EnumDictCategoryDefinition;import com.evada.inno.pm.code.generate.model.EnumInfoDefinition;import freemarker.template.Template;import java.io.*;import java.text.SimpleDateFormat;import java.util.*;/** * 描述:枚举类代码生成工具 * Created by Ay on 2017/5/5. */public class EnumGenerateUtils { //枚举需要生成到那个包下面 private final String packageName = "com.evada.pm.process.manage"; //枚举分类的code 和 字典表中的 categoryCode必须一致 private final String enumCategoryCode = "TM_XXXX_XXXX_XXXX"; private final String enumCategoryName = "项目管理-管控模式-枚举"; //枚举类名称 private final String enumClassName = "Color"; //枚举类生成后类上的注解 private final String enumAnnotation = "颜色"; //这里比较重要 private final String[][] ENUM_INFO = { {"BLUE","蓝色"}, {"YELLOW","黄色"}, {"BLACK","黑色"} }; //类上的作者 private final String AUTHOR = "Ay"; //类上的日期 private final String CURRENT_DATE = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); public static void main(String[] args) throws Exception{ EnumGenerateUtils enumGenerateUtils = new EnumGenerateUtils(); //生成枚举类java文件 enumGenerateUtils.generateEnumClassFile(); //生成sql脚本文件 enumGenerateUtils.generateEnumSqlFile(); } private void generateEnumSqlFile() throws Exception{ final String suffix = ".sql"; final String path = "D://" + CURRENT_DATE + suffix; final String templateName = "EnumSQL.ftl"; File mapperFile = new File(path); Map<String,Object> dataMap = new HashMap<>(); List<EnumInfoDefinition> enumInfoDefinitionList = new ArrayList<>(); EnumInfoDefinition enumInfoDefinition = null; for(int i=0;i < ENUM_INFO.length;i++){ enumInfoDefinition = new EnumInfoDefinition(); enumInfoDefinition.setEnumUuid(EnumGenerateUtils.generateUUID()); enumInfoDefinition.setEnumCode(ENUM_INFO[i][0]); enumInfoDefinition.setEnumName(ENUM_INFO[i][1]); enumInfoDefinition.setEnumCategoryCode(enumCategoryCode); enumInfoDefinition.setEnumNumber(i + 1 + ""); enumInfoDefinition.setEnumSortOrder(i + 1 + ""); enumInfoDefinitionList.add(enumInfoDefinition); } EnumDictCategoryDefinition dictCategory = new EnumDictCategoryDefinition(); dictCategory.setEnumUuid(EnumGenerateUtils.generateUUID()); dictCategory.setEnumCategoryCode(enumCategoryCode); dictCategory.setEnumCategoryName(enumCategoryName); dataMap.put("enum_dict_catagory",dictCategory); dataMap.put("enum_list", enumInfoDefinitionList); generateFileByTemplate(templateName,mapperFile,dataMap); } private void generateEnumClassFile() throws Exception{ final String suffix = "Enum.java"; final String path = "D://" + enumClassName + suffix; final String templateName = "EnumClass.ftl"; File mapperFile = new File(path); Map<String,Object> dataMap = new HashMap<>(); List<EnumInfoDefinition> enumInfoDefinitionList = new ArrayList<>(); EnumInfoDefinition enumInfoDefinition = null; for(int i=0;i < ENUM_INFO.length;i++){ enumInfoDefinition = new EnumInfoDefinition(); enumInfoDefinition.setEnumUuid(EnumGenerateUtils.generateUUID()); enumInfoDefinition.setEnumCode(ENUM_INFO[i][0]); enumInfoDefinition.setEnumName(ENUM_INFO[i][1]); enumInfoDefinition.setEnumNumber(i + 1 + ""); enumInfoDefinition.setEnumSortOrder(i + 1 + ""); enumInfoDefinition.setEnumCategoryCode(enumCategoryCode); enumInfoDefinitionList.add(enumInfoDefinition); } dataMap.put("enum_list", enumInfoDefinitionList); generateFileByTemplate(templateName,mapperFile,dataMap); } private void generateFileByTemplate(final String templateName,File file,Map<String,Object> dataMap) throws Exception{ Template template = FreeMarkerTemplateUtils.getTemplate(templateName); FileOutputStream fos = new FileOutputStream(file); dataMap.put("author",AUTHOR); dataMap.put("date",CURRENT_DATE); dataMap.put("package_name",packageName); dataMap.put("enum_annotation",enumAnnotation); dataMap.put("enum_class_name",enumClassName); Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"),10240); template.process(dataMap,out); } public static String generateUUID(){ return UUID.randomUUID().toString().replace("-", ""); }}
EnumClass.ftl类
package ${package_name}.enums;/*** 描述:${enum_annotation}类型枚举* @author ${author}* @date ${date}*/public enum ${enum_class_name}Enum {<#if enum_list?exists> <#list enum_list as enum> ${enum.enumCode}("${enum.enumNumber}","${enum.enumName}")<#if enum_index == ((enum_list?size) - 1)>;<#else >,</#if> </#list></#if> private final String code; private final String name; ${enum_class_name}Enum(String code, String name) { this.code = code; this.name = name; } public String getName() { return this.name; } @Override public String toString() { return this.code; }}
EnumSQL.ftl类
-- ${enum_annotation}枚举字典<#if enum_list?exists> <#list enum_list as enum>INSERT INTO "public"."sys_dict" ("id", "name", "code", "category_code", "parent_code", "sort_order", "is_updatable", "status")VALUES ('${enum.enumUuid}', '${enum.enumName}', '${enum.enumCode}', '${enum.enumCategoryCode}', NULL, '${enum.enumSortOrder}', NULL, '1'); </#list></#if>-- ${enum_annotation}枚举字典分类<#if enum_dict_catagory?exists>INSERT INTO "public"."sys_dict_category" ("id", "name", "code", "parent_code", "sort_order", "description", "is_updatable", "status")VALUES ('${enum_dict_catagory.enumUuid}', '${enum_dict_catagory.enumCategoryName}', '${enum_dict_catagory.enumCategoryCode}', '', '0', NULL, '0', '1');</#if>
读书感悟
来自但丁《神曲》
- 没有比回忆过去的幸福更为痛苦的事了。
- 走自己的路,让别人说去。
- 如果爱,请干净地爱,把爱情献给爱情。
- 当一件事情愈加完美,它的痛苦和喜悦也就更多。
经典故事
【有一次和朋友去海洋馆。
有个旅客问管理员说:“这只鲨鱼会长多大?”
管理员指着水族箱说:“要看你的水族箱多大。”
旅客又问:“会跟水族箱一样大吗?”
管理员仔细地说:“如果在水族箱,鲨鱼只能局限在几公尺的大小,如果在海洋,就会大到一口吞下一只狮子。”
大道理:环境可以改变一个人的思想。环境能限制人的思想,人也可以限制自己的思想。不要给自己加框,无法改变环境时,就从改变自己开始。】
生活常识
运动后不宜做的六件事:
- 不要蹲坐休息
- 不要贪吃冷饮
- 不要立即吃饭
- 不要骤降体温
- 不要吸烟
- 不要立即喝水
大神文章
无
其他
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!
- Java之利用FreeMarker引擎实现枚举和脚本自动生成
- Java之利用Freemarker模板引擎实现代码生成器,提高效率
- 反射+枚举+freemarker,自动生成实体类,自动建表建索引(二)之建表建索引,注解和DatabaseMetaData 获取信息
- 反射+枚举+freemarker,自动生成实体类,自动建表建索引(一)之生成实体类,枚举详解
- 利用freemarker生成java bean
- 利用FreeMarker生成java源代码
- Java模板引擎之Freemarker
- Java模板引擎之Freemarker
- Java模板引擎之 FreeMarker
- Java模板引擎之FreeMarker
- 利用Freemarker自动生成JavaBean文件
- ssm 自定义注解实现mybatis自动维护表结构以及利用freemarker生成代码
- 利用freemarker、java生成html静态页面
- 利用Freemarker生成word的使用(java)
- Java 中利用 Freemarker 生成 Word 文档
- Freemarker模板自动生成java代码
- Java模板引擎之Freemarker(二)
- Java模版引擎之Freemarker篇
- C语言指针变量的运算
- 对laravel的repository的使用
- Java Web基础知识之Servlet容器初始化(无web.xml)
- 一些有意思的java代码片段
- 0-1背包动态规划一般算法
- Java之利用FreeMarker引擎实现枚举和脚本自动生成
- 42.局域网架构
- 补3,实验5.4
- JAVA 40个经典算法题
- 用一个textview显示数字,让数字从一个值渐变到另外一个值
- 使用ajaxFileUpload实现导入Excel
- spring 注释
- PHP学习笔记2:WAMPServer多站点配置
- java中的四种引用类型与垃圾回收