生活随笔
收集整理的這篇文章主要介紹了
MyBatis的resultType和resultMap的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在使用mybatis進行數(shù)據庫連接操作時對于SQL語句返回結果的處理通常有兩種方式,一種就是resultType另一種就是resultMap,下面說下我對這兩者的認識和理解
resultType:當使用resultType做SQL語句返回結果類型處理時,對于SQL語句查詢出的字段在相應的pojo中必須有和它相同的字段對應,而resultType中的內容就是pojo在本項目中的位置。
因此對于單表查詢的話用resultType是最合適的。但是,如果在寫pojo時,不想用數(shù)據庫表中定義的字段名稱,也是可以使用resultMap進行處理對應的。多表連接查詢時,若是一對一的連接查詢,那么需要新建一個pojo,pojo中包括兩個表中需要查詢出的所有的字段,這個地方的處理方式通常為創(chuàng)建一個繼承一個表字段的pojo,再在里面添加另外一個表內需要查詢出的字段即可。若是一對多查詢時,若是使用內連接查詢,則很可能出現(xiàn)查詢出的字段有重復。使用雙重for循環(huán)嵌套處理即可。
resultMap:當使用resultMap做SQL語句返回結果類型處理時,通常需要在mapper.xml中定義resultMap進行pojo和相應表字段的對應。
[java]?view plaincopy
<!--?訂單查詢關聯(lián)用戶的resultMap?? ????將整個查詢的結果映射到cn.itcast.mybatis.po.Orders中?? ?????-->?? ????<resultMap?type="cn.itcast.mybatis.po.Orders"?id="OrdersUserResultMap">?? ????????<!--?配置映射的訂單信息?-->?? ????????<!--?id:指定查詢列中的唯?一標識,訂單信息的中的唯?一標識,如果有多個列組成唯一標識,配置多個id?? ????????????column:訂單信息的唯?一標識?列?? ????????????property:訂單信息的唯?一標識?列所映射到Orders中哪個屬性?? ??????????-->?? ????????<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中添加嵌套另一個表的pojo,然后在mapper.xml中采用association節(jié)點元素進行對另一個表的連接處理。例如:
[html]?view plaincopy
<!--?訂單查詢關聯(lián)用戶的resultMap?? ????將整個查詢的結果映射到cn.itcast.mybatis.po.Orders中?? ?????-->?? ????<resultMap?type="cn.itcast.mybatis.po.Orders"?id="OrdersUserResultMap">?? ?????????? ????????<!--?id:指定查詢列中的唯?一標識,訂單信息的中的唯?一標識,如果有多個列組成唯一標識,配置多個id?? ????????????column:訂單信息的唯?一標識?列?? ????????????property:訂單信息的唯?一標識?列所映射到Orders中哪個屬性?? ??????????-->?? ????????<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/>?? ?????????? ?????????? ????????<!--?association:用于映射關聯(lián)查詢單個對象的信息?? ????????property:要將關聯(lián)查詢的用戶信息映射到Orders中哪個屬性?? ?????????-->?? ????????<association?property="user"??javaType="cn.itcast.mybatis.po.User">?? ????????????<!--?id:關聯(lián)查詢用戶的唯?一標識?? ????????????column:指定唯?一標識用戶信息的列?? ????????????javaType:映射到user的哪個屬性?? ?????????????-->?? ????????????<id?column="user_id"?property="id"/>?? ????????????<result?column="username"?property="username"/>?? ????????????<result?column="sex"?property="sex"/>?? ????????????<result?column="address"?property="address"/>?? ?????????? ????????</association>?? ????</resultMap>?? 若是一對多的表連接方式,比如訂單表和訂單明細表即為一對多連接,若是不對sql語句進行處理,由于一個訂單對應多條訂單明細,因此查詢出的結果對于訂單表數(shù)據來說將會出現(xiàn)重復,例如:
resultMap的處理方式為在訂單表數(shù)據的pojo中添加一個list,list中為訂單明細表的屬性,在mapper.xml中采用如下的處理方式:
[html]?view plaincopy
!--?訂單及訂單明細的resultMap?? ????使用extends繼承,不用在中配置訂單信息和用戶信息的映射?? ?????-->?? ????<resultMap?type="cn.itcast.mybatis.po.Orders"?id="OrdersAndOrderDetailResultMap"?extends="OrdersUserResultMap">?? ?????????? ?????????? ?????????? ?????????? ?????????? ????????<!--?訂單明細信息?? ????????一個訂單關聯(lián)查詢出了多條明細,要使用collection進行映射?? ????????collection:對關聯(lián)查詢到多條記錄映射到集合對象中?? ????????property:將關聯(lián)查詢到多條記錄映射到cn.itcast.mybatis.po.Orders哪個屬性?? ????????ofType:指定映射到list集合屬性中pojo的類型?? ?????????-->?? ?????????<collection?property="orderdetails"?ofType="cn.itcast.mybatis.po.Orderdetail">?? ????????????<!--?id:訂單明細唯?一標識?? ????????????property:要將訂單明細的唯?一標識?映射到cn.itcast.mybatis.po.Orderdetail的哪個屬性?? ??????????????-->?? ????????????<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>?? 在查詢時,雖然一條訂單信息對應多條訂單明細,由于將多條信息明細存儲到了list中,因此查詢后將不再出現(xiàn)重復數(shù)據,達到了去重的效果
總結
以上是生活随笔為你收集整理的MyBatis的resultType和resultMap的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。