Maven项目freemarker模版的运用

SSM的项目实现freemarker :

pom.xml配置:

<!--自动生成代码 需要的jar-->
    <dependency>
      <groupId>freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.8</version>
    </dependency>
<!--mysql驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>
AutoGenerationJavaCode方法:
package com.crs811.core;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class AutoGenerationJavaCode {

    private String url;
    private String name;
    private String passWord;
    private String driver;
    private String sql;
    private String tableName;
    private String templateDir;
   // private String autoGeneratedFile;
    private static String[][] fileNameArray = new String[6][3];

    static {
        fileNameArray[0][0] = "dmoTemplate.ftl";
        fileNameArray[0][1] = ".java";
        fileNameArray[0][2] = "C:\\java\\IDEA\\Xm_Dz\\SSMWeb02\\src\\main\\java\\com\\crs811\\pojo";

        fileNameArray[1][0] = "serviceTemplate.ftl";
        fileNameArray[1][1] = "Service.java";
        fileNameArray[1][2] = "C:\\java\\IDEA\\Xm_Dz\\SSMWeb02\\src\\main\\java\\com\\crs811\\service";


        fileNameArray[2][0] = "serviceImplTemplate.ftl";
        fileNameArray[2][1] = "ServiceImpl.java";
        fileNameArray[2][2] = "C:\\java\\IDEA\\Xm_Dz\\SSMWeb02\\src\\main\\java\\com\\crs811\\service\\impl";


        fileNameArray[3][0] = "daoTemplate.ftl";
        fileNameArray[3][1] = "Dao.java";
        fileNameArray[3][2] = "C:\\java\\IDEA\\Xm_Dz\\SSMWeb02\\src\\main\\java\\com\\crs811\\dao";


        fileNameArray[4][0] = "controllerTemplate.ftl";
        fileNameArray[4][1] = "Controller.java";
        fileNameArray[4][2] = "C:\\java\\IDEA\\Xm_Dz\\SSMWeb02\\src\\main\\java\\com\\crs811\\controller";

        fileNameArray[5][0] = "dmoVoTemplate.ftl";
        fileNameArray[5][1] = "Vo.java";
        fileNameArray[5][2] = "C:\\java\\IDEA\\Xm_Dz\\SSMWeb02\\src\\main\\java\\com\\crs811\\pojo\\vo";
    }

    public AutoGenerationJavaCode(String url, String name, String passWord, String driver, String tableName,
                                  String templateDir) {
        this.url = url;
        this.name = name;
        this.passWord = passWord;
        this.driver = driver;
        this.sql = "select * from " + tableName;
        this.tableName = tableName;
        this.templateDir = templateDir;
      //  this.autoGeneratedFile = autoGeneratedFile;
    }


    public void autoGenerationJavaCode() throws IOException, TemplateException, ClassNotFoundException,
            SQLException {
        Configuration cfg = new Configuration();
        cfg.setDefaultEncoding("utf-8");

        String className = dealTableName();

        String fileName = dealClassName(className);
        Map<String, Object> columnMap = getColumn();
        //设置模板文件路径
        cfg.setDirectoryForTemplateLoading(new File(templateDir));

        Map<String, Object> rootMap = new HashMap<String, Object>();
        rootMap.put("className", className);
        rootMap.put("classNameLower", className.substring(0, 1).toLowerCase() + className.substring(1));
        rootMap.put("columnMap", columnMap);

        for (int i = 0; i < fileNameArray.length; i++) {
            File dir = new File(fileNameArray[i][2] + "\\");
            //检查目录是否存在,不存在则创建
            if (!dir.exists()) {
                dir.mkdir();
            }
            Template temp = cfg.getTemplate(fileNameArray[i][0]);
            File docFile = new File(fileNameArray[i][2] + "\\" + fileName + fileNameArray[i][1]);
            Writer docout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
            //输出文件
            temp.process(rootMap, docout);
        }
        System.out.println("==============文件生产成功===============");
    }

    //获取数据库表字段名放入map中
    public Map<String, Object> getColumn() throws ClassNotFoundException, SQLException {
        Connection conn;
        PreparedStatement pStemt = null;
        Class.forName(driver);
        conn = DriverManager.getConnection(url, name, passWord);
        pStemt = conn.prepareStatement(sql);
        ResultSetMetaData rsmd = pStemt.getMetaData();
        Map<String, Object> columnMap = new HashMap<String, Object>();
        int size = rsmd.getColumnCount();
        for (int i = 0; i < size; i++) {
            String columnName = dealColumnName(rsmd, i);
            columnMap.put(columnName, columnName);
        }
        conn.close();
        return columnMap;
    }

    //将表名转换为DMO的字段名,比如 operate_type 转换后为 operateType
    private String dealColumnName(ResultSetMetaData rsmd, int i) throws SQLException {
        String columnName = rsmd.getColumnName(i + 1).toLowerCase();
        String charAfterLine = String.valueOf(columnName.charAt((columnName.indexOf("_") + 1)));
        String convertedChar = charAfterLine.toUpperCase();
        //columnName = columnName.replace("_" + charAfterLine, convertedChar);
       // columnName = columnName.replace("" + charAfterLine, convertedChar);
        return columnName;
    }

    //将表名转换为类型类名 比如 t_operate_log 转换后为 operateLog ,类名首字母应为大写,这里在freemarker的模板里直接转换
//    private String dealTableName() {
//        String className = tableName.toLowerCase().substring(tableName.indexOf("_") + 1);
//        String charAfterLine = String.valueOf(className.charAt((className.indexOf("_") + 1)));
//        String convertedChar = charAfterLine.toUpperCase();
//        className = className.replace("_" + charAfterLine, convertedChar);
//        return className;
//    }
        //首字母大写
    private String dealTableName() {
        String className  = tableName.substring(0, 1).toUpperCase() + tableName.substring(1);
        return className;
    }

    //将类名转换为文件名,java公共类名与其文件名应该相同,这里将首字母转换为大写 如operateLog 转换后为 OperateLog
    private String dealClassName(String className) {
        String first = className.substring(0, 1).toUpperCase();
        String rest = className.substring(1, className.length());
        String fileName = new StringBuffer(first).append(rest).toString();
        return fileName;
    }
}
AutoGenerationDemo调用方法:
package com.crs811.core;

import freemarker.template.TemplateException;

import java.io.IOException;
import java.sql.SQLException;

public class AutoGenerationDemo {

    public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException, TemplateException {
        //数据库地址
        String url = "jdbc:mysql://localhost:3306/panda?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
        //用户名
        String name = "root";
        //密码
        String passWord = "123456";
        //驱动
        String driver = "com.mysql.jdbc.Driver";
        //表名
        String tableName = "sys_product";
        //模板路径
        String templateDir = "C:\\java\\test";

        //实例化
        AutoGenerationJavaCode autoGenerationJavaCode = new AutoGenerationJavaCode(url, name, passWord, driver,
                tableName,templateDir);

        //调用生成java代码方法
        autoGenerationJavaCode.autoGenerationJavaCode();
    }
}
模版文件:

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值