前幾天答應了人要發這篇文章
討厭鬼很乖的開始寫了~
不過平常上班的時候比較忙
所以晚了幾天
主要的問題來自於Spring+Hibernate用法教學最下面的這段話
一個資料表會對應到一個entity
一個DAO只能對一個資料表做事
例如我的資料庫有leather_type這個資料表
所以我會有一個LeatherType的entity
也會有一個LeatherTypeDAO的這class
在這邊還是要跟各位客倌說明一下
上面所講的都是觀念~沒有照做程式還是可以運行的
那為什麼要要求這麼多呢?
就是因為要方便管理!!
不然的話~在debug的時候會很
當然這些都只是觀念~要不要去執行是看自己
那何謂一個資料表會對應到一個entity呢?
在Struts2+Spring+Hibernate架構配置教學(Hibernate)上這篇講到將資料庫裡的資料表
轉成java中的entity
那這個entity會有一些資訊說這個entity是對應到資料庫的哪個資料表
而entity中的欄位是對應到資料表中的哪一個欄位
在執行hibernate時才會知道是要去哪一個資料表
當然你也可以用多個內容一樣只是名稱不一樣的entity
只是這樣沒有意義而且會很亂~~
而一個DAO只能對一個資料表做事這個的話~
假如我有member資料表bonus資料表要做會員的每天登入的紅利計算
所以在執行的時候會有兩個dao分別是memberDAO與bonusDAO
memberDAO只對member資料表做增刪改查
bonusDAO只對bonus資料表做增刪改查
當然你也可以只用memberDAO對所以的資料表做增刪改查
用範例來說
public class MemberDAO {
@Resource
private SessionFactory sessionFactory;
public List<Member> doQueryMemberList() {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
Member.class);
return criteria.list();
}
public List<Bonus> doQueryBonusList() {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
Bonus.class);
return criteria.list();
}
}
我在上面的範例裡面對兩個資料表做事在程式上是完全沒有問題的
只是如果在一個dao裡面對很多資料表做事
會造成幾個問題
1、不好維護
2、可能同樣的method會重覆寫
只要資料表一變多整個程式會變的非常的複雜
而一個dao只對一個資料表做事的話就不會有上述問題
備註
討厭鬼在Spring+transaction manager 配置教學、Struts2+Spring架構配置教學(Spring)這兩篇中分別提到了
我們在java code時會做資料檢核、商業邏輯、存取資料
在struts2+spring+hibernate的架構中就是對應了
action(controller)、service(manager)、dao
有關action的放在action-context.xml
有關service的放在service-context.xml
有關dao與資料庫的放在dao-context.xml
留言列表