<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-67  評論-522  文章-0  trackbacks-0
        在前兩章我為大家詳細分析了JAR包的選擇和必須的配置文件,那么這一章,我就對例子的層次結(jié)構(gòu)進行說明,并實現(xiàn)除WEB層的功能代碼。
        第三部分:建立框架代碼

        工程結(jié)構(gòu)

        
        大家可以看到,本例一共分為:daoentityserviceweb四層。另外在這些層次下,還以業(yè)務功能再進行分包,這樣做是為了方便在以后的功能擴展中,能更好的管理和維護代碼。如果將所有類都直接集中在這4個包下面,隨著類的增加,會越來越難以維護,而且查找起來也很費勁。
        HibernateDao
        在本例中,我是通過繼承Spring提供的HibernateDaoSupport來實現(xiàn)持久層的基類。同時引入泛型參數(shù),封裝了一些基本操作方法。

        
        這是HibernateDao的部分代碼,引入的這個泛型參數(shù),其實就是實體類(UserRole)。通過傳遞這個實體類,在構(gòu)造方法中利用反射特性將它從JVM中取出來。
        
        這里的getClass()方法是獲得繼承HibernateDao的類(UserDaoRoleDao
        getGenericSuperclass()方法就是通過這些繼承了HibernateDao的類,來得到父類(父類就是HibernateDao)的泛型。注意這個方法的返回值為Type,這是一個類型接口。請參考API
        因為在繼承HibernateDao 的時候,會給它加一個泛型參數(shù)。比如,UserRole實體類。因此超類是參數(shù)化類型,所以返回的 Type 對象包含所使用的實際類型參數(shù)。這里返回的Type對象是ParameterizedType接口的實現(xiàn)類ParameterizedTypeImpl所以要將返回類型轉(zhuǎn)型為ParameterizedType
        getActualTypeArguments()方法是ParameterizedType接口中的,它的作用就是獲得實際類型參數(shù) Type 對象的數(shù)組,因為我們這里只定義了一個泛型參數(shù),數(shù)組里面也只有一個值,所以需要在數(shù)組下標處填0。然后最后一步轉(zhuǎn)型千萬別忘記了,因為這個方法返回的可是一個Type數(shù)組喔。
        如果對于這部分的說明還有點不理解的話,請到時候有了代碼,設(shè)個斷點跟蹤一下,就會全部清楚了。關(guān)于java反射,它已經(jīng)超出本文的范圍。大象只對本例中用到的部分進行講解。
        使用這種寫法,是方便我們進行類型轉(zhuǎn)換與類型檢查。另外還可以簡化某些方法的寫法。比如:createCriteria(Criterion... criterions)這個方法。參數(shù)是Criterion類型的可變參數(shù),它是用來設(shè)置查詢條件。如果要進行對象化查詢,那么最簡單的寫法就可以直接寫成createCriteria()。另外還有重載的方法,可以根據(jù)傳入class類型來創(chuàng)建自定義查詢。
        dao
        持久層的Dao類是根據(jù)實體類定義,一般是一個實體類就會有一個對應的Dao類。當然這要跟業(yè)務需求來設(shè)計,不是絕對的。另外你也可以為了簡便而去掉dao層,將持久化操作與業(yè)務邏輯全部寫在service層。

        
        這些定義的方法是供service層調(diào)用,在業(yè)務層,將不會看到一行與持久層有關(guān)的代碼,降低藕合性是這樣做的目的。@Repository注解的作用就是標注這個UserDao是一個持久層組件。還記得前一章講到的掃描器嗎?component-scan 它就是用來將標有@Repository@Service這樣的注解類掃描到Spring的容器里,并且同時對標有@Autowired注解的Bean啟用了自動注入功能。這就是Spring2.5開始提供的新特性。我們使用注解的方法,就可以告別那繁瑣的配置文件定義。
        entity
        關(guān)于實體的定義就是使用JPA注解,關(guān)于這部分,我以前寫過一篇文章專門講這個,如果有不清楚的朋友可以先參考一下。學習JPA——Hibernate Annotation使用實例
        本例中,我有兩點要講下。
        第一、管理主鍵的表generator_table去掉原來單獨定義的那個ID主鍵,把g_key設(shè)為主鍵,整個表將只有兩個字段,g_keyg_value
        第二、在User實體中,我將角色IDrole_id)與角色實體(Role)做了一個多對一關(guān)聯(lián)。這一點是原來文章中沒有講過的。

        
        請一定注意role_iduser表的字段。我在本例中設(shè)定的是一個角色可以對應多個人員,所以這個role_id存的就是roleid的值。fetch = FetchType.LAZY指定采用延遲檢索,如果當你取得了User對象,但又不想取Role中的信息,這時,User對象中的role屬性是代理狀態(tài)。Role對象中的值都是空的。只有當你使用role.idrole.name進行取值的時候,hibernate才會去數(shù)據(jù)庫中查找對應的記錄,因此在一定程度上降低了資源消耗。不過這里有點要注意,采用延遲檢索的時候,需要加上前一篇講到的OpenSessionInViewFilter過濾器。否則會遇到session關(guān)閉的異常。
        service
        
        @Service表示這是業(yè)務層組件。在業(yè)務層需要對UserDao加上@Autowired注解,大象在這里將業(yè)務層的方法名與持久層的方法名定義為一樣的,是我的一種習慣,大家可以按自己的想法來做。
        測試
        既然有了這么多代碼,那就來測試一下吧,看看有沒有問題。
        
        好吧,為了照顧那些堅定的JUnit擁護者,再寫一個JUnit測試。本例使用junit-4.4.jar
        
        
        @BeforeClass注解的方法表示在類實例化之前,也就是在類的構(gòu)造方法執(zhí)行之前就會執(zhí)行。而且使用這個注解的方法必須是static void
        @Test標明這是測試方法,方法名不用像以前那樣必須按照規(guī)則進行命名,可以自由定義。
        上圖顯示大象使用JUnit方式測試也通過了(如果不會通過我寫它干嘛?嘿嘿)。
        假如我將張三改成張四,再來看看測試結(jié)果

        
        這個截圖可以很明顯的說明所有東西。
        這一篇是給大家講怎么用代碼來實現(xiàn)除web層之外的全注解步驟。當然,我主要是講思路,其實思路比代碼重要得多。這一個系列的最后,我會放上所有源碼供大家下載。現(xiàn)在這樣慢慢分析,是想給大家講道理。我們應該努力提升自己的境界與層次,而不要只把眼光放在代碼上面。下一章將會著重介紹web層,以及struts2的注解插件struts2-convention。那么,我們下次繼續(xù)。
        
    本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。http://www.tkk7.com/bolo
    posted on 2010-04-21 22:34 菠蘿大象 閱讀(14357) 評論(47)  編輯  收藏 所屬分類: Struts2

    評論:
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-22 09:22 | cocoa
    源碼啊~謝謝,哈哈~
    cocoaysj@163.com  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-22 09:57 | 菠蘿大象
    @cocoa
    源碼會有的,現(xiàn)在主要是分析,為什么都這么喜歡要源碼呢?難道源碼比思路和方法都重要嗎?我這個例子其實很簡單,根本就沒有多少技術(shù)含量,主要是給大家分析開發(fā)的思路以及各部分的原理。我前面兩章分析的那么多,難道還不清楚我的想法?要是貼代碼,還不簡單,也不用花我這么多精力來寫了。哎。。。。我的本意看來沒多少人能理解。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-22 14:17 | testxx
    樓主水印做的不錯哦  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-22 16:24 | 菠蘿大象
    @testxx
    用加水印的工具生成的,其實我本來是不想弄這么多圖片,但是轉(zhuǎn)帖的人太沒道德了,都不注明出處。我實在是沒辦法才出此下策。請不要見怪。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-22 18:08 | Gavin.lee
    呵呵,進度~~ 質(zhì)量~~ 大象都要抓好啊,繼續(xù)革命~  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-22 20:15 | 菠蘿大象
    @Gavin.lee
    太費精力了,而且還吃力不討好,公司的事情也很多,第四篇估計要等到五一,也有可能五一過后,這個說不準,我還是決定以質(zhì)量為主。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-26 13:57 | songfantasy
    大象加油啊?快點出啊 ?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-04-26 17:50 | 菠蘿大象
    @songfantasy
    不要急,我正在寫,質(zhì)量很重要,請耐心等一下。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2010-04-30 20:05 | 三國阿海
    @菠蘿大象
    對質(zhì)量最重要,慢點沒事.等清醒的時候?qū)?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2010-04-30 20:17 | 三國阿海
    菠蘿大象,你在方法的上面也添加一點注釋.

    每次我都要講頁面上下移動看.  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2010-04-30 20:21 | 三國阿海
    @Service表示這是業(yè)務層組件

    每層的注解都不一樣嗎?都是什么東西啊.  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-05-01 09:10 | 菠蘿大象
    @三國阿海
    這些方法上面沒加注釋一是它們都很好理解,另一個這不是最終的代碼,提供下載的源碼里面,我會加上詳細的注釋。目前這樣寫是為了行文的需要,這是截取的圖片,如果注釋太多,圖片將會非常大,打開時也比較費時。至于你說不清楚@Service之類的注解,你可以看一下spring相關(guān)的資料。以前是用@Component來代替@Repository、@Service的,后來為了更明確的區(qū)分才像現(xiàn)在這樣寫。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-05-05 09:07 | 瓜瓜
    不錯,樓主繼續(xù)加油。。。我會經(jīng)常來的。。。

    你那個簽名比較那個啥。。。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-05-05 09:13 | 瓜瓜
    呼叫樓主。。。。。struts.xml的配置怎么沒有講??

    re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(二)的時候說是后邊講。。


    希望你講解。。嘿嘿  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-05-05 10:25 | 菠蘿大象
    @瓜瓜
    準備在第四篇的時候講,其實也什么可講的,都注解了,這個配置文件里面的東東少的可憐,我把它和web層以及convention插件放到一起來說。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2010-05-07 21:00 | fw
    如果簡單的用jdbcdaosupport, 原本在xml定義一個dao是
    <bean id="userDao" class="XXX">
    <property name="dateSource" ref="dataSource"/>
    </bean>
    用注解@Repository標記dao以后,代碼里面要如何將dataSource注入這個dao呢?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2010-05-07 21:02 | fw
    接樓上,除了在xml里面用default-autowire=“byName”,謝謝  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-05-07 23:20 | 菠蘿大象
    @fw
    dataSource只是一個數(shù)據(jù)源而已,對于dao來說是執(zhí)行持久化操作,只要它能夠獲得連接就行,就像你寫的,可以把<property name="dateSource" ref="dataSource"/>換成<property name="jdbcTemplate" ref="jdbcTemplate"/>。所以,我想問的就是,你是否采用orm的方式來做?如果你堅持使用jdbc來實現(xiàn)你的程序,那這篇系列不適合你。這個框架是建立在orm的基礎(chǔ)之上,面向的都是對象。如果使用jdbc來做,情況會非常糟糕,完全破壞了設(shè)計美學。@Repository注解是由spring容器管理的,你不必去關(guān)心這些,它會自動加入到容器中,供你使用。而你只需要關(guān)注,JdbcDaoSupport,能否提供數(shù)據(jù)源連接,答案是肯定的,我剛才試了一下,不改變配置文件,重新寫了一個JdbcDao,繼承JdbcDaoSupport,里面就一個方法,用來進行測試
    public T get(Serializable id){
    return (T) this.getJdbcTemplate().query("select * from role where id=?",
    new Object[]{id},
    new RowMapper(){
    public Object mapRow(ResultSet rs, int arg1) throws SQLException {
    Role role = new Role();
    role.setId(rs.getInt("id"));
    role.setName(rs.getString("name"));
    return role;
    }
    }
    ).get(0);
    }
    將原來RoleDao的繼承類改為JdbcDao<Role>,其它不變,測試通過。但以這種方式實現(xiàn),我只能說非常的不好,我是堅決不會采用這種方式來做的,也不建議大家使用,如果只是學習,那到可以,因為jdbc是基礎(chǔ),這個不能丟,但是真正的實際開發(fā),是不要采取這種方式,你認為“簡單的用jdbcdaosupport”,在我看來,卻很復雜,同樣的根據(jù)ID取對象,使用orm方式,只需要很少的代碼就能實現(xiàn),利用泛型可以達到復用的目的,而用jdbc這種方式,不光代碼很多,還無法復用,代碼全是死的,后期維護更麻煩。你慢慢體會吧。話說的不中聽,請你原諒,突然有感而發(fā)。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2010-05-08 23:32 | fw
    @菠蘿大象
    目前確實我還只是初學用struts2+spring, 對hibernate還沒有系統(tǒng)學習過,所以目前還只能用spring jdbc來做數(shù)據(jù)訪問,會通過學習過渡到hibernate的。非常感謝你詳細的解釋。另外注解驅(qū)動dao注冊到context這種方式貌似確實沒有別的辦法設(shè)置jdbcTemplate需要的dataSource屬性了,只有在xml配置里面添加default-autoware="true"解決了  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2010-05-08 23:34 | fw
    筆誤 default-autoware="byName" -_-!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-05-09 10:09 | 菠蘿大象
    @fw
    我回復里面不是說過了嗎?不用改任何配置文件,我只是重新寫一個JdbcDao類,繼承了JdbcDaoSupport,這個類里,就一個get方法,使用JdbcDaoSupport 提供的getJdbcTemplate()。既然你繼承了JdbcDaoSupport,這個類里面它提供jdbcTemplate,而且會將dataSource設(shè)置進來,你看下JdbcDaoSupport源代碼  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-06-21 14:57 |
    非常厲害呀 支持 經(jīng)常關(guān)注  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2010-06-21 20:08 | 菠蘿大象
    @鷹
    你太夸獎了,謝謝支持。  回復  更多評論
      
    # mybatis結(jié)合 2011-01-12 12:40 | 簡單
    樓主寫的很給力,有點像springside的思路。真是英雄所見略同。我想問你和mybatis除了他提供的spring結(jié)合方式你有什么好的方式么  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-01-12 23:50 | 菠蘿大象
    @簡單
    我參考過springside,springside做的確實很好,不過我對其作了更進一步的封裝與處理,原版的基類有點過于簡單了。不過這個例子我沒有寫的很復雜,只是一個入門學習資料。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-01-13 14:34 | 簡單
    能否加qq交流下。271890026  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-02-17 13:36 | sdfsdf
    大象,你的qq多少,我加你,最近在學習spring mvc annotation遇到問題了  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2011-04-19 02:30 | wanglong0109
    感覺大象一開始不放出源碼的做法是對的,而且很有效。當我看第一篇的時候我就想找源碼直接放到MyEclipse里面運行,結(jié)果沒找到,所以只有自己一邊看一邊寫了,雖然有點麻煩,但是這確實能讓我靜下心來認真看,學到了不少東西。謝謝大象!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-05-18 17:00 | 李亮
    運行起來 報錯啊 沒用過這種注解方式不怎么懂 請問如果運行你源碼的話 配置文件里需要改動嗎
    報錯“No bean named 'userManager' is defined”  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-05-18 17:08 | 菠蘿大象
    @李亮
    數(shù)據(jù)庫連接的用戶名與密碼是要根據(jù)你自己的來設(shè)置,其它的配置不需要改動,我的這個例子是自己做出來的,并經(jīng)過測試的,你是直接運行我的例子嗎?如果你是重新構(gòu)建的工程請檢查代碼與配置,另外,確保jar包的完整與版本的一致,因為有很多人遇到過你這樣的問題,有的是自己構(gòu)建工程,用我的示例代碼,有的是jar包不對造成程序運行不起來,如果你對這個ssh2以及注解還不熟的話,請先把我的例子運行起來后,逐漸了解了再自己試著做  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-05-19 16:55 | 李亮
    @菠蘿大象
    我一直就是想運行起來再去進一步熟悉 再看整個流程 可總是遇到這樣那樣的問題。。。汗啊  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-05-19 16:57 | 菠蘿大象
    @李亮
    童鞋加油,很多人都一開始沒有成功,最后都成功了,從而可以提高調(diào)試能力。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-05-19 17:41 | 李亮
    我在努力 下班了 回家搞。。。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-07-06 17:54 | 乾坤
    看你這個注解系列好幾遍了, 現(xiàn)在終于能看懂了,很好很強大,謝謝  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-10-18 15:54 | sherry
    在仿照樓主的例子做測試時,使用的是struts2.1.6+spring3.1.0+hibernate4悲催的是找不到org.hibernate.cache.CacheProvider類,hibernate4中不存在該類...哭ING...  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2011-10-20 09:40 | 菠蘿大象
    @sherry
    hibernate每次大升級,都會有很大的變化,出現(xiàn)這種情況不奇怪,hibernate4我還沒用過,寫這篇系列的時候是在2010年,用的都是穩(wěn)定發(fā)布版  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2012-02-29 10:58 | Klingon
    spring中已經(jīng)配置自動掃描:
    <context:component-scan base-package="cn.test"></context:component-scan>
    Action類:
    public class ShowAccountAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    @Autowired
    private transient AccountService accountService;
    頁面請求:
    <s:url action="show-account" var="showAccountUrl">
    <s:param name="username" value="%{'j2ee'}"/>
    </s:url>
    問題:
    1.如上代碼accountService為空, 也就是說Spring無法注入
    2.如果在Action類上加@Controller("show-account")然后
    cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
    ShowAccountAction showAccount= (ShowAccountAction)cxt.getBean("show-account");
    accountService = showAccount.getAccountService();得到非空accountServic,此時也就是說Spring可以注入
    3綜合1、2說明Action沒有被Spring托管
    我看過您的Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解,也十分想嘗試下注解,請您幫助解決下。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2012-04-26 17:22 | sjm
    多對一關(guān)聯(lián)后怎么存User?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2012-04-27 08:38 | 菠蘿大象
    @sjm
    你是說User與Role關(guān)聯(lián)后,User對象的保存?它里面有什么屬性就存什么。你最好將源代碼down下來看看,源碼在第五篇最下面。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2012-04-27 11:02 | sjm
    @菠蘿大象
    好了,在存User的時候根據(jù)id再取一次Role就行了。
    大象的博客很強大,學到不少東西。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2012-06-06 17:09 | 王曉軍
    我理解你。最重要的是思想。有了思想源碼便是浮云。@菠蘿大象
      回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2013-01-23 19:25 | zjg
    我想請問一下您啊,這里為什么使用getSession而不是用Spring封裝好的getHibernateTemplate啊?兩者在什么場合使用呢?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2013-01-24 08:36 | 菠蘿大象
    @zjg
    這個看你的喜好了,getHibernateTemplate是被spring封裝過的,你當然可以選擇它來用,而getSession是原生的,并且我喜好用Criteria方式來編寫代碼,這樣感覺代碼更簡潔些。你可以自己去改的,第五篇最下面提供源碼下載。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2013-02-18 11:21 | 秦時明月
    前輩,首先萬分感謝你!這文章我是相見恨晚啊!!!
    我運行代碼時,報錯了:Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
    請前輩為我解惑,多謝!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2014-04-17 10:29 | ccc
    @菠蘿大象
    不要傷心,我覺得您寫的很入門,很直觀,解釋得也很好!謝謝。同時我認為你說的很對,開發(fā)的思路以及各部分的原理很重要!理解好,動手起來就不難了!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三) 2014-06-26 17:40 | 休息食客
    @菠蘿大象
    非常理解,在搭建一個系統(tǒng)架構(gòu)的時候,思路是最重要的,在設(shè)計的時候要考慮到代碼的復用性,后期維護性,健壯性以及敏捷性開發(fā)。寫得非常不錯,挺你!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(三)[未登錄] 2014-07-21 15:56 | lxl
    非常感謝~受益匪淺~  回復  更多評論
      
    主站蜘蛛池模板: 免费一级特黄特色大片在线| 久久国产乱子精品免费女 | 亚洲伦乱亚洲h视频| 鲁死你资源站亚洲av| 免费高清av一区二区三区| 456亚洲人成影院在线观| 亚洲精品免费在线视频| 亚洲无人区视频大全| 日本三级2019在线观看免费| 亚洲精品天堂在线观看| 免费看美女被靠到爽| 国产成人综合亚洲绿色| 久久久久国产亚洲AV麻豆| 好男人资源在线WWW免费| 亚洲AV综合色区无码一区爱AV| 久久精品乱子伦免费| 亚洲激情校园春色| 午夜毛片不卡免费观看视频| 亚洲AV日韩AV高潮无码专区| 91高清免费国产自产拍2021| 亚洲成无码人在线观看| 国产精品99久久免费| 国产精品福利片免费看| 亚洲视频小说图片| 永久免费无码网站在线观看| 狼色精品人妻在线视频免费| 亚洲毛片αv无线播放一区| 亚洲一级毛片免费观看| 国产亚洲一卡2卡3卡4卡新区| 亚洲综合色成在线播放| 久久ww精品w免费人成| 亚洲精品无码久久久久A片苍井空| 亚洲国产精品成人AV无码久久综合影院| 成人免费乱码大片A毛片| 亚洲国产成人久久三区| 亚洲AV之男人的天堂| 亚洲精品免费在线观看| 亚洲av无码片vr一区二区三区| 中文字幕第一页亚洲| 黄页网站在线看免费| 美女网站在线观看视频免费的 |