1. 程式人生 > >mybatis中resultType和resultMap的聯系

mybatis中resultType和resultMap的聯系

平時 sel 多對多查詢 oid resultmap key 一對一 我們 多對多

在使用mybatis進行數據庫連接操作時對於SQL語句返回結果的處理通常有兩種方式,一種就是resultType另一種就是resultMap,下面說下我對這兩者的認識和理解

比如,我們平時使用的單表查詢,很多時候使用的就是resultType

下來,看一段代碼吧

 1 package org.cxxy.base.cxsc.entity;
 2 
 3 public class TbClass {
 4     private Integer id;
 5 
 6     private String classname;
 7 
 8     private String deptname;
9 10 public Integer getId() { 11 return id; 12 } 13 14 public void setId(Integer id) { 15 this.id = id; 16 } 17 18 public String getClassname() { 19 return classname; 20 } 21 22 public void setClassname(String classname) { 23 this.classname = classname == null
? null : classname.trim(); 24 } 25 26 public String getDeptname() { 27 return deptname; 28 } 29 30 public void setDeptname(String deptname) { 31 this.deptname = deptname == null ? null : deptname.trim(); 32 } 33 }

上面的PO類我使用的是我的一個小Demo

下來開始貼我的XML Mapper

<resultMap 
id="BaseResultMap" type="org.cxxy.base.cxsc.entity.TbClass"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="classname" jdbcType="VARCHAR" property="classname" /> <result column="deptname" jdbcType="VARCHAR" property="deptname" /> </resultMap>

這個resultMap是對應的我的po類的屬性

下來,貼出我的xml的單表查詢statement

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
</select>
 

parameterType代表的是輸入參數(比如:select * from tb_class where id = "xxxx"),resultMap表示映射的結果集,從命名中也可以看到Map,當然是結果集了,

上述代碼所代表的單表查詢(一對一),當然,在一般開發的時候,像這種映射,我們一般會使用下述的寫法

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="類的全限定名">
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
</select>

即是說所得到的結果一樣,一般在我們理解方面,盡量還是選擇後者

但是如果根據客戶的需求的變化,比如說寫出了類的擴展類

org.cxxy.base.cxsc.entity.TbClassDatail

如果,在擴展類中引入了外類(其他的表的屬性(和本類沒有共同的屬性)),我們可以使用resultMap,但是也並非完全

resultMap

定義po類
在Orders類中加入User屬性。
在Orders類中加入List<Orderdetail> orderdetails屬性

 訂單查詢清單

<select id="findOrdersDetailList" resultMap="userorderdetailmap">
    SELECT
    orders.*,
    user.username,
    user.address,
    orderdetail.id orderdetail_id,
    orderdetail.items_id,
    orderdetail.items_num
    FROM orders,user,orderdetail
    WHERE orders.user_id = user.id
    AND orders.id = orderdetail.orders_id
</select> 

 <!-- 訂單信息resultmap -->

<!-- 訂單信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap">
<id property="id"column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<association property="user" javaType="cn.itcast.mybatis.po.User">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
<collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
    <id property="id" column="orderdetail_id"/>
    <result property="items_id" column="items_id"/>
    <result property="items_num" column="items_num"/>
</collection>
</resultMap>

上面的代碼,我是貼的某培訓機構的訂單查詢代碼,

  上面的實體類的關系是:Order----->User 一對一(一個用戶一個訂單) Order------->OrderDetail 一對多(一個訂單有多條訂單明細)

像這種的一對多、多對多查詢的映射,我們盡量使用resultMap

註:collection 標簽是一對多的映射,常用於一對多中擴展類下的List<po對象>的屬性
association標簽適用擴展類包含的一對一的po類對象屬性

總結一下

resultType:

作用:

將查詢結果按照sql列名pojo屬性名一致性映射到pojo中(適用於單表僅查詢)。

場合:

常見一些明細記錄的展示,比如用戶購買商品明細,將關聯查詢信息全部展示在頁面時,此時可直接使用resultType將每一條記錄映射到pojo中,在前端頁面遍歷list(list中是pojo)即可。

好了,今天就分享到這裏,以上僅為我自己的觀點,博主現在大學生一枚,理解可能不是很充分,希望大牛能夠多提提意見,謝謝。

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

原帖地址:http://www.cnblogs.com/ChoviWu/p/7190311.html

mybatis中resultType和resultMap的聯系