freemarker自动生成代码模板

http://download.csdn.net/download/dwangc/9895462
最近需求中,根据数据库表的信息生成PO,DAO,还有sql语句,如果手写很是重复繁琐。然后又要用到mybaties,所以给我的任务就是自动生成PO类,DAO类和sql的xml文件
首先分析了给我的最简单的需求样例,
1. 一个实体类对应数据库表的字段。
2. 一个DAO类,包括简单的有null insert,无null insert,update,getById,分页查询find,count。
3. 一个对应DAOsql语句的xml文件。
开始google,最后决定用freemarker模板参考mybaties generator(http://www.mybatis.org/generator/)的过程,开搞。

流程
  1. 解析命令行参数
  2. 获取配置文件并解析
  3. 根据配置文件获取数据库表信息
  4. 删选存储表信息
  5. 编写模板
  6. 使用freemarker根据模板生成文件
代码大概

这里写图片描述
本来想成功之后好好整理一下类之间的关系,怎么着也用些设计模式之类的,好支持扩展(意淫ing…),发现ok之后不知道有没有多大意义,算了吧。事情那么多,不管它了,继续当菜鸟。

配置文件
//驱动类型名称
driver.class=com.mysql.jdbc.Driver
//数据库地址
db.url=jdbc:mysql://localhost:3306/exam
//数据库用户名
db.user=root
//数据库密码
db.password=root
//生成PO类地址
java.model.package=com.entity
//生成DAO和sql语句的地址
sql.mapping.package=com.dao
//生成工程名
project=mybaties
//数据库表名,支持多张表(逗号隔开)
table.names=text_exam,user

用Properties类load()配置文件,将其存储在自定义的Config类中,方便使用。

获取数据库表名
Class.forName(config.getDriverClass());
connect=DriverManager.getConnection(config.getDbUrl(), config.getDbUser(), config.getDbPassword());
DatabaseMetaData databaseMetaData = connect.getMetaData();
//获取主键信息
ResultSet rs = databaseMetaData.getPrimaryKeys(null, null, tableInfo.getTableName());
//也可以获取各字段的信息
ResultSet rs = databaseMetaData.getColumns(null, null, tableInfo.getTableName(), "%");

设计一个类,将信息存储在类中并用过JavaTypeResolver类完成数据库字段类型和java类型之间的转换。

设计模板

因为之前没写过freemarker类,一边写一边google,既崩溃又实在,PO和DAO模板是比较好写的,sql模板真的让我敲桌子。
ftl示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<#macro mapperEl value val>${r"#{"}${value},jdbcType=${val}}</#macro>
<#macro mapperE2 value >${r"#{"}${value}}</#macro>
<#macro mapperE3 value>${r"${"}${value}}</#macro> 

<mapper namespace="${tableInfo.mapperPackage}.${tableInfo.tableclassName}DAO" >

  <insert id="insert" parameterType="${tableInfo.modelPackage}.${tableInfo.tableclassName}" >
    insert into ${tableInfo.tableName}
    <trim prefix="(" suffix=")" suffixOverrides="," >
    <#list columns as column>
      <if test="${column.javaProperty} != null" >
        ${column.actualColumnName},
      </if>
    </#list>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <#list columns as column>
      <if test="${column.javaProperty} != null" >
        <@mapperEl column.javaProperty column.jdbcTypeName/>,
      </if>
    </#list>
    </trim>
生成文件

获取freemarker的configuration,传入写好的ftl文件,配置好生成地址。
将项目打成jar包,和配置文件放在一起
然后编写运行命令批处理文件run.bat。

java -jar mygenerate.jar -configfile config.properties -overwrite

这里写图片描述
点击run.bat运行。
本来想放上动态图装一下的,上传多次好像都没用,那就放图片吧!
生成的DAO类
这里写图片描述

生成的PO类和sql语句
这里写图片描述


OVER


最后附上代码的下载:http://download.csdn.net/download/dwangc/9895462


哦哦,另外好像涉及到jar定位资源文件的问题,随带总结了一下各种路径的问题。另外freemarker的语法讲解网上很多。恩。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值