精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产片一区二区| 欧美黄色一级视频| 欧美性感一类影片在线播放| 亚洲不卡中文字幕| 欧美brazzers| 亚洲激情中文| 日韩电影大片中文字幕| 在线看的黄色网址| 美女日批视频在线观看| 91免费观看在线| 国产精品永久免费视频| 国产亚洲精品久久777777| 中文字幕av一区二区三区人| 欧美巨大另类极品videosbest| 成人免费a级片| 国产在线一二| 成人精品国产福利| 国产精品久久久久免费a∨| 成人免费视频网站入口::| 国产精品网站在线看| 欧美日韩一区二区三区四区| 国产 日韩 欧美在线| av中文字幕在线| 9i在线看片成人免费| 成人av在线亚洲| 狠狠人妻久久久久久| 欧美啪啪一区| 最近2019中文字幕mv免费看 | 欧美深深色噜噜狠狠yyy| 91影院在线播放| 久久青草久久| 久久噜噜噜精品国产亚洲综合| 国产一二三av| 久久综合亚洲| 日韩精品免费在线视频观看| 国产成人精品综合久久久久99| 精品123区| 一本到高清视频免费精品| 精品一区二区三区毛片| 1区2区3区在线观看| 久久久久久影视| 国产欧美日韩一区| 亚洲国产www| 精品综合免费视频观看| 国产精品久久久久久久久免费 | 欧美午夜精品久久久久久孕妇| 青青草精品视频在线| 日本天码aⅴ片在线电影网站| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | jlzzjlzz国产精品久久| www.成人三级视频| 精品久久久免费视频| 国产麻豆精品视频| 91在线无精精品一区二区| 国产一区二区在线视频观看| 久久精品国产77777蜜臀| 国产精品综合久久久| 婷婷激情五月综合| 日产国产欧美视频一区精品| 日本一区二区三区在线播放| 精品人妻无码一区二区性色| 另类天堂av| 国产99久久精品一区二区 夜夜躁日日躁 | 香蕉视频网站在线| www.66久久| 免费h精品视频在线播放| 国产精品久久久久久久龚玥菲| 国产亚洲一二三区| 手机看片福利永久国产日韩| 一级毛片视频在线| 亚洲美女视频在线| 成人一区二区av| 韩国成人免费视频| 欧美日韩国产限制| 苍井空浴缸大战猛男120分钟| 视频二区不卡| 制服视频三区第一页精品| 特级黄色片视频| 国产精品调教视频| 亚洲午夜国产成人av电影男同| 中文字幕第24页| 亚州av乱码久久精品蜜桃| 精品自拍视频在线观看| 日韩欧美性视频| 日韩—二三区免费观看av| 成人免费在线网址| 国产黄色免费大片| 91影院在线免费观看| 视频一区在线免费观看| 日本乱理伦在线| 色综合天天综合网国产成人综合天 | 最新av在线播放| 亚洲r级在线视频| 色婷婷综合久久久久中文字幕 | 欧美日韩大片一区二区三区| 在线观看的av| 亚洲成人免费视| 欧美日韩在线观看不卡| 亚洲va欧美va人人爽成人影院| 亚洲精品美女视频| 天天色天天综合| 一本色道久久综合| 91精品中文在线| 天堂在线中文资源| 亚洲欧美另类小说视频| 逼特逼视频在线| 欧美精品三级在线| 国产一区二区动漫| 国产中文字字幕乱码无限| 免费久久99精品国产| 国产精选一区二区| 麻豆视频免费在线观看| 色伊人久久综合中文字幕| 中文字幕第六页| 欧美日韩爱爱| 68精品国产免费久久久久久婷婷| 一级黄色小视频| 久久久一区二区三区| 成年人网站国产| 国产剧情一区二区在线观看| 亚洲丝袜一区在线| 国产在线视频卡一卡二| 精品一区二区三区影院在线午夜| 久久香蕉综合色| 丁香花在线观看完整版电影| 91精品国产综合久久蜜臀| 国产熟女一区二区| 国产精品人人爽人人做我的可爱| 91大片在线观看| 欧美性天天影视| 91久久线看在观草草青青| 欧美日韩一区二区三区四区五区六区| 99久久.com| 国产精品免费福利| 懂色一区二区三区| 欧美午夜片在线免费观看| 韩国av中国字幕| 欧美一区免费| 91日韩在线视频| 日本成人网址| 欧美日韩免费观看一区三区| 亚洲精品乱码久久久久久久久久久久 | 国产午夜亚洲精品一级在线| 久久久国产一区二区| 亚洲网站免费观看| 国产精品三级av在线播放| 91网址在线播放| 精品国产一级毛片| 国产福利视频一区| 高清国产福利在线观看| 在线观看不卡一区| 国产欧美一区二区三区在线观看视频| 日韩高清一级片| 亚洲欧洲日韩综合二区| 国产精品亲子伦av一区二区三区| 国产一区二区av| 伊人精品一区二区三区| 国产精品色哟哟网站| 精品久久久99| 欧美在线看片| 狠狠色综合欧美激情| 超碰国产一区| 中文字幕欧美国内| 一级淫片免费看| 亚洲精品伦理在线| 亚洲黄色小说在线观看| 99国内精品| 日韩av影视| 99久热在线精品视频观看| 欧美日本亚洲视频| 十八禁一区二区三区| 日韩欧美第一页| 永久免费毛片在线观看| 国产一区二区电影| 国产精品成人久久电影| 五月综合久久| 国产欧美精品在线| 免费在线看污片| 亚洲国产高潮在线观看| 国产精品久久久久久人| 国产精品久久久久久久浪潮网站| 日韩av影视大全| 国产亚洲毛片| 自拍偷拍亚洲色图欧美| 国产精品中文字幕制服诱惑| 国产va免费精品高清在线观看| 在线观看h片| 亚洲国产成人久久综合一区| 中文天堂在线视频| 亚洲午夜免费福利视频| 欧美丰满老妇熟乱xxxxyyy| 国产一区二区三区国产| www.中文字幕在线| 99精品视频在线| 精品久久久三级| 四虎在线精品| 7777免费精品视频| 老司机av在线免费看| 亚洲精品第一国产综合精品| 91国在线视频| 亚洲国产视频a| 国产精品视频在| 成人av午夜电影| 美女网站免费观看视频| 在线看片不卡| 神马一区二区影院| 全球av集中精品导航福利| 国产视频观看一区| 自拍偷拍亚洲视频| 欧美激情第1页| 久久久久久久久免费视频| 日韩高清免费在线| www.亚洲欧美| 欧美日韩一卡二卡三卡| 伊人手机在线视频| 一区二区三区四区不卡在线| 蜜桃av免费观看| 久久精品欧美一区二区三区不卡| 亚洲少妇一区二区| 激情久久五月天| 日本熟妇人妻中出| 亚洲美女91| 精品视频在线观看一区二区| 日韩高清欧美| 日韩在线观看电影完整版高清免费| 中文字幕一区二区三区中文字幕 | 九一成人免费视频| 国产欧美日韩综合精品二区| 欧美高清一级片| 成人精品在线视频| 国产成人77亚洲精品www| 欧美一区二区三区……| 2021中文字幕在线| 欧美劲爆第一页| 一二三四区在线观看| 日韩有码在线观看| 99视频在线观看地址| 国产亚洲综合久久| 国产视频精选在线| 亚洲色图偷窥自拍| 免费一级在线观看| 亚洲欧美日韩精品久久| 色就是色亚洲色图| 日韩国产欧美精品一区二区三区| 理论片中文字幕| 精品国产sm最大网站免费看| 超碰在线观看99| 日韩精品一区二区三区在线观看 | 99精品欧美一区二区蜜桃免费| 永久免费未满蜜桃| 成人av在线资源网| 国产精品手机在线观看| www.亚洲色图.com| 国产精品一级黄片| 91香蕉视频污| 欧美激情aaa| 欧美激情在线一区二区| 国产一级淫片久久久片a级| 国产精品黄色在线观看| 亚洲国产美女视频| 亚洲综合视频网| 国产 欧美 日韩 在线| 欧美日韩国产综合视频在线观看中文| 制服.丝袜.亚洲.中文.综合懂色| 欧美午夜久久久| 久草视频在线免费| 欧美日韩国产首页在线观看| 国产美女www爽爽爽视频| 欧美一区二区三区视频在线 | 成人深夜在线观看| 伊人网在线视频观看| 国产精品系列在线| 久草综合在线视频| 天天色 色综合| 91在线视频免费播放| 欧美日韩精品欧美日韩精品一| 99免费在线视频| 亚洲国产精品va在线观看黑人| 免费观看成年在线视频网站| www.亚洲一区| av成人福利| 国产精品99久久久久久白浆小说| 中文字幕综合| 国产一区免费在线| 国产欧美日韩免费观看 | 国产精品五区| 亚洲娇小娇小娇小| 成人性生交大合| 精品无码在线观看| 一区二区高清免费观看影视大全| 久久中文字幕免费| 337p亚洲精品色噜噜噜| 亚洲av成人无码久久精品老人| 中文字幕在线视频日韩| 国产白丝在线观看| 国产精品永久在线| 成人资源在线| 亚洲精品成人久久久998| 在线观看的日韩av| 最新天堂在线视频| 99久久精品免费| 亚洲av无一区二区三区| 精品国产乱码久久久久久婷婷 | 国产视频一区在线| 黄色精品免费看| 国产97色在线| 欧美黑白配在线| 日韩人妻一区二区三区蜜桃视频| 久久性天堂网| 中文字幕在线视频播放| 成人欧美一区二区三区黑人麻豆| 亚洲欧美精品一区二区三区| 日韩欧美一级二级三级| 91.xxx.高清在线| 欧美在线视频一区二区| 一区三区自拍| 一区二区三区视频在线播放| 久久久蜜桃一区二区人| 国产十八熟妇av成人一区| 日韩一区欧美小说| 精品视频一二三区| 日韩成人黄色av| 18aaaa精品欧美大片h| 亚洲一区二区三区在线视频| 日韩免费看片| 手机看片福利盒子久久| 91色在线porny| 99热在线观看免费精品| 欧美sm极限捆绑bd| 四季久久免费一区二区三区四区| 国产欧美日韩丝袜精品一区| 精品一区免费| 日韩免费毛片视频| 91麻豆成人久久精品二区三区| 国产主播在线播放| 亚洲精品一区二区三区精华液 | 国产福利在线视频| 国产成人综合久久| 国产一区二区观看| 免费av网址在线| 久久在线免费观看| 五月天激情国产综合婷婷婷| 日韩电影网在线| 亚洲美女久久精品| 明星裸体视频一区二区| 一区二区久久| 精品少妇一区二区三区免费观| 欧美日韩亚洲91| 日本韩国精品一区二区| 青青精品视频播放| 国产精品一区二区99| 日韩视频在线免费看| 国产亚洲1区2区3区| 中文字幕第99页| 色爱精品视频一区| 国产成人视屏| 亚洲 欧美 综合 另类 中字| 成人午夜免费视频| 一区二区三区视频免费看| 日韩经典第一页| 精品网站在线| 中文字幕久久一区| 国产成人免费视频网站| 国产成年人免费视频| 国产视频久久网| 国产精品videossex撒尿| 一区二区在线观| 国产成人精品1024| 可以在线观看av的网站| 亚洲午夜小视频| 免费观看亚洲天堂| 日韩在线综合网| 欧美国产精品一区二区三区| 国产又黄又粗又长| 久久久亚洲欧洲日产国码aⅴ| 亚洲宅男一区| 极品粉嫩美女露脸啪啪| 亚洲一区二区三区小说| 神马电影在线观看| 国产伦精品免费视频| 欧美日本在线| 美女脱光内衣内裤| 欧美精品一二三四| 超碰在线视屏| 一区二区三区精品国产| 成人av电影免费在线播放| 欧美一区二区三区网站| 精品国产自在精品国产浪潮| 风间由美性色一区二区三区四区| 国产淫片av片久久久久久| 中文字幕一区在线观看视频| 欧日韩在线视频| 国产日韩精品入口| 日韩一区二区免费看| 亚洲av熟女国产一区二区性色| 日韩午夜精品视频| 国产一区一一区高清不卡| 成人av在线不卡| 国产精品久久久久久久久久免费看| 深爱激情五月婷婷|