您现在的位置是:首页 >

freemarker生成静态页面 Spring3 Mybatis3 freemarker 自动生成对应表

火烧 2022-05-25 20:20:39 1038
S ri g3 My ati 3 freemarker 自动生成对应表   自己利用 ri g my ati 进行开发时 前期花费了大量的时间去写对应的model ma er ervice文件 并想到

Spring3 Mybatis3 freemarker 自动生成对应表  

  自己利用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( rt ) append( private ) append(type + ) append(         name) append( ;n )         String method = maxChar + name substring( name length())         getset append( rt ) append( public ) append(type + ) append(         get + method + ()nt{n )         getset append( tt ) append( return this ) append(name) append( ;nt}n )         getset append( rt ) append( public void ) append(         set + method + ( + type + + name + )nt{n )         getset append( tt ) append( this + name + = ) append(name) append(         ;nt}n )         }         argv = str toString()         method = getset toString()         return argv + method;         }           private String argv;         private String method;           /**

freemarker生成静态页面 Spring3 Mybatis3 freemarker 自动生成对应表
        * 将数据库类型转换成对应的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)         }        大致代码就是这么多 我在自己的项目中将这个功能界面化了 如下

  

lishixinzhi/Article/program/Java/hx/201311/26400  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码