FreeMark自动生成代码
来源:互联网 发布:新速特软件站不能下载 编辑:程序博客网 时间:2024/06/06 18:58
1)环境
<!--freemarker 生成模版工具--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.16</version> </dependency> <!--jfinal 类包--> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>3.1</version> </dependency> <!--jfinal 类包end-->
等jdbc包
2)程序如下
a)freemark模板
package ${package};import java.util.Date;@SuppressWarnings("serial")public class ${modelName} { <#list tableColumns as columns> <#if columns[2]!=""> // ${columns[2]} </#if> private ${columns[1]} ${columns[4]}; </#list> <#list tableColumns as columns> <#if columns[2]!=""> /** ${columns[2]} */ </#if> public ${columns[1]} get${columns[5]} (){ return this.${columns[4]}; } <#if columns[2]!=""> /** ${columns[2]} */ </#if> public void set${columns[5]} (${columns[1]} ${columns[4]}){ this.${columns[4]} = ${columns[4]}; } </#list> }
b)DataBaseTypeToJavaType.java
package com.se.utils.gencode;/** * Created by cwq on 2017/9/12. * jdk 1.8 */public class DataBaseTypeToJavaType { public enum MysqlType { CHAR("char", "String"), VARCHAR("varchar", "String"), BLOB("blob", "Byte[]"), TEXT("text", "String"), INT("int", "Integer"), TINYINT("tinyint", "Integer"), SMALLINT("smallint", "Integer"), MEDIUMINT("mediumint", "Integer"), BIT("bit", "Boolean"), BIGINT("bigint", "Long"), DECIMAL("decimal", "BigDecimal"), DATE("date", "Date")// ,DATETIME("datetime","Timestamp") , DATETIME("datetime", "Date")// ,TIMESTAMP("timestamp","timestamp") , TIMESTAMP("timestamp", "Date"), TIME("time", "Time"), YEAR("year", "Date"), FLOAT("float", "Float"), DOUBLE("double", "Double"), INTEGER("integer", "Long"); private String key; private String value; public String getKey() { return key; } public String getValue() { return value; } private MysqlType(String key, String value) { this.key = key; this.value = value; } public static MysqlType getByKey(String key) { for (MysqlType a : MysqlType.values()) if (a.getKey().equals(key)) return a; return null; } } public enum JFinalType { String("String", "getStr"), Integer("Integer", "getInt"), Long("Long", "getLong"), BigInteger("BigInteger", "getLong"), Date("Date", "getDate"), Time("Time", "getTime"), Timestamp("Timestamp", "getTimestamp"), Double("Double", "getDouble"), Float("Float", "getFloat"), Boolean("Boolean", "getBoolean"), BigDecimal("BigDecimal", "getBigDecimal"), BYTE("byte[]", "getBytes"), Number("Number", "getNumber"); private String key; private String value; public String getKey() { return key; } public String getValue() { return value; } private JFinalType(String key, String value) { this.key = key; this.value = value; } public static JFinalType getByKey(String key) { for (JFinalType a : JFinalType.values()) if (a.getKey().equals(key)) return a; return null; } } public String get(String type) { MysqlType mysqlType = MysqlType.getByKey(type); if (mysqlType != null) return mysqlType.getValue(); return null; } public String getJFinal(String type) { JFinalType jFinalType = JFinalType.getByKey(type); if (jFinalType != null) return jFinalType.getValue(); return null; }}
package com.se.utils.gencode;import com.jfinal.kit.PathKit;import com.jfinal.plugin.c3p0.C3p0Plugin;import com.mchange.v2.io.FileUtils;import com.se.utils.PropertyUtil;import freemarker.template.Configuration;import freemarker.template.Template;import javax.sql.DataSource;import java.io.*;import java.math.BigInteger;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;/** * Created by cwq on 2017/9/12. * jdk 1.8 */public class GenCode { public static void main(String[] args) {// ArrayList<String[]> list = getTableColumns("b_activity_teacher");//// for (String[] s : list) {// System.out.println("key:" + s[0] + ",value:" + s[1] + ",Comment:" + s[2]);// System.out.println("jFinalType:" + s[3] + ",camelCase:" + s[4] + ",camelCaseUp:" + s[5]);// } String path = "D:\\Workspaces\\MyEclipse 10\\eshop\\domain\\src\\main\\java\\com\\domain\\model"; createModel("com.domain.model", path, "t_goods", "id"); } public static void createModel(String tableName) { createModel(null, null, tableName, null); } public static void createModel(String tableName, String pkName) { createModel(null, null, tableName, pkName); } /** * @param Package 包名 * @param dir 生成路径 * @param tableName 表名 * @param pkName 主键名称 * @author cwq * @date 2017/9/12 下午3:48 */ public static void createModel(String Package, String dir, String tableName, String pkName) { String className = "model"; className = upFirstName(camelCase(tableName), 1); char sp = File.separatorChar; if (Package == null) Package = "com.se.model"; if (pkName == null) pkName = "id"; String baseDir = PathKit.getWebRootPath() + sp + "src" + sp + "main" + sp + "java" + sp + "com" + sp + "se"; if (dir == null) dir = baseDir + sp + "model"; dir = dir + sp; String modelFile = dir + className + ".java"; try { if (new File(modelFile).exists()) { System.err.println("文件【" + modelFile + "】已存在!"); } else { StringWriter writer = new StringWriter(); Map<String, Object> context = new HashMap<String, Object>(); ArrayList<String[]> tableColumns = getTableColumns(tableName); context.put("modelName", className); context.put("package", Package); context.put("pkName", pkName); context.put("tableColumns", tableColumns); Configuration configuration = new Configuration(); //加载渲染目录 configuration.setDirectoryForTemplateLoading(new File(baseDir + sp + "utils" + sp + "gencode")); //加载模版 Template template = configuration.getTemplate("Model.ftl"); //替换模版 template.process(context, writer);// 渲染模版 FileUtils.touch(new File(modelFile)); writeFileContent(modelFile, writer.toString()); System.out.println("创建文件【" + modelFile + "】成功!"); } } catch (Exception e) { System.err.println(e.getMessage()); } } /** * 获得表字段 * * @param tableName * @return * @author cwq * @date 2017/9/12 下午5:25 */ public static ArrayList<String[]> getTableColumns(String tableName) { DataBaseTypeToJavaType dtj = new DataBaseTypeToJavaType(); Connection conn = null; PreparedStatement columnsPs = null; try { conn = getDataSource().getConnection();// 获取表的信息 columnsPs = conn.prepareStatement("show full columns from " + tableName); //字段列表 ArrayList<String[]> list = new ArrayList<String[]>(); ResultSet resultSet = columnsPs.executeQuery(); // 获取对应表中的字段 while (resultSet.next()) { String key = resultSet.getString(1); String type = dtj.get(resultSet.getString(2).split("\\(")[0]); String note = resultSet.getString(9); String jFinalType = dtj.getJFinal(type);//jfinal get 使用方法 String camelCase = camelCase(key);//字段驼峰式 String camelCaseUp = upFirstName(camelCase, 1);//字段驼峰式首字母大写 list.add(new String[]{ key , type , note , jFinalType , camelCase , camelCaseUp }); } return list; } catch (Exception e) { e.printStackTrace(); } finally { try { conn.close(); columnsPs.close(); } catch (Exception e) { e.printStackTrace(); } } return null; } /** * @param file * @param conent * @author cwq * @date 2017/9/12 下午3:42 * 写入流 */ public static void writeFileContent(String file, String conent) { BufferedWriter out = null; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true))); out.write(conent); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * @param name * @param toUpperCase 0是首字母小写 1是首字母大写 * @return * @author cwq * @date 2017/9/12 下午3:42 */ public static String upFirstName(String name, Integer toUpperCase) { String s = null; if (name != null) {// s = name.toLowerCase(); s = name; String first = "" + s.charAt(0); if (toUpperCase == 1) { first = first.toUpperCase(); } if (toUpperCase == 0) { first = first.toLowerCase(); } s = first + s.substring(1, s.length()); } return s; } /** * @param name * @return * @author cwq * @date 2017/9/12 下午3:43 * 驼峰式 */ public static String camelCase(String name) { StringBuffer stringBuffer = new StringBuffer(); for (String t : name.split("_")) { stringBuffer.append(upFirstName(t, 1)); } return upFirstName(stringBuffer.toString(), 0); } public static DataSource getDataSource() { //加载配置文件 String url = PropertyUtil.getGrosseValue("db", "url");//获取数据库url String username = PropertyUtil.getGrosseValue("db", "username");//获取用户名字 String password = PropertyUtil.getGrosseValue("db", "password");//密码 //创建c3p0连接 C3p0Plugin c3p0Plugin = new C3p0Plugin(url, username, password);//连接池 c3p0Plugin.start(); return c3p0Plugin.getDataSource(); }}
阅读全文
0 0
- FreeMark自动生成代码
- freemark模板生成代码
- freemark生成静态页面
- 使用freeMark生成word
- freemark生成CURD模板
- Freemark 常用代码总结
- freemark示例代码
- maven创建多模块项目fREemark+springMVC+mybatis+mybatis 自动生成
- 代码自动生成.
- 自动生成代码
- 代码自动生成软件
- ALV自动生成代码
- CodeSmith自动生成代码
- java代码自动生成
- 代码自动生成工具
- 自动代码生成
- MBG自动代码生成
- 自动生成代码实用工具
- 服务机器人·可预见的未来
- 最全oracle语法整理
- 1092: 素数表(函数专题)
- 新版本FastJsonHttpMessageConverter初始化,默认设置MediaType为*/*
- Spring Security和Shiro的比较和使用
- FreeMark自动生成代码
- js实现 全选/反选 和 单选
- java表达式类型的自动提升
- android activity各种生命周期演示
- Android Studio插件整理
- 解决start tomcat has encountered a problem出错的方法
- WebSerice学习笔记——WebSerice基础
- struts2 2.5.10.1升级至2.5.13
- Eclipse中无法输入中文