Mybatis進(jìn)階

基本知識

resultMap

  • constructor–實(shí)例化的時(shí)候通過構(gòu)造器將結(jié)果集注入到類中
    • oidArg– ID 參數(shù); 將結(jié)果集標(biāo)記為ID闽颇,以方便全局調(diào)用
    • oarg–注入構(gòu)造器的結(jié)果集
  • id–結(jié)果集ID讹开,將結(jié)果集標(biāo)記為ID捆交,以方便全局調(diào)用
  • result–注入一個(gè)字段或者javabean屬性的結(jié)果
  • association–復(fù)雜類型聯(lián)合;許多查詢結(jié)果合成這個(gè)類型
    • 嵌套結(jié)果映射– associations能引用自身,或者從其它地方引用
  • collection–復(fù)雜類型集合
  • 嵌套結(jié)果映射– collections能引用自身,或者從其它地方引用
  • discriminator–使用一個(gè)結(jié)果值以決定使用哪個(gè)resultMap
    • case–基于不同值的結(jié)果映射
      • 嵌套結(jié)果映射–case也能引用它自身, 所以也能包含這些同樣的元素疫蔓。它也可以從外部引用resultMap

http://blog.csdn.net/wxwzy738/article/details/24742495

一、一對一關(guān)系association

  1. association
    association通常用來映射一對一的關(guān)系结借,例如筐摘,有個(gè)類user,對應(yīng)的實(shí)體類如下:(getter,setter方法省略)
    private String id;//主鍵
    private String userName;//用戶姓名
    

    有個(gè)類Article,對應(yīng)的實(shí)體類如下:
    private String id;//主鍵
    private String articleTitle;//標(biāo)題
    private String articleContent;//內(nèi)容
    

    當(dāng)我想查詢一個(gè)用戶的時(shí)候,也查到他寫的一篇文章應(yīng)該如何寫呢?在user類中加入一個(gè)屬性article
    private String id;//主鍵
    private String userName;//用戶姓名
    private Article article;//新增的文章屬性
    
  2. mapper.xml 配置
    在user類的mapper.xml中這樣配置
    <resultMap id="userResultMap"  type="test.mybatis.entity.User">
      <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
      <result column="userName" property="userName"/>
    //這里把user的id傳過去
       <association property="article" column="id"                          select="test.mybatis.dao.articleMapper.selectArticleByUserId" />//test.mybatis.dao.articleMapper為命名空間
     </resultMap>
    

    同時(shí)咖熟,article類的mapper.xml
    <resultMap id="articleResultMap" type="test.mybatis.entity.Article">
      <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
      <result column="articleTitle" property="articleTitle" jdbcType="VARCHAR" javaType="java.lang.String"/>
     <result column="articleContent" property="articleContent" jdbcType="VARCHAR" javaType="java.lang.String"/>
     </resultMap>
      (當(dāng)然圃酵,這里還有查詢user表的語句,省略)
    

    繼續(xù)在article的mapper.xml寫下如下
     <select id="selectArticleByUserId"
     parameterType="java.lang.String"
     resultMap="ArticleResultMap" >
     select * from
     tb_article where userId=#{userId}
     </select>
    

二馍管、一對多關(guān)系collection

  • 實(shí)體類增加對應(yīng)屬性
 private String id;//主鍵
 private String userName;//用戶姓名
 private List<Article> articleList;
  • userMapper.xml配置
<resultMap id="userResultMap" type="test.mybatis.entity.User">
  <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
  <result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
//這里把user的id傳過去
   <collection property="articleList" column="id"                       
            select="test.mybatis.dao.articleMapper.selectArticleListByUserId" />
 </resultMap>
  • userMapper.xml也可以這樣配置
    question 與questionOption時(shí)一對多關(guān)系
    <!-- User 連接查詢 方法配置 (一個(gè)問題對多個(gè)問題選項(xiàng))  -->
        <resultMap type="Question" id="questionMap">
        <id column="id" property="id"/>
        <result column="display_id" property="displayId"/>
        <result column="question_description" property="description"/>
        <result column="is_deleted" property="isDeleted"/>
        <collection resultMap="optionMap" property="questionOptionList" ofType="QuestionOption"/>
    </resultMap>
    
    <resultMap type="QuestionOption" id="optionMap">
            <id column="option_id" property="id"/>
            <result column="question_id" property="questionId"/>
            <result column="option_descritpion" property="optionDescription" javaType="java.lang.String"/>
            <result column="is_correct" property="isCorrect"/>
    </resultMap>

    <select id="getQuestionById" resultMap="questionMap" parameterType="int">
        <![CDATA[
            select
            B.id as id,
            B.display_id as display_id, 
            B.description as question_description,
            B.is_deleted as is_deleted,
            P.id as option_id,
            P.question_id as question_id,
            P.option_description as option_descritpion,
            P.is_correct as is_correct
            from question B
            left outer join question_option P on (B.id = P.question_id)
            where B.id = #{id}
        ]]>
    </select>

幾點(diǎn)注意

  • 在調(diào)用查詢方法的時(shí)候異常為runtimeException 不會(huì)自己拋出郭赐,所以當(dāng)有問題時(shí),可以用try catch保住查錯(cuò)
  • result返回的類型記得對應(yīng)确沸,resultType時(shí)為java類 resultMap時(shí)填寫類型為map
  • 嵌套查詢捌锭,也就是第一種方法查詢時(shí),collectioncolumn為上層主鍵名罗捎,也就是說一般為傳入的參數(shù)

三观谦、批量更新

  1. 第一種
     <update id="updateQuestionOptions" parameterType="java.util.List">
             <foreach collection="list" item="item" index="index" separator=";">
             UPDATE 
                 question_option
             SET option_description = #{item.optionDescription},is_correct = #{item.isCorrect}
                 
                     WHERE id = #{item.id}
             </foreach>
     </update>
    
    注意末尾要加號separator=";"
  2. 第二中
    <update id="deleteQuestionByIds" parameterType="java.util.List">
            UPDATE 
                question
            SET
                is_deleted = 1,
                updated_time = NOW()
            WHERE id in 
            <foreach collection="list" item="item" index="index"  open="(" separator="," close=")">
                #{item}
            </foreach>
    </update>

注意注意前后要加括號open="(" separator="," close=")"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桨菜,隨后出現(xiàn)的幾起案子豁状,更是在濱河造成了極大的恐慌,老刑警劉巖倒得,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泻红,死亡現(xiàn)場離奇詭異,居然都是意外死亡霞掺,警方通過查閱死者的電腦和手機(jī)谊路,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菩彬,“玉大人凶异,你說我怎么就攤上這事〖费玻” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵酷麦,是天一觀的道長矿卑。 經(jīng)常有香客問我,道長沃饶,這世上最難降的妖魔是什么母廷? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮糊肤,結(jié)果婚禮上琴昆,老公的妹妹穿的比我還像新娘。我一直安慰自己馆揉,他們只是感情好业舍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般舷暮。 火紅的嫁衣襯著肌膚如雪态罪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天下面,我揣著相機(jī)與錄音复颈,去河邊找鬼。 笑死沥割,一個(gè)胖子當(dāng)著我的面吹牛耗啦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播机杜,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼帜讲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叉庐?” 一聲冷哼從身側(cè)響起舒帮,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陡叠,沒想到半個(gè)月后玩郊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枉阵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年译红,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兴溜。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侦厚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拙徽,到底是詐尸還是另有隱情刨沦,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布膘怕,位于F島的核電站想诅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岛心。R本人自食惡果不足惜来破,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忘古。 院中可真熱鬧徘禁,春花似錦、人聲如沸髓堪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骤菠,卻和暖如春它改,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背商乎。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工央拖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹉戚。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓鲜戒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抹凳。 傳聞我的和親對象是個(gè)殘疾皇子遏餐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL赢底、存儲(chǔ)過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,429評論 0 4
  • 前言 接著上一篇Mybatis入門繼續(xù)失都,上一篇主要演示了Mybatis的基本操作,對數(shù)據(jù)庫的增刪改查幸冻,但是在實(shí)際項(xiàng)...
    Real_man閱讀 1,538評論 0 2
  • 對象之間的關(guān)系: 關(guān)聯(lián)關(guān)系:A對象依賴B對象,并且把B對象作為A對象的一個(gè)屬性,則A和B是依賴關(guān)系. ** 按照多...
    CoderZS閱讀 625評論 0 8
  • 每個(gè)線程都應(yīng)該有它自己的SqlSession實(shí)例粹庞。SqlSession的實(shí)例不能共享使用,它是線程不安全的 配置文...
    蕊er閱讀 468評論 0 0
  • 01 小陳今年8歲了,他的房間和桌子都是我?guī)兔κ帐暗谋ǎ绻皇俏乙欢ㄒ笏米约赫頃髀耄筒坏冒颜頃墓ぷ?..
    瑞和她的淺島繁花閱讀 644評論 0 12