快速JavaEE輕量級框架&公用業務模塊 設計&實現 4 - DAO設計

這部分的代碼在 git

http://git.oschina.net/terrymanu/miracle-framework/tree/master/miraclesea/framework-dao 數據庫

以前寫DAO,都是定義一個泛型的BaseDao,而後寫入基本的CRUD,其餘的業務DAO都繼承這個類。自從有了Spring Data JPA,這個BaseDao就不須要了,直接使用就好了。 架構

Spring Data JPA基本提供所需的方法,對於業務查詢,也能夠經過接口+Query的方式使用。另外它還貼心的提供了AbstractPersistable和AbstractAuditable,用於生成主鍵和審計信息。可是這個AbstractPersistable主鍵的生成方式貌似只支持自增主鍵,想用UUID好像沒什麼辦法。 spa

這樣的話,這個包裏就不須要代碼了。可是我考慮把DataSource,JPA以及Transaction等和數據庫相關的配置文件放在這個包裏。雖然目前沒有什麼代碼,可是不排除之後根據業務須要增長公用代碼的可能,好比根據Projection部分讀取字段。 .net

忽然發現AbstractPersistable不能設置@version的樂觀鎖。因此仍是定義了AbstractOptimisticLockPersistable以及AbstractOptimisticLockAuditable類。 xml

目前還有一些沒想太明白的事情。 對象

1. Entity主要用於關係型數據庫和Java對象的映射,Entity是否只在DAO層使用,而在Service層和MVC層另定義對象。仍是將Entity貫穿於整個系統架構。 blog

2. 若是貫穿於整個系統架構,Entity是否須要定義一個接口,叫Model之類的,而後各個層只使用這個接口。我看有的系統是這樣作的,如activiti,定義Task接口和TaskEntity實現類。 繼承

3. 是否須要實現Serialize接口。其實仍是這個糾結的老問題,若是Entity只在DAO層使用,就不必實現Serialize,若是在各層之間傳輸,則有必要實現。 接口

既然單獨的一個DAO模塊,免不了將@Entity分散在各個模塊中。這樣JPA的persistence.xml文件和@Entity類必然不在一個jar包,會致使JPA容器找不到@Entity。解決此問題的方法參見下面

這篇文章


persistence.xml和entity類不在同一jar包,致使找不到實體 


 想把結構討論的清晰一些,但願各位能提些意見,多謝。

相關文章
相關標籤/搜索