早有就這個想法,將自己在項目中用到的ibaits經驗寫出來,恰巧看到了這個標題,所以重新開了一個帖子,歡迎大家討論一下。
ibatis是一個輕量級的框架,他的優(yōu)點在于Sql的自由化,這點我個人認為比hibernate好了很多,它比較靈活。但是問題來了,由于比較靈活,那么我們會面臨一個問題,我們如何來操控它才是最優(yōu)的。也許這個問題本身就是一個沒有答案的問題,仁者見仁,智者見智,下面我只把自己的想法寫下來,希望能幫助到希望得到幫助的人。
對于web的三層結構,我們數據的傳遞流是這個樣子的,Controller->service->dao->sqlmap->DB。那么我們該如何設計這個Bean呢,我認為這樣是最佳的組合。Control(Form)->service(Dto)->dao.這樣的好處在于,我們解耦了頁面和數據庫的對應關系。
對于ibatis來說,單純的增刪改查,好像一般都是form和dto這兩個bean沒有什么區(qū)別,所以有些人可能會認為在control層和service層多出的form沒有什么用處,但是業(yè)務復雜以后,你就會知道頁面和數據庫的解耦,是多么的重要。ok,今天的話題并不是討論三層的bean設計,而是針對dto的設計。
“iBATIS那一大堆的不倫不類的JavaBean“的作者可能還是一個在校的學生吧,這種看法,對于一個學生來講,已經是很不錯的。但是項目經驗告訴我們,Dto的設計,并沒有那么單純,并不是一個簡單的javaBean的問題,它涉及到了與數據庫方面相關的內容。例如,一個新增操作,它設計到三個表的插入,這個dto你怎么設計呢,并且這個插入的動作并不是全表的插入操作,我們該怎么辦。是針對所有需要插入的項,設計dto還是涉及到類似hibernate那樣的orm映射,還是利用繼承來設計呢?
事實上,java的開發(fā)原則告訴我們,要將你實現的功能盡量拆分成元來進行,所謂的元,就是盡量的原子話,ok,遵循這個原則,我們需要將dto設計成orm的映射,即一個表對應一個dto。那么插入三個表,那就涉及到了三個表的dto數據來源問題,難道是我們需要將form中的每個字段都分別set到dto中嗎,有重復的話,我們不是白做了很多的工作?好的,我們用sqlmap中的語句來解決它就可以了。
所以,ibatis中的bean設計,絕對不是不倫不類的javabean,而是要符合你本身框架和數據庫設計的綜合bean的設計。
以上只是個人看法,希望大家指正。