• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Java Bean自動生成系統(tǒng)的設計與實現(xiàn)

      2015-11-28 10:13:04楊靜
      湖北汽車工業(yè)學院學報 2015年2期
      關鍵詞:代碼生成代碼實體

      楊靜

      (鄖陽師范高等??茖W校計算機科學系,湖北十堰442000)

      在實際開發(fā)過程中,為了加快軟件的開發(fā)速度,要使用一定數(shù)量的框架,一是實現(xiàn)代碼的重復使用,二來使具體的項目開發(fā)更加方便[1]。用代碼生成工具生成代碼不僅能夠提高開發(fā)效率,而且能夠保證代碼風格一致,提高代碼的可讀性和可維護性[2],降低軟件開發(fā)及維護成本?,F(xiàn)有的主流代碼生成技術(shù)采用了基于模板的方法[3],代碼生成就是一個專注于解放編碼生產(chǎn)力,用程序來編程序[4]。通過代碼自動生成系統(tǒng),將一些重復使用或功能基本相似的模塊交由系統(tǒng)自動生成,提高軟件質(zhì)量和開發(fā)效率,解決了軟件開發(fā)中代碼重用的問題[5]。

      首先,從軟件行業(yè)的角度來分析,軟件公司要在最短的時間內(nèi),利用最少的人力物力,開發(fā)出滿足客戶需求的產(chǎn)品,同時最大程度地增加公司的利潤;其次,從程序員編碼的角度分析[6],軟件開發(fā)人員的工作量非常大,軟件中的大段程序代碼基本都是程序員一行一行敲進去的,當然也有一些是復制粘貼的,但還需要進行一些修改、調(diào)試,而且容易出錯,其效率低下;再者,從測試員的角度來看,工作強度也不小,他們不僅要對程序進行測試,還要對業(yè)務邏輯進行測試,同樣的問題在這里要測試,換個功能幾乎一樣的模塊也要測試,嚴重降低了測試效率;最后,從軟件維護的角度看,由于有些重復性代碼是復制粘貼過來的,導致在維護過程中,一個點出了錯誤,與該業(yè)務邏輯相關的所有地方都要修改,不易維護。針對上述情況,本系統(tǒng)設計了基于Java的代碼生成工具,將一些重復的Java Bean代碼通過該工具自動生成,需要時進行調(diào)用即可。

      1 系統(tǒng)設計

      Java Bean 主要有實體Bean和業(yè)務Bean,實體Bean中的成員變量主要是數(shù)據(jù)庫中表的字段,方法是一些get、set等,業(yè)務Bean 主要針對表的增、刪、改、查。要想自動生成實體Bean,需要成功讀取數(shù)據(jù)庫中表的每個字段,并需要知道每個字段的類型,在Java中,可通過java.sql.Database MetaData中的DatabaseMetaData 獲得數(shù)據(jù)庫中元數(shù)據(jù),通過java.sql.ResultSetMetaData中的ResultSetMetaData獲得表中的數(shù)據(jù)元素,分別得到表字段名稱、字段類型等,然后根據(jù)名稱和類型,通過字符串的拼接即可生成一個實體Bean;業(yè)務Bean 則可以通過得到的表名及表中的每個字段拼接相應的sql 語句,最后由所有拼接的字符串生成。

      在代碼生成系統(tǒng)中,主要設計了工具包(utils包)、vo包、dao包和impl包,其中utils包中設計AutoTools、DBUtils、TypeTools 3個類,AutoTools類主要包含了生成實體Bean和業(yè)務Bean的2個方法,DBUtils類負責實現(xiàn)數(shù)據(jù)庫的連接和關閉,Type-Tools類則包含了一個將數(shù)據(jù)庫字段的類型轉(zhuǎn)換成java類型的方法;vo包中包含了一個Columns類,該類是一個Java Bean,封裝了數(shù)據(jù)庫中表的列,實現(xiàn)將數(shù)據(jù)庫表中的列名、類型轉(zhuǎn)化成Java的成員變量和類型;dao包中定義了AutoDao、AutoValueObject、ColumnDao、TableDao 4個類,其中AutoDao 接口中定義了4個抽象方法String insert(String packages,

      String tableName)、String list(String packages,String tableName)、String edit(String packages,String table-Name)、String delete(String packages,String table-Name),分別用來實現(xiàn)增、刪、改、查的業(yè)務邏輯;AutoValuebject 接口中定義了bstract String constructor()和abstract String setProperty()抽象方法,分別用來實現(xiàn)構(gòu)造函數(shù)的生成和get、set方法的生成,即生成實體Bean;ColumnDao 接口中定義了一個List<Columns>list(String tableName)抽象方法,用來獲得表的數(shù)據(jù)類型及表字段的名稱,并將數(shù)據(jù)庫中表字段的屬性轉(zhuǎn)換成java中類的屬性;TableDao接口中定義了一個List<String>list()throws Exception 抽象方法,用來獲得數(shù)據(jù)庫中所有表對象。Impl 包主要定義了4個類,分別實現(xiàn)dao中的4個接口。系統(tǒng)結(jié)構(gòu)圖如圖1所示。

      圖1 系統(tǒng)結(jié)構(gòu)圖

      2 自動生成系統(tǒng)的設計與實現(xiàn)

      2.1 自動生成系統(tǒng)的設計目標

      通過該代碼自動生成系統(tǒng),對配置文件進行簡單地修改,可以實現(xiàn)數(shù)據(jù)庫連接,并將數(shù)據(jù)庫中每張表快速轉(zhuǎn)換為相應的實體Bean和業(yè)務Bean,環(huán)境搭建簡潔,配置環(huán)境變量簡單,為了便于系統(tǒng)進行后期擴展,同時為基于反射的編程提供條件,在業(yè)務邏輯層的數(shù)據(jù)處理類上采用了基于接口的編程[7],當有新的業(yè)務或更負責的業(yè)務要求時,只需要在接口中添加相應的業(yè)務方法,并在實現(xiàn)類中實現(xiàn)該方法,使該系統(tǒng)具有良好的擴展性和可維護性。

      2.2 自動生成系統(tǒng)的實現(xiàn)

      1)數(shù)據(jù)庫的連接與關閉在實現(xiàn)該模塊的時候,其關鍵是如何讀取配置文件。為了讓該系統(tǒng)能夠根據(jù)用戶的配置自動地連接該配置的數(shù)據(jù)庫,在實現(xiàn)該模塊的時候采用Properties文件來存儲訪問數(shù)據(jù)庫的用戶名、密碼、加載驅(qū)動的字符串及訪問數(shù)據(jù)庫的URL。在utils 包中建一個DBUtils類,在該類中有2個方法,即getConnection()和close(Connection conn)。其關鍵代碼是獲得Properties 文件的中內(nèi)容。

      2)實體Bean和業(yè)務Bean的實現(xiàn)為了系統(tǒng)具有良好的擴展性,在實現(xiàn)實體Bean和業(yè)務Bean時采用接口的方式。在該系統(tǒng)中定義了2個接口即AutoDao和AutoValueObject。其中AutoDao主要是用來定義業(yè)務Bean的接口,里面定義了一些業(yè)務方法,而AutoValueObject 主要用來定義實體Bean的接口,里面定義了2個方法,分別用來完成構(gòu)造方法的生成和get、set方法的生成。其實現(xiàn)部分代碼如下:

      實體Bean在實現(xiàn)時,通過一個類實現(xiàn)AutoValueObject 接口,并重寫里面的方法,在重寫構(gòu)造方法時,根據(jù)具體情況可以分別生成無參的構(gòu)造方法和帶一個或多個參數(shù)的構(gòu)造方法;業(yè)務Bean在實現(xiàn)時,通過一個類實現(xiàn)AutoDao 接口中的所有方法,該接口中的方法主要是一些常用的增刪改查的操作。通過接口的實現(xiàn),當有新的業(yè)務需求時,只需在接口中添加相應方法并實現(xiàn),在應用開發(fā)的過程中就可以避免由于業(yè)務的增加而修改大量代碼,使系統(tǒng)的擴展性更好。

      3)工具類的封裝有了生成實體Bean和業(yè)務Bean的類后,將這2個類進一步封裝成一個工具類,即AutoTools類。在該類中主要有2個方法,即

      autoDaoImp(List<String>list,String packageName)和valueObject(List<String> list,String package-Name),該方法分別用來生成業(yè)務Bean和實體Bean。在需要將數(shù)據(jù)庫中的所有表都生成相應的實體Bean和業(yè)務Bean時,只需在配置文件中配置好后,分別調(diào)用AutoTools類中的autoDaoImp(List<String> list,String packageName)和valueObject(List<String>list,String packageName)方法就能夠很快地生成相應的Java Bean。

      使用該系統(tǒng)時,只需要將配置文件中的數(shù)據(jù)庫連接對象改為需要生成Java Bean的數(shù)據(jù)庫名稱,重新運行該系統(tǒng),就可以自動生成相應的代碼。

      3 結(jié)束語

      采用分層的設計思想,各個模塊可以單獨開發(fā),這樣不僅可以提高程序的開發(fā)效率,同時也有利于程序的移植。因為在采用MVC模式的開發(fā)框架中,業(yè)務邏輯無論在哪個環(huán)境都是不變的,并且其中大多數(shù)功能都很相似,此時采用代碼自動生成系統(tǒng),將這些功能相似的模塊交由系統(tǒng)自動生成代碼,能有效提高程序的開發(fā)效率,降低開發(fā)成本,提升軟件質(zhì)量。

      [1]宋翔宇,曾雅琳.一種新的代碼生成器的設計與實現(xiàn)[J].計算機科學,2011,38(7A)∶67-69.

      [2]張靜,孔芳,楊季文.一個基于Java的代碼生成工具的設計與實現(xiàn)[J].微電子學與計算機,2007(6):222-224.

      [3]冉春娟,黃華.基于關系數(shù)據(jù)模型代碼生成器的設計與實現(xiàn)[J].湖北大學學報:自然科學版,2010(2):151-156+169.

      [4]萬軍民.基于Java的代碼生成器的設計與實現(xiàn)[J].計算機工程,2004(S1):122-124.

      [5]陳清,吳海濤,王璐.基于代碼自動生成技術(shù)的管理信息系統(tǒng)的實現(xiàn)[J].計算機與數(shù)字工程,2013(2):268-270+317.

      [6]盛剛,韓莉莉.J2EE代碼自動生成研究[J].計算機系統(tǒng)應用,2006(8):31-33.

      [7]周兵,許俊,吳亞平.中小MIS快速原型構(gòu)建與自動代碼生成[J].計算機技術(shù)與發(fā)展,2012(5):28-31+36.

      猜你喜歡
      代碼生成代碼實體
      Lustre語言可信代碼生成器研究進展
      前海自貿(mào)區(qū):金融服務實體
      中國外匯(2019年18期)2019-11-25 01:41:54
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      實體的可感部分與實體——兼論亞里士多德分析實體的兩種模式
      哲學評論(2017年1期)2017-07-31 18:04:00
      兩會進行時:緊扣實體經(jīng)濟“釘釘子”
      振興實體經(jīng)濟地方如何“釘釘子”
      代碼生成技術(shù)在軟件開發(fā)中的應用
      電子世界(2016年15期)2016-08-29 02:14:28
      房产| 手游| 常德市| 莒南县| 长寿区| 股票| 天津市| 普兰县| 怀来县| 娄烦县| 金乡县| 苏尼特右旗| 武夷山市| 永清县| 化德县| 礼泉县| 监利县| 古交市| 杭锦后旗| 子长县| 明星| 惠来县| 衡东县| 吉首市| 旬阳县| 云南省| 扶余县| 津市市| 湛江市| 凤庆县| 阳泉市| 依安县| 株洲县| 广宗县| 西乌| 唐海县| 朔州市| 澄城县| 文山县| 南阳市| 卢氏县|