首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

Spring3 Mybatis3 freemarker 自动生成对应表的model、地图per、service、controller并自动修改mybatis配

2014-01-01 
Spring3 Mybatis3 freemarker 自动生成对应表的model、mapper、service、controller并自动修改mybatis配1 pac

Spring3 Mybatis3 freemarker 自动生成对应表的model、mapper、service、controller并自动修改mybatis配

 1 package org.study.job.domain; 2 /** 3  * SqlColumnData.java Create on 2012-6-15上午10:37:47 4  *  5  *  6  * Copyright (c) 2012 by MTA. 7  *  8  * @author lmeteor 9  * @Email txin0814@sina.com10  * @description11  * @version 1.012  */13 public class SqlColumnData14 {15 16     private String columnName;17     18     private String columnType;19 20     public String getColumnName()21     {22         return columnName;23     }24 25     public void setColumnName(String columnName)26     {27         this.columnName = columnName;28     }29 30     public String getColumnType()31     {32         return columnType;33     }34 35     public void setColumnType(String columnType)36     {37         this.columnType = columnType;38     }39     40     41 }

? ? ?下面三个方法作用如下:

//用来获取指定表的所有列名及类型 public List<SqlColumnData> getColumnDatas(String tableName)//将列名生成对应的field 和 methodpublic String getBeanField(String tableName) throws SQLException//将数据库类型转换成对应的JAVA类型publicString getType(String type)
  1 /**  2      * 获取指定表的所有列名  3      *   4      * @param tableName  5      * @return  6      * @throws SQLException  7      */  8     public List<SqlColumnData> getColumnDatas(String tableName)  9             throws SQLException 10     { 11         String sqlColumns = "SELECT COLUMN_NAME, DATA_TYPE FROM information_schema.columns WHERE table_name =  '" 12                 + tableName + "' order by ordinal_position"; 13         Connection conn = null; 14         PreparedStatement pst = null; 15         ResultSet rs = null; 16         List<SqlColumnData> columnList = new ArrayList<SqlColumnData>(); 17         try 18         { 19             conn = sqlDialect.getConn(); 20             pst = conn.prepareStatement(sqlColumns); 21             rs = pst.executeQuery(); 22             while (rs.next()) 23             { 24                 String name = rs.getString(1); 25                 String type = rs.getString(2); 26                 type = this.getType(type); 27                 SqlColumnData cd = new SqlColumnData(); 28                 cd.setColumnName(name.toLowerCase()); 29                 cd.setColumnType(type); 30                 columnList.add(cd); 31             } 32  33         } 34         catch ( Exception e ) 35         { 36             e.printStackTrace(); 37         } 38         finally 39         { 40             try 41             { 42                 if (conn != null) conn.close(); 43                 if (pst != null) pst.close(); 44                 if (rs != null) rs.close(); 45             } 46             catch ( SQLException e ) 47             { 48                 e.printStackTrace(); 49             } 50         } 51         return columnList; 52     } 53  54     /** 55      * 将列名生成对应的field 和 method 56      *  57      * @param tableName 58      * @return 59      * @throws SQLException 60      */ 61     public String getBeanField(String tableName) throws SQLException 62     { 63         List<SqlColumnData> dataList = getColumnDatas(tableName); 64         StringBuffer str = new StringBuffer(); 65         StringBuffer getset = new StringBuffer(); 66         for (SqlColumnData d : dataList) 67         { 68             String name = d.getColumnName().toLowerCase(); 69             String type = d.getColumnType(); 70             String maxChar = name.substring(0, 1).toUpperCase(); 71             str.append("\r\t").append("private ").append(type + " ").append( 72                     name).append(";\n"); 73             String method = maxChar + name.substring(1, name.length()); 74             getset.append("\r\t").append("public ").append(type + " ").append( 75                     "get" + method + "()\n\t{\n"); 76             getset.append("\t\t").append("return this.").append(name).append(";\n\t}\n"); 77             getset.append("\r\t").append("public void ").append( 78                     "set" + method + "(" + type + " " + name + ")\n\t{\n"); 79             getset.append("\t\t").append("this." + name + "=").append(name).append( 80                     ";\n\t}\n"); 81         } 82         argv = str.toString(); 83         method = getset.toString(); 84         return argv + method; 85     } 86  87     private String argv; 88     private String method; 89  90     /** 91      * 将数据库类型转换成对应的JAVA类型 92      *  93      * @param type 94      * @return 95      */ 96     public String getType(String type) 97     { 98         type = type.toLowerCase(); 99         if ("char".equals(type) || "varchar".equals(type)100                 || "nvarchar".equals(type))101         {102             return "String";103         }104         else if ("int".equals(type))105         {106             return "Integer";107         }108         else if ("bigint".equals(type))109         {110             return "Long";111         }112         else if ("timestamp".equals(type) || "date".equals(type)113                 || "datetime".equals(type))114         {115             return "java.sql.Timestamp";116         }117         else if ("decimal".equals(type))118         {119             return "Double";120         }121         else if ("image".equals(type))122         {123             return "byte[]";124         }125         else if ("smallint".equals(type))126         {127             return "int";128         }129         return null;130     }

?

/**     * 将表名转成class名称     *      * @param tableName     * @return     */    public String getTableNameToClassName(String tableName)    {        String[] splits = tableName.toLowerCase().split("_");        if (splits.length > 0)        {            StringBuffer className = new StringBuffer();            for (String split : splits)            {                String tempTableName = split.substring(0, 1).toUpperCase()                        + split.substring(1);                className.append(tempTableName);            }            return className.toString();        }        else        {            String className = splits[0].substring(0, 1).toUpperCase()                    + splits[0].substring(1);            return className;        }    }

SQL方面就准备的差不多了,现在开始准备对应的模版文件,如下:

我这里使用的freemarker

 1 package org.study.job.domain; 2  3 import java.io.Serializable; 4 /** 5  * ${className?default('')}.java Create on ${datetime?default('')} 6  *  7  *  8  * Copyright (c) 2012 by MTA. 9  * 10  * @author lmeteor11  * @Email txin0814@sina.com12  * @description13  * @version 1.014  */15 @SuppressWarnings("serial")16 public class ${className?default('')} implements Serializable 17 {18     ${feilds?default('')}19 }

用freemarker通过模版创建文件:

 1 /** 2      * 创建静态文件 3      *  4      * @param templateFileName 5      *            模板文件名,例如:/WEB-INF/view/temp.ftl 6      * @param propMap 7      *            用于处理模板的属性object映射 8      * @param htmlFilePath 9      *            要生成的静态文件的路径,例如:/WEB-INF/view/1/2012/5/510      * @param htmlFileName11      *            要生成的文件名:例如:1.html12      * @param templateFilePath13      *            模版路径14      */15     @SuppressWarnings(16     { "unchecked" })17     public static void createHtmlFile(String templateFileName, Map propMap,18             String htmlFilePath, String htmlFileName, String templateFilePath)19     {20         try21         {22             Template t = getFreemarkerCFG(templateFilePath).getTemplate(23                     templateFileName);24             //createDirs(htmlFilePath);25             File file = null;26             if(StringTools.isEmpty(htmlFileName))file = new File(htmlFilePath);27             else file = new File(htmlFilePath + "/" + htmlFileName);28             if(!file.exists())file.createNewFile();29             else file.delete();30             Writer out = new BufferedWriter(new OutputStreamWriter(31                     new FileOutputStream(file),"UTF-8"));32             t.process(propMap, out);33             out.flush();34             out.close();35             logger.info("文件:"+htmlFilePath+"生成成功。");36         }37         catch ( IOException e )38         {39             e.printStackTrace();40         }41         catch ( TemplateException e )42         {43             e.printStackTrace();44         }45     }

?

现在该准备的都准备好了,准备开始实际调用如下

 1 /** 2      * 生成JAVAMODULE文件 3      * @param tableName 4      */ 5     public static void createJavaModuleFile(String tableName) 6     { 7         String className = sqlutil.getTableNameToClassName(tableName); 8         // 生成到指定的目录下 9         String modelPath = "domain\" + className + ".java";10         Map<String,Object> context = new HashMap<String,Object>();11         context.put("className", className); //12         context.put("tableName", tableName);13         context.put("datetime", DateTools.getDateTools().format(new Date()));14         /****************************** 生成bean字段 *********************************/15         try16         {17             context.put("feilds", sqlutil.getBeanField(tableName)); // 生成bean18             logger.info("请稍侯,正在生成Bean属性及GET、SET方法");19         }20         catch ( Exception e )21         {22             e.printStackTrace();23         }24         // -------------------生成文件代码---------------------/25         CreateHtml.createHtmlFile("TempBean.ftl", context, PCKPATH+modelPath, null, TEMPLATE_FILEPATH);26     }

大致代码就是这么多,我在自己的项目中将这个功能界面化了,

热点排行