日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis的resultType和resultMap的区别

發(fā)布時(shí)間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis的resultType和resultMap的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在使用mybatis進(jìn)行數(shù)據(jù)庫連接操作時(shí)對于SQL語句返回結(jié)果的處理通常有兩種方式,一種就是resultType另一種就是resultMap,下面說下我對這兩者的認(rèn)識(shí)和理解

resultType:當(dāng)使用resultType做SQL語句返回結(jié)果類型處理時(shí),對于SQL語句查詢出的字段在相應(yīng)的pojo中必須有和它相同的字段對應(yīng),而resultType中的內(nèi)容就是pojo在本項(xiàng)目中的位置。

因此對于單表查詢的話用resultType是最合適的。但是,如果在寫pojo時(shí),不想用數(shù)據(jù)庫表中定義的字段名稱,也是可以使用resultMap進(jìn)行處理對應(yīng)的。多表連接查詢時(shí),若是一對一的連接查詢,那么需要新建一個(gè)pojo,pojo中包括兩個(gè)表中需要查詢出的所有的字段,這個(gè)地方的處理方式通常為創(chuàng)建一個(gè)繼承一個(gè)表字段的pojo,再在里面添加另外一個(gè)表內(nèi)需要查詢出的字段即可。若是一對多查詢時(shí),若是使用內(nèi)連接查詢,則很可能出現(xiàn)查詢出的字段有重復(fù)。使用雙重for循環(huán)嵌套處理即可。


resultMap:當(dāng)使用resultMap做SQL語句返回結(jié)果類型處理時(shí),通常需要在mapper.xml中定義resultMap進(jìn)行pojo和相應(yīng)表字段的對應(yīng)。

[java]?view plaincopy
  • <!--?訂單查詢關(guān)聯(lián)用戶的resultMap??
  • ????將整個(gè)查詢的結(jié)果映射到cn.itcast.mybatis.po.Orders中??
  • ?????-->??
  • ????<resultMap?type="cn.itcast.mybatis.po.Orders"?id="OrdersUserResultMap">??
  • ????????<!--?配置映射的訂單信息?-->??
  • ????????<!--?id:指定查詢列中的唯?一標(biāo)識(shí),訂單信息的中的唯?一標(biāo)識(shí),如果有多個(gè)列組成唯一標(biāo)識(shí),配置多個(gè)id??
  • ????????????column:訂單信息的唯?一標(biāo)識(shí)?列??
  • ????????????property:訂單信息的唯?一標(biāo)識(shí)?列所映射到Orders中哪個(gè)屬性??
  • ??????????-->??
  • ????????<id?column="id"?property="id"/>??
  • ????????<result?column="user_id"?property="userId"/>??
  • ????????<result?column="number"?property="number"/>??
  • ????????<result?column="createtime"?property="createtime"/>??
  • ????????<result?column="note"?property="note"/>?????????
  • ????</resultMap>??

  • resultMap對于一對一表連接的處理方式通常為在主表的pojo中添加嵌套另一個(gè)表的pojo,然后在mapper.xml中采用association節(jié)點(diǎn)元素進(jìn)行對另一個(gè)表的連接處理。例如:

    [html]?view plaincopy
  • <!--?訂單查詢關(guān)聯(lián)用戶的resultMap??
  • ????將整個(gè)查詢的結(jié)果映射到cn.itcast.mybatis.po.Orders中??
  • ?????-->??
  • ????<resultMap?type="cn.itcast.mybatis.po.Orders"?id="OrdersUserResultMap">??
  • ????????<!--?配置映射的訂單信息?-->??
  • ????????<!--?id:指定查詢列中的唯?一標(biāo)識(shí),訂單信息的中的唯?一標(biāo)識(shí),如果有多個(gè)列組成唯一標(biāo)識(shí),配置多個(gè)id??
  • ????????????column:訂單信息的唯?一標(biāo)識(shí)?列??
  • ????????????property:訂單信息的唯?一標(biāo)識(shí)?列所映射到Orders中哪個(gè)屬性??
  • ??????????-->??
  • ????????<id?column="id"?property="id"/>??
  • ????????<result?column="user_id"?property="userId"/>??
  • ????????<result?column="number"?property="number"/>??
  • ????????<result?column="createtime"?property="createtime"/>??
  • ????????<result?column="note"?property=note/>??
  • ??????????
  • ????????<!--?配置映射的關(guān)聯(lián)的用戶信息?-->??
  • ????????<!--?association:用于映射關(guān)聯(lián)查詢單個(gè)對象的信息??
  • ????????property:要將關(guān)聯(lián)查詢的用戶信息映射到Orders中哪個(gè)屬性??
  • ?????????-->??
  • ????????<association?property="user"??javaType="cn.itcast.mybatis.po.User">??
  • ????????????<!--?id:關(guān)聯(lián)查詢用戶的唯?一標(biāo)識(shí)??
  • ????????????column:指定唯?一標(biāo)識(shí)用戶信息的列??
  • ????????????javaType:映射到user的哪個(gè)屬性??
  • ?????????????-->??
  • ????????????<id?column="user_id"?property="id"/>??
  • ????????????<result?column="username"?property="username"/>??
  • ????????????<result?column="sex"?property="sex"/>??
  • ????????????<result?column="address"?property="address"/>??
  • ??????????
  • ????????</association>??
  • ????</resultMap>??

  • 若是一對多的表連接方式,比如訂單表和訂單明細(xì)表即為一對多連接,若是不對sql語句進(jìn)行處理,由于一個(gè)訂單對應(yīng)多條訂單明細(xì),因此查詢出的結(jié)果對于訂單表數(shù)據(jù)來說將會(huì)出現(xiàn)重復(fù),例如:

    resultMap的處理方式為在訂單表數(shù)據(jù)的pojo中添加一個(gè)list,list中為訂單明細(xì)表的屬性,在mapper.xml中采用如下的處理方式:

    [html]?view plaincopy
  • !--?訂單及訂單明細(xì)的resultMap??
  • ????使用extends繼承,不用在中配置訂單信息和用戶信息的映射??
  • ?????-->??
  • ????<resultMap?type="cn.itcast.mybatis.po.Orders"?id="OrdersAndOrderDetailResultMap"?extends="OrdersUserResultMap">??
  • ????????<!--?訂單信息?-->??
  • ????????<!--?用戶信息?-->??
  • ????????<!--?使用extends繼承,不用在中配置訂單信息和用戶信息的映射?-->??
  • ??????????
  • ??????????
  • ????????<!--?訂單明細(xì)信息??
  • ????????一個(gè)訂單關(guān)聯(lián)查詢出了多條明細(xì),要使用collection進(jìn)行映射??
  • ????????collection:對關(guān)聯(lián)查詢到多條記錄映射到集合對象中??
  • ????????property:將關(guān)聯(lián)查詢到多條記錄映射到cn.itcast.mybatis.po.Orders哪個(gè)屬性??
  • ????????ofType:指定映射到list集合屬性中pojo的類型??
  • ?????????-->??
  • ?????????<collection?property="orderdetails"?ofType="cn.itcast.mybatis.po.Orderdetail">??
  • ????????????<!--?id:訂單明細(xì)唯?一標(biāo)識(shí)??
  • ????????????property:要將訂單明細(xì)的唯?一標(biāo)識(shí)?映射到cn.itcast.mybatis.po.Orderdetail的哪個(gè)屬性??
  • ??????????????-->??
  • ????????????<id?column="orderdetail_id"?property="id"/>??
  • ????????????<result?column="items_id"?property="itemsId"/>??
  • ????????????<result?column="items_num"?property="itemsNum"/>??
  • ????????????<result?column="orders_id"?property="ordersId"/>??
  • ?????????</collection>??
  • ??????????
  • ??????
  • ????</resultMap>??

  • 在查詢時(shí),雖然一條訂單信息對應(yīng)多條訂單明細(xì),由于將多條信息明細(xì)存儲(chǔ)到了list中,因此查詢后將不再出現(xiàn)重復(fù)數(shù)據(jù),達(dá)到了去重的效果


    總結(jié)

    以上是生活随笔為你收集整理的MyBatis的resultType和resultMap的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。