freemarker自动生成代码模板

xiaoxiao2021-02-28  71

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/)的过程,开搞。

流程

解析命令行参数获取配置文件并解析根据配置文件获取数据库表信息删选存储表信息编写模板使用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的语法讲解网上很多。恩。

转载请注明原文地址: https://www.6miu.com/read-37835.html

最新回复(0)