在EasyJWeb-0.6.0推出來(lái)以后,很多網(wǎng)友對(duì)其中的代碼生成部分非常感興趣,并來(lái)信問(wèn)了一些如何使用easyjwebtools、如何支持多表生成、生成頁(yè)面的定制、業(yè)務(wù)邏輯的定制等很多問(wèn)題。下面以我自己的理解,簡(jiǎn)單介紹一下EasyJWeb Tools中的代碼生成的應(yīng)用方法及展望。
一、快速體驗(yàn)及上手
EasyJWeb考慮到國(guó)內(nèi)存在很多Java初學(xué)者的情況,因此代碼書(shū)寫(xiě)及發(fā)布方式力求簡(jiǎn)單明了,讓新手也能快速上手。在發(fā)布的0.6.0版本中,不但實(shí)現(xiàn)了ant及maven來(lái)管理項(xiàng)目發(fā)布,還初步實(shí)現(xiàn)了代碼生成引擎中的部分功能。你可以在下載了EasyJWeb項(xiàng)目的源代碼后,花上不到兩分鐘即實(shí)現(xiàn)一個(gè)添刪改查及分頁(yè)的Java Web代碼生成、編譯及打包發(fā)布等過(guò)程。整個(gè)過(guò)程只需要下載EasyJWeb源碼->建表->改數(shù)據(jù)源配置文件->執(zhí)行生成命令easyjwebtools->然后運(yùn)行即可。詳細(xì)步驟如下:
1、?下載EasyJWeb最新版本
http://www.easyjf.com/easyjweb/download.htm
2、建立數(shù)據(jù)庫(kù)及數(shù)據(jù)表
使用My SQL或MS SQL數(shù)據(jù)庫(kù),建一個(gè)庫(kù),然后建一個(gè)表,比如message(留言板)。由于EasyJWeb Tools業(yè)務(wù)引擎中使用的是ORM系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù),因此要求每個(gè)表都設(shè)置一個(gè)名為cid的、類型為varchar(16)的主鍵字段,然后就是其它的一些需要使用的字段。如下面我寫(xiě)的示例表:
CREATE TABLE `message` (
? `cid` varchar(16) NOT NULL,
? `title` varchar(100) NOT NULL,
? `inputUser` varchar(16) default NULL
? `inputTime` datetime default NULL,
? PRIMARY KEY? (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
生成的添刪改查及分頁(yè)代碼缺省情況下使用EasyJF團(tuán)隊(duì)開(kāi)發(fā)的超輕量級(jí)ORM框架EasyDBO訪問(wèn)數(shù)據(jù)庫(kù)。當(dāng)然你可以根據(jù)自己的情況選擇其它的ORM系統(tǒng),如hibernate、iBatis等。
3、修改數(shù)據(jù)庫(kù)訪問(wèn)配置文件
EasyJWeb Tools中代碼生成引擎當(dāng)前是根據(jù)數(shù)據(jù)表的字段名來(lái)生成的代碼。因此,要能正確運(yùn)行該程序,必須保證數(shù)據(jù)庫(kù)的連接配置參數(shù)設(shè)置正確。我們只需要修改下載源碼中的src\main\easyjf-dbo.xml文件即可。關(guān)于EasyDBO的配置說(shuō)明,請(qǐng)看本人的《EasyDBO配置文件easyjf-dbo.xml詳細(xì)說(shuō)明》這篇文章,地址:http://www.easyjf.com/html/20060427/31970563-6771387.htm
4、運(yùn)行easyjwebtools命令
通過(guò)開(kāi)始菜單的運(yùn)行欄中輸入cmd。然后使用cd命令切換到EasyJWeb源碼解壓目錄的bin目錄。
然后輸入easyjwebtools <表名>
在提示按任意鍵后,找到鍵盤(pán)上的任意鍵(呵呵)按一下。直到看到Build Successful的欄式。完成后就到EasyJWeb解壓目錄中生成release目錄,里面有一個(gè)打包好的easyjf-jweb-0.6.war文件,把該文件拷到Tomcat 的webapps目錄下。然后啟動(dòng)Tomcat即可。
二、多表生成
在實(shí)際應(yīng)用中,我們只有一張表的情況下少之又少。而且不可能每生成一張表的添刪改查就打一個(gè)War包,這不是很搞笑嗎?
EasyJWeb Tools中的單表生成只是為了提供一個(gè)快速的應(yīng)用體驗(yàn)。因此,easyjwebtools這個(gè)批處理命令是把編譯、生成、再編譯打包發(fā)布等過(guò)程全部集中一起的。大家可以用編輯器打開(kāi)bin目錄中的easyjwebtools.bar這個(gè)文件,注釋(或者刪除)掉其中的call build.bat compile,call build.bat war兩行。這樣在執(zhí)行easyjwebtools這個(gè)批處理的時(shí)候就只完成代碼生成功能而不會(huì)執(zhí)行編譯及打包發(fā)布的過(guò)程了。
多表生成只需要先編譯一下EasyJWeb項(xiàng)目源代碼。然后再重復(fù)執(zhí)行easyjwebtools生成每一個(gè)表的添刪改查,最后再執(zhí)行一個(gè)重新編譯及打包發(fā)布命令。
在命令行操作的整個(gè)過(guò)程如下:
? 編譯:build compile
然后重復(fù):easyjwebtools <表1>
easyjwebtools <表2>
????????????? …
????????????? easyjwebtoosl <表n>
最后執(zhí)行打包發(fā)布:build war
三、代碼生成引擎的展望
在實(shí)際的項(xiàng)目中,我們的應(yīng)用是比較復(fù)雜的,而且在代碼生成的時(shí)候還會(huì)有很多具體的需求,比如:
1、我們會(huì)涉及到成百上千的數(shù)據(jù)表。
2、?而且這些數(shù)據(jù)表還有著各種各樣的聯(lián)系,如主從關(guān)系、外鍵約束、關(guān)聯(lián)等,很多表還要支持延遲加載(lazy load)等功能。
3、?操作不會(huì)只是簡(jiǎn)單的添刪改查,還會(huì)有更多的商業(yè)邏輯。
4、?在生成基于hibernate等ORM系統(tǒng)的時(shí)候,還要生成相關(guān)的配置文件。
5、?還需要更多的選擇及互動(dòng)操作。
另外,代碼生成引擎還要考慮很多問(wèn)題,如頁(yè)面的可維護(hù)性、生成后的代碼當(dāng)需求改變的時(shí)候重新生成、生成代碼的可擴(kuò)展性、可維護(hù)性等等。生成的方式、代碼風(fēng)格、頁(yè)面樣式等都要求提供給用戶自由選擇與定制的支持。
提供一個(gè)可視化的用戶交互界面,而非命令行,使用UML建模,然后根據(jù)UML模型有選擇的生成表結(jié)構(gòu)、生成相關(guān)代碼、測(cè)試代碼、生成各種頁(yè)面文件,并且打包發(fā)布。理想的情況下,代碼生成引擎完成一個(gè)項(xiàng)目的70%以上重復(fù)煩碩的代碼書(shū)寫(xiě)工作。程序員要做的,就是在生成后的代碼或頁(yè)面上做一些個(gè)性化的功能需求或設(shè)置。
提供簡(jiǎn)易、快速的J2EE應(yīng)用程序開(kāi)發(fā)解決方案,這就是EasyJWeb Tools將來(lái)的奮斗目標(biāo)。EasyJWeb是開(kāi)源的項(xiàng)目,任何會(huì)說(shuō)漢語(yǔ)的人都可以參與進(jìn)來(lái),在此誠(chéng)邀有興趣的朋友一起來(lái)為EasyJWeb Tools的目標(biāo)而奮斗。
附:
關(guān)于 最新《世界杯與國(guó)產(chǎn)開(kāi)源系列》文章的發(fā)布,請(qǐng)看本人Blog在非技術(shù)區(qū)中的友情公告,歡迎感興趣的朋友前去指教,地址:http://www.aygfsteel.com/daxia/archive/2006/06/28/55435.html?