在某些情況下,我們可能需要同一個實(shí)體bean對應(yīng)著多個數(shù)據(jù)庫表,比如,你的數(shù)據(jù)庫表是按照每個月添加一個,但是對應(yīng)的實(shí)體bean并沒有改變。這個時候,我們就需要支持表明變換了,否則,難道你每個月改變一下orm映射配置嗎?如果每天都換一個表呢?
在EasyDBO上,要做到支持表名變換是很容易的。只需在使用各種數(shù)據(jù)庫操作時添加一個表名稱的的變量(按照一定的算法產(chǎn)生),如原來的easyDB.add(object)變?yōu)閑asyDB.add(object, tablename)。
在具體的實(shí)現(xiàn)上,我們應(yīng)該從哪里入手去替換表名呢?看看EasyDBO的源碼,保存有數(shù)據(jù)庫表名稱的是在DBTable這個類中,其中name就是指數(shù)據(jù)庫表名,利用setter方法,很容易植入數(shù)據(jù)庫表名。但是在哪個時機(jī)植入比較合適?當(dāng)然選取盡可能可以減少重復(fù)代碼就可以完成的時機(jī)。
看看吧,在信息轉(zhuǎn)換為DBTable對象時,再重新植入表名,就可以了。在EasyDB類中,方法private DBTable findTable(Class cls)會從類或?qū)ο笾蝎@取信息包裝成DBTable對象,所以這是關(guān)鍵的地方。private DBObject obj2dbo(Object obj)和其他的方法都直接或者間接調(diào)findTable(Class cls)來獲取表信息。做一些小改動就可以了,最好是添加一個重載的方法,而不是修改原來的方法。修改添加兩個樣板,其他方法也差不多是這樣:
給出修改后的EasyDB類的源碼,在這里下載。