前幾天答應了人要發這篇文章

 images (9) 

 

討厭鬼很乖的開始寫了~

不過平常上班的時候比較忙

所以晚了幾天

(其實有人來看~討厭鬼很images  )

 

主要的問題來自於Spring+Hibernate用法教學最下面的這段話

 

一個資料表會對應到一個entity

一個DAO只能對一個資料表做事

例如我的資料庫有leather_type這個資料表

所以我會有一個LeatherType的entity

也會有一個LeatherTypeDAO的這class


在這邊還是要跟各位客倌說明一下

上面所講的都是觀念~沒有照做程式還是可以運行的

images (7) 

 

那為什麼要要求這麼多呢?

就是因為要方便管理!!

不然的話~在debug的時候會很

images(12) 

 

當然這些都只是觀念~要不要去執行是看自己

 

那何謂一個資料表會對應到一個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

arrow
arrow
    文章標籤
    spring hibernate
    全站熱搜
    創作者介紹
    創作者 討厭鬼 的頭像
    討厭鬼

    討厭鬼教學

    討厭鬼 發表在 痞客邦 留言(0) 人氣()