• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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/)的過程,開搞。

    流程

    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的語法講解網上很多。恩。

    版權聲明:本文為dwangc原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/dwangc/article/details/74932207

    智能推薦

    【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文件...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡