mybatis中resultType和resultMap的聯系
在使用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
<resultMapid="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的聯系