精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

告別無止境的增刪改查:Java代碼生成器

開發 后端
對于一個比較大的業務系統,我們總是無止境的增加,刪除,修改,粘貼,復制,想想總讓人產生一種抗拒的心里。那有什么辦法可以在正常的開發進度下自動生成一些類,配置文件,或者接口呢?

有感于馬上要做個比較大的業務系統,想到那無止境的增刪改查、粘貼復制,頓時腦后升起一陣涼風。于是想到個找或者寫一個Java代碼的生成器,這樣在正常開發進度下,也能余下更多的時間去做些別的事情。

閑話少說,首先總結下需求:

我需要的這個工具能夠讀取數據庫表結構,通過對字段類型、名稱等分析得到需要的各種變量,根據模板生成相應的pojo類、hibernate的xml配置文件、dao和service的接口和類。

需求看起來很簡單,但是一是沒搞過這樣的小工具,二是技術不過關,所以還是想到了找找有沒有開源的代碼拿過來根據自己的需求改。

于是找到了rapid-generator這個開源工具,同學們可以下載rapid-generator直接使用,根據自己的需求寫好模板就行了。

由于自己項目中的特殊情況和公司規范等因素,另外也是想學習下別人的設計,所以我對源碼進行了刪減和功能的修改。

來看下主要的類:

Table:根據表結構建立的對象。

Column:根據表中每列建立的對象。

Generator:生成器核心類,主要負責根據表對象和讀取FreeMarker模板生成最后的java代碼文件。

GeneratorControl:控制生成過程等的一些參數,例如文件是否覆蓋、文件編碼等。

GeneratorProperties:讀取配置文件的類,配置文件包括數據庫連接信息和一些基本的參數配置。

下面來看一下模板的編寫:

pojo模板:

  1. <#include "/java_copyright.include">  
  2. <#assign className = table.className>     
  3. <#assign classNameLower = className?uncap_first>   
  4. package ${basepackage}.pojo.${mpackage}.${table.classNameFirstLower};  
  5.  
  6. <#include "/java_imports.include">  
  7. import com.linkage.agri.pojo.base.BaseEntity;  
  8.  
  9. public class ${className} extends BaseEntity {  
  10.     private static final long serialVersionUID = 5454155825314635342L;  
  11.       
  12.     <#list table.columns as column>  
  13.     /**  
  14.      * ${column.remarks}  
  15.      */ 
  16.     private ${column.simpleJavaType} ${column.columnNameLower};  
  17.     </#list>  
  18.  
  19. <@generateJavaColumns/>  
  20.  
  21. <#macro generateJavaColumns>  
  22.     <#list table.columns as column>  
  23.         <#if column.isDateTimeColumn>  
  24.     public String get${column.columnName}String() {  
  25.         return DateConvertUtils.format(get${column.columnName}(), FORMAT_${column.constantName});  
  26.     }  
  27.     public void set${column.columnName}String(String ${column.columnNameLower}) {  
  28.         set${column.columnName}(DateConvertUtils.parse(${column.columnNameLower}, FORMAT_${column.constantName},${column.simpleJavaType}.class));  
  29.     }  
  30.         </#if>      
  31.     public void set${column.columnName}(${column.simpleJavaType} ${column.columnNameLower}) {  
  32.         this.${column.columnNameLower} = ${column.columnNameLower};  
  33.     }  
  34.       
  35.     public ${column.simpleJavaType} get${column.columnName}() {  
  36.         return this.${column.columnNameLower};  
  37.     }  
  38.     </#list>  
  39. </#macro> 

FreeMarker的基本語法可以看下FreeMarker中文手冊。

${}可以引用很多變量,這些變量包括:環境變量、table對象、配置變量等,這些變量都裝在一個map里,如果自己有特殊需求,當然可以修改源碼來裝載更多的變量值。

注意:當變量為對象時,訪問對象的屬性是通過get方法來訪問的。例如${table.classNameFirstLower},是引用 table對象的getNameFirstLower()方法,即使table對象中沒有nameFirstLower這個屬性也能夠引用。

再看下我寫的dao的模板:

  1. <#include "/java_copyright.include">  
  2. <#assign className = table.className>     
  3. <#assign classNameLower = className?uncap_first>     
  4. package ${basepackage}.dao.${mpackage}.${table.classNameFirstLower};  
  5.  
  6. import java.math.BigDecimal;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9.  
  10. import com.linkage.agri.dao.base.AbstractHibernateDAO;  
  11. import com.linkage.agri.exception.DAOException;  
  12. import ${basepackage}.pojo.${mpackage}.${classNameLower}.${className};  
  13.  
  14. <#include "/java_imports.include">  
  15.  
  16. public Class ${className}DAOImpl extends AbstractHibernateDAO implements ${className}DAO  
  17. {  
  18.     /**  
  19.      * <query all>  
  20.      * @param paramMap  
  21.      * @param orderMap  
  22.      * @param pageNum  
  23.      * @param pageSize  
  24.      * @return  
  25.      * @throws DAOException  
  26.      */ 
  27.     @SuppressWarnings 
  28.     public List<${className}> queryList${className}ByAttr(Map<String, Object> paramMap, Map<String, String> orderMap, int pageNum,  
  29.         int pageSize)  
  30.         throws DAOException  
  31.     {  
  32.         return super.listInstances(${className}.class, paramMap, orderMap, pageNum, pageSize);  
  33.     }  
  34.       
  35.     /**  
  36.      *   
  37.      * <find one by id>  
  38.      * @param serial  
  39.      * @throws DAOException  
  40.      */ 
  41.     public ${className} find${className}By${table.pkColumn.columnName}(${table.pkColumn.simpleJavaType} ${table.pkColumn.columnNameFirstLower})  
  42.         throws DAOException  
  43.     {  
  44.         return (${className})super.findById(${className}.class, ${table.pkColumn.columnNameFirstLower});  
  45.     }  
  46.       
  47.     /**  
  48.      *   
  49.      * <save one>  
  50.      * @param ${table.classNameFirstLower}  
  51.      * @throws DAOException  
  52.      */ 
  53.     public ${table.pkColumn.simpleJavaType} save${className}(${className} ${table.classNameFirstLower})  
  54.         throws DAOException  
  55.     {  
  56.         return (${table.pkColumn.simpleJavaType})super.saveInstance(${table.classNameFirstLower});  
  57.     }  
  58.       
  59.     /**  
  60.      *   
  61.      * <update one>  
  62.      * @param ${table.classNameFirstLower}  
  63.      * @throws DAOException  
  64.      */ 
  65.     public void update${className}(${className} ${table.classNameFirstLower})  
  66.         throws DAOException  
  67.     {  
  68.         super.updateInstance(${className});  
  69.     }  
  70.       
  71.     /**  
  72.      * <check one is have?>  
  73.      * @param paramMap  
  74.      * @return  
  75.      * @throws DAOException  
  76.      */ 
  77.     public boolean check${className}IsHaveByAttr(Map<String, Object> paramMap)  
  78.         throws DAOException  
  79.     {  
  80.         StringBuffer sqlBuffer = new StringBuffer();  
  81.         sqlBuffer.append("SELECT COUNT(*) FROM ${table.sqlName} T ");  
  82.         sqlBuffer.append("WHERE T.${table.pkColumn.sqlName} = ? ");  
  83.           
  84.         BigDecimal big = (BigDecimal)super.findUniqueResultBySQLWithParams(sqlBuffer.toString(), paramMap.get("${table.pkColumn.columnNameFirstLower}"));  
  85.         return big.intValue() > 0 ? false : true;  
  86.     }  
  87.       
  88.     /**  
  89.      * <update some>  
  90.      * @param ${table.classNameFirstLower}List  
  91.      * @return  
  92.      * @throws DAOException  
  93.      */ 
  94.     public void update${className}Batch(List<${className}> ${table.classNameFirstLower}List)  
  95.         throws DAOException  
  96.     {  
  97.         super.updateBatchInstance(${table.classNameFirstLower}List);  
  98.     }  
  99.       
  100.     /**  
  101.      *   
  102.      * <delete one>  
  103.      * @param ${table.classNameFirstLower}  
  104.      * @throws DAOException  
  105.      */ 
  106.     public void delete${className}(${className} ${table.classNameFirstLower})  
  107.         throws DAOException  
  108.     {  
  109.         super.deleteInstance(${table.classNameFirstLower});  
  110.     }  
  111.  

建立模板是能否解決自己問題的關鍵,在摸索出門道以后寫模板變的十分簡單。其實原理很簡單,就是用一系列占位符來替換實際的變量值。

模板路徑可以按照實際項目中的路徑來拜訪,生成器可以讀取某個路徑下所有模板進行生成,結果如下圖:

接口和實現:

就說這么多吧,感興趣的可以研究下這個工具的源碼,也DIY出一套自己代碼生成工具。不感興趣的直接寫模板就能用。

我只是走在路上,偶爾駐足觀賞,偶爾回頭看看。

原文鏈接:http://www.cnblogs.com/zhuYears/archive/2012/02/29/2373491.html

【編輯推薦】

  1. 使用JNI進行混合編程:在Java中調用C/C++本地庫
  2. Java通過SSH2協議運行遠程程序
  3. Java Socket編程:初識TCP Socket
  4. Java Socket編程:如何識別網絡主機
  5. Java Socket編程:基本的術語和概念
責任編輯:林師授 來源: 朱樣年華的博客
相關推薦

2009-04-24 21:02:08

Vmwareesx虛擬化

2009-12-21 13:50:55

Linux桌面

2009-11-03 14:53:13

無線接入網

2017-03-20 17:49:21

Java Web模板代碼

2021-07-23 11:24:54

Create Inc開源G代碼生成器

2015-08-25 15:54:17

程序員代碼生成器

2015-10-30 10:24:31

JAVA微信插件框架

2023-05-17 16:02:00

CSS工具代碼生成器

2011-09-21 13:33:48

DBA數據庫

2020-10-20 09:53:11

代碼IDEA生成器

2012-03-30 09:31:44

WEBCSS

2015-04-22 09:36:27

JAVA代碼生成器

2023-01-06 07:52:52

代碼生成器開發

2021-10-29 11:25:41

代碼編程語言Java

2021-12-10 09:45:19

生成器配置代碼

2017-09-06 09:26:03

Python生成器協程

2014-07-18 10:21:26

陌生人交友社交

2022-05-19 14:57:30

CSS代碼工具

2010-06-12 09:51:07

Eclipse插件Java代碼生成器slave4j1.0.

2009-07-03 09:29:24

KeelKit
點贊
收藏

51CTO技術棧公眾號

高潮毛片无遮挡| 日韩五码在线观看| 这里只有久久精品视频| 色喇叭免费久久综合| 91精品麻豆日日躁夜夜躁| 精品免费久久久久久久| 天天操天天舔天天干| 丝袜美腿亚洲色图| 九九久久久久99精品| 国产夫妻性爱视频| 成人免费91| 欧美日韩精品在线播放| 色爱区成人综合网| 99热这里只有精品2| 国产精品国精产品一二| 久久久久久久久一| 亚洲va久久久噜噜噜久久天堂| 男人天堂中文字幕| 日本在线一区二区| 午夜伊人狠狠久久| 亚洲啪啪av| 亚洲伦理在线观看| 欧美a级理论片| 久久久人成影片一区二区三区观看| 在线观看日本中文字幕| 亚洲天堂av资源在线观看| 欧美性受xxxx黑人xyx| 久艹在线免费观看| 黄色网址在线免费播放| 久久精品一区二区| 国产女主播一区二区三区| 亚洲最大成人在线视频| 小嫩嫩精品导航| 欧美另类高清videos| www亚洲色图| 牛牛精品成人免费视频| 日韩一区二区三区高清免费看看| 天天爱天天操天天干| heyzo一区| 一区二区三区四区五区视频在线观看| 亚洲精品不卡| jzzjzzjzz亚洲成熟少妇| 不卡视频免费播放| 高清国语自产拍免费一区二区三区| 成人一级免费视频| 亚洲作爱视频| 国内精品视频一区| 久草视频在线资源| 欧美成人精品| 久久中文字幕国产| 国产精品suv一区二区88 | 国产免费一区二区三区在线观看| 欧美激情亚洲综合| 亚洲三级视频| 午夜精品在线观看| 国产成人啪精品午夜在线观看| 亚洲免费二区| 久久人人爽亚洲精品天堂| 99热6这里只有精品| 全球成人免费直播| 中文字幕在线视频日韩| 美女100%露胸无遮挡| 欧美精品momsxxx| 亚洲视频在线观看免费| b站大片免费直播| 国产成人精品999在线观看| 亚洲欧美精品中文字幕在线| 亚洲激情视频小说| 国产成人调教视频在线观看| 亚洲性日韩精品一区二区| 国产一二三四五区| 日韩欧美精品| 久久久精品一区二区三区| 免费国产羞羞网站美图| 欧美在线不卡| 国模叶桐国产精品一区| 日本午夜视频在线观看| 日日摸夜夜添夜夜添国产精品| 国产精品成久久久久三级| 在线视频 中文字幕| 九色porny丨国产精品| 亚洲精品在线观看91| 九九**精品视频免费播放| 国产精品久久在线观看| 91麻豆成人精品国产免费网站| 激情偷乱视频一区二区三区| 亚洲www在线| 你懂的网站在线| 国产亚洲精品aa| 在线国产伦理一区| 美女日批视频在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 91热这里只有精品| 日韩成人视屏| 日韩国产激情在线| 欧美视频一区二区在线| 激情久久一区| 国产精品aaa| 精品人妻少妇AV无码专区| 99九九99九九九视频精品| 亚洲国产午夜伦理片大全在线观看网站 | 久久婷婷丁香| 亚洲va久久久噜噜噜| 三区在线视频| 久久久久久9| 国产精品视频一| 老熟妇高潮一区二区高清视频| 久久夜色精品国产噜噜av| 中文字幕在线亚洲三区| 美女网站在线看| 欧美日韩亚洲综合| 亚洲天堂资源在线| 91久久电影| 91sa在线看| 国产三级漂亮女教师| 久久夜色精品国产噜噜av | 尹人成人综合网| 国产女人精品视频| 欧美视频综合| 亚洲一二三区不卡| 玖玖爱视频在线| 国产成人精品免费视| 久久久噜噜噜久久中文字免| 一区二区三区免费在线| 337p粉嫩大胆噜噜噜噜噜91av| 国产av第一区| 2019年精品视频自拍| 亚洲国产91色在线| 波多野结衣在线网址| 日韩不卡一区二区三区| 久久影视中文粉嫩av| 四虎影视国产在线视频| 欧美日本免费一区二区三区| 国产精品三级在线观看无码| 伊人精品视频| 9a蜜桃久久久久久免费| 黄色网页在线播放| 欧美三级一区二区| 超薄肉色丝袜一二三| 久久精品道一区二区三区| 国产日韩久久| 黑人玩欧美人三根一起进| 91精品国产色综合久久久蜜香臀| 手机免费观看av| 美女视频黄a大片欧美| 欧美aaaaa喷水| 日韩电影毛片| 亚洲国产精品yw在线观看| 久久伊人成人网| 国产成人在线视频网址| 亚洲黄色网址在线观看| 91麻豆精品一二三区在线| www.亚洲免费视频| 97人妻人人澡人人爽人人精品| 久久久精品免费网站| 苍井空浴缸大战猛男120分钟| 日本三级久久| 日韩美女福利视频| 高清日韩av电影| 欧美性大战久久| 69精品无码成人久久久久久| 日韩精品免费专区| 中文字幕精品一区日韩| 99精品在线免费观看| 欧美精品免费看| 午夜精品在线播放| 亚洲已满18点击进入久久| 成人在线电影网站| 一区二区久久| 日本一区视频在线播放| 福利一区二区三区视频在线观看| 社区色欧美激情 | 国产孕妇孕交大片孕| 亚洲综合色噜噜狠狠| 一本加勒比波多野结衣| 久久国产精品99国产| 亚洲一卡二卡三卡| 亚洲2区在线| 欧洲永久精品大片ww免费漫画| 九色在线视频| 欧美妇女性影城| 国产真实夫妇交换视频| 久久久夜色精品亚洲| 91小视频网站| 激情久久婷婷| 五月天丁香综合久久国产| 亚洲狼人综合| 2019中文字幕免费视频| youjizz在线播放| 日韩一区二区三| 四虎精品永久在线| 亚洲欧洲日产国码二区| 国产精品入口麻豆| 蜜桃精品视频在线观看| 97超碰国产精品| 精品久久视频| caoporen国产精品| 日韩毛片一区| 久久久久久久爱| 在线免费看黄网站| 欧美精品一区二区久久婷婷| 中文在线观看免费高清| 亚洲一区二区三区视频在线播放| 国产精品扒开腿做爽爽| 国产精品1区2区3区在线观看| 无码aⅴ精品一区二区三区浪潮 | 自拍偷拍亚洲精品| 亚洲国产精品久久久久久6q | 国产喷水吹潮视频www| 欧美午夜女人视频在线| 国产67194| 国产三级一区二区| 国产精品久久久免费观看| 老汉av免费一区二区三区| 黄色国产一级视频| 雨宫琴音一区二区三区| 色99中文字幕| 美女毛片一区二区三区四区最新中文字幕亚洲 | 久久黄色免费视频| 国产精品久久久久9999吃药| 精品人妻一区二区三区香蕉| 国产成人午夜精品5599| 亚洲欧洲日本精品| 视频一区在线视频| 国产午夜大地久久| 黄色欧美日韩| 丰满人妻一区二区三区53号| 欧美好骚综合网| 欧美一区二区三区四区在线观看地址| 136导航精品福利| 亚洲a一级视频| 久久国内精品| 国产精品成人v| 日韩中文影院| 欧美又大又硬又粗bbbbb| 9lporm自拍视频区在线| 欧美日本在线视频中文字字幕| 夜级特黄日本大片_在线| 一区二区欧美亚洲| 成人一区二区不卡免费| 亚洲色在线视频| 久热av在线| 亚洲欧美在线播放| 五十路在线观看| 亚洲黄色www| 香蕉人妻av久久久久天天| 精品国产免费一区二区三区香蕉| 精品国产乱码一区二区三| 欧美高清hd18日本| 99精品视频在线播放免费| 51精品国自产在线| 国产又大又黑又粗| 91精品国产乱码久久蜜臀| 国产高清免费在线观看| 日韩欧美国产午夜精品| 免费观看成年人视频| 亚洲国产精品va在看黑人| 网站黄在线观看| 亚洲美女av在线| 高清性色生活片在线观看| 在线成人激情视频| 日本在线免费播放| 欧美成人亚洲成人| 国产亚av手机在线观看| 97在线观看免费高清| 色在线中文字幕| 国产成人亚洲综合| 欧美成人免费全部网站| 91色精品视频在线| av不卡一区| 欧美精品一区二区三区四区五区| 精品免费一区二区| 在线精品日韩| 亚洲午夜一区| 成人久久久久久久久| 麻豆免费看一区二区三区| 久久久久xxxx| 99亚偷拍自图区亚洲| 国内精品卡一卡二卡三| 亚洲欧洲一区二区三区| 国产成人精品av久久| 一本色道亚洲精品aⅴ| 国产精品-色哟哟| 欧美精品一区二区三区很污很色的 | 九九视频精品免费| 中国黄色片视频| 欧美极品少妇xxxxⅹ高跟鞋 | 日本丶国产丶欧美色综合| 91在线公开视频| 精品成人私密视频| 国产在线观看网站| 欧美理论电影在线播放| 日韩精品99| 97影院在线午夜| 精品一区毛片| 男人日女人的bb| 久久亚洲风情| 第一页在线视频| 国产网红主播福利一区二区| 青青草偷拍视频| 欧美在线视频你懂得| 亚洲福利在线观看视频| 中日韩美女免费视频网址在线观看| 日本三级在线观看网站| 国产精品狼人色视频一区| 国产精品tv| 中文字幕一区二区三区四区五区六区 | 99久久国产综合精品色伊| 日本少妇aaa| 欧美性极品少妇精品网站| 精品人妻一区二区三区麻豆91| 一本久久综合亚洲鲁鲁| 超碰在线cao| 亚洲一区美女视频在线观看免费| 精品国产一区二区三区香蕉沈先生| 欧美交换配乱吟粗大25p| 青青草国产成人av片免费| 国产一级免费片| 亚洲精品高清视频在线观看| 波多野结衣电车痴汉| 日韩成人在线播放| а√资源新版在线天堂| 91精品国产综合久久久久久久久| 日韩成人午夜| 大陆av在线播放| 国产美女精品人人做人人爽| 欧美性受xxxx黑人| 色8久久人人97超碰香蕉987| 天堂在线资源网| 欧美激情视频一区二区| 国产精品麻豆| 致1999电视剧免费观看策驰影院| 日韩经典一区二区| 最近中文字幕免费| 欧美色视频日本版| 日韩欧美电影在线观看| 国语自产在线不卡| 成人免费在线电影网| 97久久国产亚洲精品超碰热| 国产一区视频在线看| 国产精品夜夜夜爽阿娇| 欧美日韩国产免费一区二区| 国产亚洲依依| 国产精品第2页| 精品国产网站| 成人午夜激情av| 国产精品无人区| 成人黄色片在线观看| 日韩中文在线观看| 亚洲成人1区| 2025韩国大尺度电影| 激情欧美一区二区| 91视频综合网| 日韩美女一区二区三区四区| 久久亚洲导航| 国产精品99久久久久久久| 99国产精品99久久久久久粉嫩| 四虎精品一区二区| 精品欧美国产一区二区三区| 免费在线黄色网址| 国产精品激情自拍| 99精品在线| 国产成人精品一区二区在线小狼| 亚洲一区二区精品3399| 婷婷开心激情网| 日本高清+成人网在线观看| 欧美日韩播放| 岛国av免费在线| 亚洲高清中文字幕| 青青视频在线观| 国产成人精品久久| 天天做天天爱综合| 三大队在线观看| 欧美日韩精品在线观看| 成人在线免费观看| 91久久大香伊蕉在人线| 日韩一级不卡| 精品国产aaa| 欧美一区二区美女| 亚洲国产成人二区| 一区二区三区av在线| 成人免费视频视频在线观看免费| 亚洲免费在线观看av| 中文字幕日韩专区| 99久热这里只有精品视频免费观看| 国产xxxxx在线观看| 国产精品高潮呻吟久久| 黄色www视频| 国产精品亚发布| 欧美视频导航| 欧美日韩中文字幕视频| 欧美成人午夜电影| 亚洲成人短视频| 国产视频在线观看网站| 久久精品视频网| 丰满肉嫩西川结衣av| 国产精品激情自拍| 亚洲国产电影| 在线观看天堂av| 日韩久久免费视频|