知识大全 Spring3 Mybatis3 freemarker 自动生成对应表
Posted 文件
篇首语:多诈的人藐视学问,愚鲁的人羨慕学问,聪明的人运用学问。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring3 Mybatis3 freemarker 自动生成对应表相关的知识,希望对你有一定的参考价值。
Spring3 Mybatis3 freemarker 自动生成对应表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
自己利用spring mybatis 进行开发时 前期花费了大量的时间去写对应的model mapper service文件 并想到用freemarker来动态生成对应的JAVA文件 开发思路 其实就是将数据库中的表取出来 表名作为类名 并把对应的列名取出来 作为字段名称 然后通过 freemarker定制的模版去生成相关的文件即可 我这里只举例说明如何生成对应的model文件 其它的可以直接COPY改改就成 示例代码如下 首先定义一个对象SqlColumnData包含两个属性columnName(列名称) columnType(列类型) 具体定义如下 : package study job domain; /** * SqlColumnData java Create on 上午 : : * * * Copyright (c) by MTA * * @author lmeteor * @Email * @description * @version */ public class SqlColumnData private String columnName; private String columnType; public String getColumnName() return columnName; public void setColumnName(String columnName) lumnName = columnName; public String getColumnType() return columnType; public void setColumnType(String columnType) lumnType = columnType;
下面三个方法作用如下 //用来获取指定表的所有列名及类型 public List getColumnDatas(String tableName)//将列名生成对应的field 和 methodpublic String getBeanField(String tableName) throws SQLException//将数据库类型转换成对应的JAVA类型publicString getType(String type) /** * 获取指定表的所有列名 * * @param tableName * @return * @throws SQLException */ public List getColumnDatas(String tableName) throws SQLException String sqlColumns = SELECT COLUMN_NAME DATA_TYPE FROM inlumns WHERE table_name = + tableName + order by ordinal_position ; Connection conn = null; PreparedStatement pst = null; ResultSet rs = null; List columnList = new ArrayList() try conn = sqlDialect getConn() pst = conn prepareStatement(sqlColumns) rs = pst executeQuery() while (rs next()) String name = rs getString( ) String type = rs getString( ) type = this getType(type) SqlColumnData cd = new SqlColumnData() cd setColumnName(name toLowerCase()) cd setColumnType(type) columnList add(cd) catch ( Exception e ) e printStackTrace() finally try if (conn != null) conn close() if (pst != null) pst close() if (rs != null) rs close() catch ( SQLException e ) e printStackTrace() return columnList; /** * 将列名生成对应的field 和 method * * @param tableName * @return * @throws SQLException */ public String getBeanField(String tableName) throws SQLException List dataList = getColumnDatas(tableName) StringBuffer str = new StringBuffer() StringBuffer getset = new StringBuffer() for (SqlColumnData d : dataList) String name = d getColumnName() toLowerCase() String type = d getColumnType() String maxChar = name substring( ) toUpperCase() str append( \\r\\t ) append( private ) append(type + ) append( name) append( ;\\n ) String method = maxChar + name substring( name length()) getset append( \\r\\t ) append( public ) append(type + ) append( get + method + ()\\n\\t\\n ) getset append( \\t\\t ) append( return this ) append(name) append( ;\\n\\t\\n ) getset append( \\r\\t ) append( public void ) append( set + method + ( + type + + name + )\\n\\t\\n ) getset append( \\t\\t ) append( this + name + = ) append(name) append( ;\\n\\t\\n ) argv = str toString() method = getset toString() return argv + method; private String argv; private String method; /** * 将数据库类型转换成对应的JAVA类型 * * @param type * @return */ public String getType(String type) type = type toLowerCase() if ( char equals(type) || varchar equals(type) || nvarchar equals(type)) return String ; else if ( int equals(type)) return Integer ; else if ( bigint equals(type)) return Long ; else if ( timestamp equals(type) || date equals(type) || datetime equals(type)) return java sql Timestamp ; else if ( decimal equals(type)) return Double ; else if ( image equals(type)) return byte[] ; else if ( smallint equals(type)) return int ; return null; /** * 将表名转成class名称 * * @param tableName * @return */ public String getTableNameToClassName(String tableName) String[] splits = tableName toLowerCase() split( _ ) if (splits length > ) StringBuffer className = new StringBuffer() for (String split : splits) String tempTableName = split substring( ) toUpperCase() + split substring( ) className append(tempTableName) return className toString() else String className = splits[ ] substring( ) toUpperCase() + splits[ ] substring( ) return className; SQL方面就准备的差不多了 现在开始准备对应的模版文件 如下 我这里使用的freemarker package study job domain; import java io Serializable; /** * $className?default( ) java Create on $datetime?default( ) * * * Copyright (c) by MTA * * @author lmeteor * @Email * @description * @version */ @SuppressWarnings( serial ) public class $className?default( ) implements Serializable $feilds?default( ) 用freemarker通过模版创建文件 /** * 创建静态文件 * * @param templateFileName * 模板文件名 例如 /WEB INF/view/temp ftl * @param propMap * 用于处理模板的属性object映射 * @param FilePath * 要生成的静态文件的路径 例如 /WEB INF/view/ / / / * @param FileName * 要生成的文件名 例如 l * @param templateFilePath * 模版路径 */ @SuppressWarnings( unchecked ) public static void createHtmlFile(String templateFileName Map propMap String FilePath String FileName String templateFilePath) try Template t = getFreemarkerCFG(templateFilePath) getTemplate( templateFileName) //createDirs(FilePath) File file = null; if(StringTools isEmpty(FileName))file = new File(FilePath) else file = new File(FilePath + / + FileName) if(!file exists())file createNewFile() else file delete() Writer out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file) UTF )) t process(propMap out) out flush() out close() ( 文件 +FilePath+ 生成成功 ) catch ( IOException e ) e printStackTrace() catch ( TemplateException e ) e printStackTrace() 现在该准备的都准备好了 准备开始实际调用如下 /** * 生成JAVAMODULE文件 * @param tableName */ public static void createJavaModuleFile(String tableName) String className = sqlutil getTableNameToClassName(tableName) // 生成到指定的目录下 String modelPath = domain\\\\ + className + java ; Map context = new HashMap() context put( className className) // context put( tableName tableName) context put( datetime DateTools getDateTools() format(new Date())) /****************************** 生成bean字段 *********************************/ try context put( feilds sqlutil getBeanField(tableName)) // 生成bean ( 请稍侯 正在生成Bean属性及GET SET方法 ) catch ( Exception e ) e printStackTrace() // 生成文件代码 / CreateHtml createHtmlFile( TempBean ftl context PCKPATH+modelPath null TEMPLATE_FILEPATH) 大致代码就是这么多 我在自己的项目中将这个功能界面化了 如下cha138/Article/program/Java/hx/201311/26400
相关参考
Spring3.0中的AOP配置方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 第一种配置方
知识大全 Spring3.0新特征-Restful support MVC[1]
Spring3.0新特征-RestfulsupportMVC[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
知识大全 Spring3.0新特征-Restful support MVC[2]
Spring3.0新特征-RestfulsupportMVC[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
Spring专访:Spring3.0近况 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Info
知识大全 Spring 3.0 M2发布 大部分新特性开发完成
Spring3.0M2发布大部分新特性开发完成 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 期