<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
        前兩章我為大家詳細(xì)介紹了如何搭建Maven環(huán)境、Spring MVC的流程結(jié)構(gòu)、Spring MVCStruts2的區(qū)別以及示例中的一些配置文件的分析。在這一章,我就對示例的層次結(jié)構(gòu)進(jìn)行說明,以及MyBatis的一些簡單介紹。
        本文不會對MyBatis作詳細(xì)說明,大象還是假定閱讀本文的朋友對MyBatis(ibatis)有最基本的了解,只有這樣才能較好的理解本文的內(nèi)容。關(guān)于MyBatis請查看它的官方文檔及其它參考資料,本文不作詳細(xì)討論。
        一、工程結(jié)構(gòu)圖
        
        上面這是典型的Maven項(xiàng)目結(jié)構(gòu)形式,使用本地倉庫管理jar包的依賴,使用插件打包編譯發(fā)布非常方便,讓我們從傳統(tǒng)的開發(fā)方式中解放出來,大家都快來使用Maven構(gòu)建項(xiàng)目吧!
        二、映射文件
        使用MyBatis進(jìn)行持久化操作,需要設(shè)置一個映射文件,一般來說,每張表對應(yīng)一個實(shí)體對象和一個mapper映射文件。而MyBatis里面沒有像Hibernate那樣復(fù)雜的關(guān)聯(lián)關(guān)系,所以,它的每個實(shí)體類其實(shí)就是一個很普通的POJO類。而映射文件中,都是SQL語句,下面就是示例中RoleMapper.xml的代碼片段。
        
        那么,MyBatis是如何將數(shù)據(jù)庫字段與POJO對象進(jìn)行映射的呢?這是在它的內(nèi)部,會將到得的結(jié)果或結(jié)構(gòu)集,與我們定義的POJO對象屬性進(jìn)行映射,規(guī)則是,屬性首字母小寫,使用駝峰式命名方式,而字段則是單詞與單詞間,用下劃線連接。比如:數(shù)據(jù)庫有個USER_NAME字段,那么與它對應(yīng)的屬性就應(yīng)該是userName。如果字段命名沒有使用下劃線,那么屬性可以直接定義成該單詞。比如,NAME字段,它的屬性就是name
        三、基于namespace接口與公用dao的區(qū)別
        MyBatis3.0開始,對mapper中的namespace屬性新增了一個特性:可以指定具體的接口來作為持久化操作類,在接口中定義與映射文件中id屬性值相同的方法,MyBatis會自動去綁定和執(zhí)行對應(yīng)的SQL語句。這種接口實(shí)現(xiàn)方式,需要為每個Mapper創(chuàng)建一個接口,如果系統(tǒng)做大了,維護(hù)這些類會比較麻煩,大象個人傾向于基礎(chǔ)服務(wù)式的Dao實(shí)現(xiàn)類,如例子中的MyBatisDao
        四、MyBatisDao
        持久化操作基類,SqlSessionDaoSupportmybatis-spring插件中封裝的,用于獲得SQL Session連接,執(zhí)行數(shù)據(jù)庫操作,我定義了幾個常用的方法。
        關(guān)于mybatis-spring插件我簡單介紹一下, Spring 3.x的發(fā)布并沒有對MyBatis這一優(yōu)秀的SQL框架提供支持,雖然在它的問題列表中已經(jīng)有這樣的請求,但直到目前3.0.5版的發(fā)布,都還沒將這個問題處理掉。不過這難不倒開源世界里廣大的愛好者與貢獻(xiàn)者,mybatis-spring就是在這樣的情況下誕生了。它是由MyBatis社區(qū)愛好者完成的一個開源項(xiàng)目,用來進(jìn)行Spring 3.0MyBatis 3.0的配置整合。該插件需要運(yùn)行在JDK 5.0或更高版本。
        
        五、
    Service
        ssm3這個示例中,大家有沒有發(fā)現(xiàn),已經(jīng)沒有為每個entity定義一個dao,而是統(tǒng)一的調(diào)用MyBatisDao作為存儲服務(wù)接口。另外與使用Hibernate的主要區(qū)別,就是不能直接傳一個對象參數(shù),還必須寫上key值,它是namespace加上ID值。
        
        六、entity
        MyBatis的實(shí)體類就是一個簡單的POJO對象,只是用來與表字段進(jìn)行關(guān)聯(lián)映射,請注意,我這里所說的映射不是像Hibernate那種綁定關(guān)系,只一種存放數(shù)據(jù)的對象而已。
        
        七、測試
        上面的步驟完成后,接下來就需要測試下我們的業(yè)務(wù)接口是否正常,編寫一個測試類,為了達(dá)到目的,簡便起見,大象是對RoleService進(jìn)行測試,UserService同理類似。
        在寫測試用例前,需要在POM文件中加入一個Srping測試依賴,這是大象在前面兩章疏忽漏掉了,請大家諒解。
        
        然后編寫測試類,運(yùn)行測試,通過!
        
        到此,這一章的內(nèi)容就講完了,如果有對注解不理解的地方,請看下我之前的SSH2系列之三,至于MyBatis,它的內(nèi)容太多了,如果不清楚還請先看下使用指南。下一章我將會介紹web,以及使用Spring MVC的注解來實(shí)現(xiàn)控制器功能。
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。
    http://m.tkk7.com/bolo/archive/2011/08/04/352845.html
    posted on 2011-08-04 16:02 菠蘿大象 閱讀(21071) 評論(26)  編輯  收藏 所屬分類: Spring3

    評論:
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-04 16:04 | 菠蘿大象
    對不起大家,本來應(yīng)該是六月份發(fā)布的,拖到現(xiàn)在,再次抱歉,滿地打滾求諒解!  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-08 09:33 | taote
    雞動啊!!!!大象順便說下,下一章啥時候出啊???  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-08 09:35 | 菠蘿大象
    @taote
    爭取月底吧,如果不行就下月  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-11 17:19 | 然然
    如果要是mybatisDao里面沒有的方法,是不是就必須逮寫dao了。比如roleDao,

      回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-11 17:30 | 菠蘿大象
    @然然
    逮寫是嘛意思?mybatisDao是基礎(chǔ)調(diào)用方法,與業(yè)務(wù)無關(guān)的。我現(xiàn)在定義的里面唯一沒有的就是分頁查詢基本方法,這個在后面會加的,更新操作與插入一樣,在SqlSessionDaoSupport這個類里面,實(shí)質(zhì)這兩個在調(diào)用上,插入調(diào)用的還是更新的方法  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-12 10:28 | 然然
    主要是我看到了文章里有這么一句話:
    五、Service
    在ssm3這個示例中,大家有沒有發(fā)現(xiàn),已經(jīng)沒有為每個entity定義一個dao,而是統(tǒng)一的調(diào)用MyBatisDao作為存儲服務(wù)接口。

    對于特殊的查詢操作,比如涉及到多表聯(lián)合查詢或者是其他的,還是要寫對應(yīng)的dao的吧。
      回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-12 10:34 | 菠蘿大象
    @然然
    不用滴,你所有的涉及到sql的操作都是定義在配置文件中,然后根據(jù)namespace.id,由mybatis去執(zhí)行對應(yīng)的操作。你注意看RoleService中的方法,我只是一個調(diào)用而已,具體的sql都在rolemapper.xml中  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-12 11:04 | 然然
    嗯,明白了。
    也就是說,不管是何種復(fù)雜的sql操作,只要寫在xml里面,
    然后只要在mybatisDao里面定義了通用的調(diào)用方法,
    在service里面調(diào)用mybatisDao即可,只不過namespace.id不同就可以了。
      回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-12 11:10 | 菠蘿大象
    @然然
    恭喜你回答對了!  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-12 11:32 | 然然
    好期待你的分頁查詢基本方法。
    上一個項(xiàng)目我們公司用的是ibatis,
    因?yàn)楸容^匆忙,基本就沒有封裝。
    每一個分頁都是在sql方法里加上
    where rownum &lt;= #to#) where rn &gt;= #from#
    然后調(diào)用的時候傳入to 和 from。
    不知道有沒有更好的方法。
      回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-12 11:37 | 菠蘿大象
    @然然
    這樣寫,大象感覺非常蛋疼,灰常灰常滴不好。ibatis里面是可以擴(kuò)展一個類來進(jìn)行封裝的,而mybatis里面,則是需要自定義擴(kuò)展插件,才可以實(shí)現(xiàn),如果使用它自帶的RowBounds,這貨不是真正的分頁,是內(nèi)存式分頁!  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-12 13:26 | 然然
    這樣寫確實(shí)非常麻煩。都覺得ibatis咋這麻煩了,呵呵。還是自己水平不到家。
    所以期待大象的下一章早點(diǎn)出來。哇咔咔。  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-16 14:56 | 然然
    這blogjava為啥就木有一個給博主留言的地兒泥。。。。。  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-16 15:05 | 菠蘿大象
    @然然
    一般就是在評論里寫,我剛剛加了留言薄,你可以在那里留言給我  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-18 11:25 | 然然
    @菠蘿大象
    看來在留言里不如在評論里。留言大象都不回復(fù)啊。
    是我太唐突了,不好意思了。  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-19 08:59 | 菠蘿大象
    @然然
    如果是評論,blogjava會跟我發(fā)一封郵件,留言的話就沒有了,我是看到你的評論才看到你給我的留言,不好意思  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-26 10:08 | taote
    大象,spring 加 mybatis的事務(wù)控制介紹一下,貌似用那個整合的包解決不了。。。,我在service中報異常,結(jié)果事務(wù)并不回滾。。。。  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-08-26 13:22 | 菠蘿大象
    @taote
    哪個整合的包?我還沒發(fā)源碼呢?在第五篇中上傳源碼,耐心等等吧  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-09-11 08:09 | KimHo
    spring結(jié)合mybatis的事務(wù),的確是失效的,即使后臺log顯示已經(jīng)有事務(wù)機(jī)制了。
    這個我測試過好多次,mybaits3.0.6,spring3.1M2  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-09-11 11:52 | taote
    @KimHo
    呵呵。。上次我做測試的表設(shè)置成了myisam了,所以沒有事物,換成innodb就ok了。你看下你是不是這個情況?  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2011-09-12 11:11 | KimHo
    @taote
    哦?還跟數(shù)據(jù)庫有關(guān)?
    這個還真沒注意到
    我用的是mysql數(shù)據(jù)庫  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2012-02-24 18:25 | taote
    看來大象最近很忙,已經(jīng)好久沒下文了!  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2012-07-30 16:12 | mozzian
    你好 MyBatisDao 這個在配置XML那沒有"sqlSessionFactory"或"sqlSessionTemplate''也可以嗎. 怎么運(yùn)行的...?  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2012-07-30 16:15 | 菠蘿大象
    @mozzian
    請你到第五篇的最下面,把源碼下下來看一看,里面是有配置的。  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2014-02-17 14:44 | 呆瓜
    這么做會造成persistence和service的耦合,大的項(xiàng)目不推薦這么來做。  回復(fù)  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三) 2014-02-17 16:23 | 菠蘿大象
    @呆瓜
    這樣做是非常簡單的,根據(jù)我的經(jīng)驗(yàn),業(yè)務(wù)相關(guān)的東西是經(jīng)常變的,對業(yè)務(wù)層設(shè)定接口然后再寫實(shí)現(xiàn)類是完全沒必要的,直接用實(shí)現(xiàn)類就可以了。另外,我將存儲定義成一個服務(wù)接口,也簡化了不少工作,因?yàn)橛玫氖荕yBatis而不是Hibernate,所以有些東西是不需要的。還有因?yàn)檫@是學(xué)習(xí)示例,我沒有進(jìn)行抽象,像CRUD都是可以寫進(jìn)超類里面的,如果業(yè)務(wù)不復(fù)雜真正要的代碼其實(shí)很少。系統(tǒng)架構(gòu)是根據(jù)實(shí)際開發(fā)情況演進(jìn)的,最適合的才是最好的,不是一定要公式化。  回復(fù)  更多評論
      
    主站蜘蛛池模板: 国产精品玖玖美女张开腿让男人桶爽免费看| 国产成人无码区免费网站| 在线观看亚洲精品国产| 日韩精品无码一区二区三区免费| 亚洲中文字幕无码爆乳app| 久久综合亚洲色HEZYO国产| 1000部国产成人免费视频| 边摸边吃奶边做爽免费视频网站| 亚洲AV无码国产丝袜在线观看| 免费看的黄色大片| 久久久久久久久久国产精品免费| 亚洲av无码专区在线电影| 亚洲国产精品热久久| 国产一级一片免费播放| 久久国产精品2020免费m3u8| 在线精品自拍亚洲第一区| 亚洲高清中文字幕| 亚洲综合色自拍一区| 免费看少妇作爱视频| 7m凹凸精品分类大全免费| 成人嫩草影院免费观看| 亚洲高清中文字幕免费| 亚洲av无码一区二区三区不卡 | 日产亚洲一区二区三区| 亚洲人成网站在线观看青青| 久久不见久久见中文字幕免费 | 91精品国产免费网站| 一级毛片免费在线观看网站| 亚洲中文字幕无码亚洲成A人片| 亚洲av色福利天堂| 亚洲精品网站在线观看不卡无广告| 一二三四免费观看在线电影 | 国产无遮挡又黄又爽免费网站| 亚洲av无码有乱码在线观看| 亚洲妓女综合网99| 亚洲欧洲在线观看| 亚洲国产精品va在线播放| 国产成人亚洲综合无码| 免费看国产曰批40分钟| 男女啪啪永久免费观看网站| 亚洲视频免费一区|