freemarker自動生成代碼模板
標簽: 數據庫 xml 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/)的過程,開搞。
流程
- 解析命令行參數
- 獲取配置文件并解析
- 根據配置文件獲取數據庫表信息
- 刪選存儲表信息
- 編寫模板
- 使用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的語法講解網上很多。恩。
智能推薦
【freemarker】【代碼生成器】
數據模型的類 作用,是生成目標文件的數據模型.傳入domain類,返回其數據模型的封裝類 構造器提供domain類的Class對象. propNames:屬性List className:簡單名的字符串(首字母大寫) basePackage:基礎包的字符串 例: 傳入一個類com.lwf.domain.Employee的Class對象,生成ci對象 * ci.basePackage= com.lw...
Java之利用Freemarker模板引擎實現代碼生成器,提高效率
本文轉自:https://blog.csdn.net/huangwenyi1010/article/details/71249258 開心一笑 【1.你以為我會眼睜睜的看著你去送死?我會閉著眼睛。2.給你講個故事,從前有個笨蛋,他非常笨,別人問他問題他只會回答“沒有”,這個故事你聽過嗎?】 **** 大家好,我錄制的視頻《Java之優雅編程之道》已經在CSDN學院發布了,有...
PP代碼生成器(三) 設計freemarker模板, 創建解決方案
這一節, 我們根據數據庫生成PO對象為例, 來探討如何使用PP制作freemarker模板, 創建解決方案. 工料: eclipse jee, 最好是安裝freemarker插件, 可以高亮顯示freemarker標簽. 可用的數據庫, 可以是mysql, oracle, db2, postgresql中的任意一種. 如果沒有數據庫, 使用pp_home中的sample/sample-mysql....
基于freemarker模板的Spring Boot + MyBatisPlus的代碼生成器
基于freemarker模板的Spring Boot + MyBatisPlus的代碼生成器 一次生成entity,controller,service,serviceImpl,mapper,mapper.xml文件,省去做無意義的體力活 簡化到最精簡配置,使用方便,配置簡單 同時生成常用的保存,修改,刪除,分頁查詢方法 目錄結構 部分代碼 源代碼 點擊查看源代碼...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...