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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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