代码生成器,附(代码)

码生成器=模板+数据+合成机制

FreeMarker是一款模板引擎:即是一种基本模板何数据,并用来生成输出文本(HTML网页,电子邮箱,配置文件,源代码等)的通用工具。

具体操作步骤:

下载freemarker jar包

作用:初始化环境配置

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>

常用API:在这里插入图片描述
初始化:

/**
 *  完成环境初始化
 */
public void init(){
    //Configuration的实例化
    configuration=new Configuration(Configuration.getVersion());
    //设置模板所在路径
    String path=this.getClass().getClassLoader().getResource("").getPath();
    try {
        configuration.setDirectoryForTemplateLoading(new File(path));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

**configuration.getTemplate(tempName);**模板的获取

template.process(Object data,Writer out)方法
参数data对数据的传递,out保存路径

1.输出基本类型数据或对象属性
数 据 或 者 {数据}或者 {数据.属性}
2.输出集合
<#list 名 as item>
</#list>
3.判断(item_has_next是否还有下一个元素)
<#if item_has_next>…
<#else>…
</#if>

/**
 * 代码自动生成
 * @param tempName 模板的名称
 * @param savaPath  保存路径
 */
public void process(String tempName,String savaPath){
    try {
        //获取模板实例
        Template template=configuration.getTemplate(tempName);
        //组装数据
        Map map=new HashMap();
        map.put("name","fang");
        //初始化保存路径
        OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream(savaPath));
        //传参,生成数据
        template.process(map,outputStreamWriter);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我创建的模板如下:
在这里插入图片描述

在E:\下创建成功!

在这里插入图片描述

获取数据库的所有表名

创建DatabaseMetaData对象:
DatabaseMetaData dbmd = conn.getMetaData();
getTables方法返回该数据库的所有表:
resultSet = dbmd.getTables(null, null, null, new String[]{“TABLE”});
获得结果集内该列下的表
String tableName=resultSet.getString(“TABLE_NAME”);

/**
 * 获得该数据库表的信息
 * @return
 */
public static List<Table> getTable() {
    List<Table> list = new ArrayList<Table>();
    try {
        //3.获取所有表名的结果集
        ResultSet rs = dbmd.getTables(null, null, null, new String[]{"TABLE"});
        //4.遍历结果集
        while (rs.next()) {
            Table table = new Table();
            String tableName = rs.getString("TABLE_NAME");
            table.setClassName(PojoGeneratorUtil.toUpperCase(tableName));
            table.setTableName(PojoGeneratorUtil.tableName(tableName));
            table.setTable(tableName);
            table.setList(getColumns(tableName));
            list.add(table);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

方法getColumns获得表内信息

resultSet = dbmd.getColumns(null, “%”, tableName,"%");
//名称
String columnName=resultSet.getString(“COLUMN_NAME”);
//类型
String columnType=resultSet.getString(“TYPE_NAME”);
//备注
String remarks=resultSet.getString(“REMARKS”);

/**
 * 获得该数据库表内的字段信息
 * @return
 */
public static List<Column> getColumns(String tableName) {
    List<Column> list = new ArrayList<Column>();
    try {
        ResultSet rs = dbmd.getColumns(null, "%", tableName, "%");
        while (rs.next()) {
            Column column = new Column();
            String columnName = rs.getString("COLUMN_NAME");
            String columnType = rs.getString("TYPE_NAME");
            String remarks = rs.getString("REMARKS");

            column.setColumnName(columnName);
            column.setUpcolumnName(PojoGeneratorUtil.toUpperCase(columnName));
            column.setJavaType(PojoGeneratorUtil.trJavaType(columnType));
            column.setRemarks(remarks);
            list.add(column);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return list;
}

表名数据的封装:

在这里插入图片描述

字段数据封装:

在这里插入图片描述

获取模板,初始化环境,代码自动生成!

public class GeneratorUtil {
    //Configuration的实例化
    private static   Configuration configuration=new Configuration(Configuration.getVersion());

    private  String path=this.getClass().getClassLoader().getResource("").getPath()+"\\template\\";
    /**
     *  完成环境初始化
     */
    public void init(String path){
        try {
            configuration.setDirectoryForTemplateLoading(new File(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 代码自动生成
     * @param tempName 模板的名称
     * @param savaPath  保存路径
     */
    public static void process(String tempName,Map map,String savaPath){
        try {
            //获取模板实例
            Template template=configuration.getTemplate(tempName);
            //初始化保存路径
            OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream(savaPath));
            //传参,生成数据
            template.process(map,outputStreamWriter);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

举例如下:(创建pojo)

模板:
在这里插入图片描述

1.pojoTemplate.ftl如下:

import java.io.Serializable;
import java.util.Date;

public class ${Table.className} implements Serializable {

    <#list Table.list as list>
        <#if list.remarks!=''>
        //${list.remarks}
        </#if>
        private ${list.javaType} ${list.columnName};
    </#list>

    <#list Table.list as list>

        public ${list.javaType} get${list.upcolumnName}() {
        return ${list.columnName};
        }

        public void set${list.upcolumnName}(${list.javaType} ${list.columnName}) {
        this.${list.columnName} = ${list.columnName};
        }

    </#list>
}

2.初始化,自动生成代码

3.获得数据带入模板生成代码
在这里插入图片描述
即成功!

附(代码)
链接: https://pan.baidu.com/s/15VAeiJ0lROsylcNPi-AtQA 提取码: avj1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值