在做東西之前,感覺(jué)現(xiàn)在很多公司很多項(xiàng)目中都要對(duì)hibernate中的hbm.xml,vo,dao進(jìn)行手工編寫(xiě),也有很多項(xiàng)目中為了方便省去了dao,用hql直接編寫(xiě), 在此,感覺(jué)如果用hql操作的話,不利用調(diào)試(沒(méi)有
sql的一些工具可對(duì)數(shù)據(jù)庫(kù)直接操作,如pl/sql等 )
對(duì)于此三種文件,只是代碼的一些參數(shù)的變化,邏輯操作基本相同,因此本人就想寫(xiě)一程序直接生成這三
種文件,當(dāng)我們程序員操作hibernate時(shí),甚至不要求懂hibernate,只要求懂得一些接口,對(duì)vo如何操作
,這樣的話,可以把hibernate的使用錯(cuò)誤率降低,可以減少程序員學(xué)習(xí)hibernate的時(shí)間,減少程序員寫(xiě)
xml,vo,dao的時(shí)間,也有利于項(xiàng)目的穩(wěn)定,讓程序員有更多時(shí)間了解業(yè)務(wù).
當(dāng)然這樣的工具在很多公司都自主開(kāi)發(fā)了,作為公司產(chǎn)品的一部分,也就不可能任何人都得到了。
可能有人會(huì)說(shuō)網(wǎng)上不是很多自動(dòng)生成vo,xml等的東西吧,像MiddleGen,xdoclet等,但是它們雖然靈活,
但不能生成一整套文件,像MiddleGen,我不知道如果有上千個(gè)表的話,它會(huì)不會(huì)死,反正我運(yùn)行一次六七
百個(gè)表進(jìn)就死了,界面化的東西,而且要手工干預(yù),感覺(jué)不是很好。
因此本人還是決定寫(xiě)一寫(xiě)此程序,不管它的運(yùn)用是否能成功,開(kāi)始,本人用erwin生成的xml文件解
析來(lái)操作分析,當(dāng)然通過(guò)此xml文件完成是可以得到你要生在的三種文件的所有信息的,它不僅包括數(shù)據(jù)
庫(kù)中的物理結(jié)構(gòu),而且定義的邏輯結(jié)構(gòu)也在此xml文件中,這樣的話,就可以實(shí)現(xiàn)一些表名的中注釋,而
且定義表的字段的大小寫(xiě)也清晰分明,而且對(duì)文件操作可以與數(shù)據(jù)庫(kù)相脫離,感覺(jué)是一個(gè)很好的選擇。
但當(dāng)運(yùn)用后發(fā)現(xiàn),xml定義要很規(guī)范,(如果是對(duì)于專一用戶來(lái)說(shuō)是很容易實(shí)現(xiàn)),而且當(dāng)今用數(shù)據(jù)建模
的工具太多,而且就算用erwin建模也可能定義的很不一樣。因此決定用直接從數(shù)據(jù)庫(kù)出發(fā)。
相對(duì)erwin的xml文件,數(shù)據(jù)庫(kù)的不足是沒(méi)有邏輯結(jié)構(gòu),因此不可能有一些表的中方對(duì)應(yīng)注釋,而且表
名和字段名都變大寫(xiě),大小寫(xiě)很難與原意相同,如定義的字段為FisrtName,在數(shù)據(jù)庫(kù)中都變?yōu)榇髮?xiě),就很
難還原成此字符串,但好在此多數(shù)下不會(huì)影響操作。
因此,本人定義的vo中,表名 為 ab_cd_ef 對(duì)應(yīng)的vo就是AbCdEfVO,也就是首字大寫(xiě)有下劃線的后
一字母大寫(xiě),最后加上大定的'VO'二字符。
在hbm.xml文件中,本人只定義one-to-many,而其它many-to-one或one-to-one是在vo中找出此表對(duì)應(yīng)外
鍵的vo,個(gè)人感覺(jué):雖然hibernate中有多種對(duì)應(yīng)關(guān)系,但是作為從本條結(jié)果出生,就為兩種,to-many和
to-one,
在vo中,本個(gè)引入了一個(gè)hashMap,nulllist主要是為了一些查詢、更新、或刪除時(shí),用于字段設(shè)置為空時(shí)
進(jìn)行操作。
主要接口
其中有一個(gè)接作接口,





























































































































































========================================================================================
DataStore ds = DataManager.getInstance();//得到一個(gè)操作的實(shí)像,現(xiàn)在你就可以用此類進(jìn)行以
上操作
如:Transaction tx = ds.currentTransaction() ;//得到此事務(wù)
現(xiàn)在我們假設(shè)有一個(gè)person類(id,name,address),id為主鍵
1,要查出id為'2323'的person ds.selectByPK( new PersonVO('2323') );
2, 要查出所有姓'李'的person集合
PersonVo per = new PersonVo();
per.setName('劉%');
List list = ds.selectByVO(per) ;
3, 要查出所有姓'李'的,地址為空的person集合
PersonVo per = new PersonVo();
per.setName('劉%');
per.setAddress(null);
List list = ds.selectByVO(per) ;
以上可以任意組合,deleteByVO同樣適用以上方法。
其它請(qǐng)參看以上接口類。
====================================================================================
若你需要以程序:請(qǐng)發(fā)郵件給我,但請(qǐng)注意:若你索取程序的同時(shí),代表你同意以下信息,
1,請(qǐng)不要以任何形式轉(zhuǎn)發(fā)此程序給他人。
2,如果你認(rèn)為此程序很有缺陷,請(qǐng)指出,以便進(jìn)行解決。
3,如果在實(shí)踐中你以此程序受益,請(qǐng)必須進(jìn)行付費(fèi)。
=====================================================================================
最后:希望得到你的支持與理解,更希望得到你的意見(jiàn)和建議。
請(qǐng)勿在此回復(fù)索取,本人郵件(piliskys@163.com)