Mybatis中resultMap的使用總結(jié)
Mybatis的介紹以及使用:http://www.mybatis.org/mybatis-3/zh/index.html
resultMap是Mybatis最強(qiáng)大的元素,它可以將查詢到的復(fù)雜數(shù)據(jù)(比如查詢到幾個(gè)表中數(shù)據(jù))映射到一個(gè)結(jié)果集當(dāng)中。
resultMap包含的元素:
<!--column不做限制,可以為任意表的字段,而property須為type 定義的pojo屬性--><resultMap type='映射的pojo對象'> <id column='表的主鍵字段,或者可以為查詢語句中的別名字段' jdbcType='字段類型' property='映射pojo對象的主鍵屬性' /> <result column='表的一個(gè)字段(可以為任意表的一個(gè)字段)' jdbcType='字段類型' property='映射到pojo對象的一個(gè)屬性(須為type定義的pojo對象中的一個(gè)屬性)'/> <association property='pojo的一個(gè)對象屬性' javaType='pojo關(guān)聯(lián)的pojo對象'> <id column='關(guān)聯(lián)pojo對象對應(yīng)表的主鍵字段' jdbcType='字段類型' property='關(guān)聯(lián)pojo對象的主席屬性'/> <result column='任意表的字段' jdbcType='字段類型' property='關(guān)聯(lián)pojo對象的屬性'/> </association> <!-- 集合中的property須為oftype定義的pojo對象的屬性--> <collection property='pojo的集合屬性' ofType='集合中的pojo對象'> <id column='集合中pojo對象對應(yīng)的表的主鍵字段' jdbcType='字段類型' property='集合中pojo對象的主鍵屬性' /> <result column='可以為任意表的字段' jdbcType='字段類型' property='集合中的pojo對象的屬性' /> </collection></resultMap>
如果collection標(biāo)簽是使用嵌套查詢,格式如下:
<collection column='傳遞給嵌套查詢語句的字段參數(shù)' property='pojo對象中集合屬性' ofType='集合屬性中的pojo對象' select='嵌套的查詢語句' > </collection>
注意:<collection>標(biāo)簽中的column:要傳遞給select查詢語句的參數(shù),如果傳遞多個(gè)參數(shù),格式為column= ” {參數(shù)名1=表字段1,參數(shù)名2=表字段2} ;
以下以實(shí)例介紹resultMap的用法:一、簡單需求:一個(gè)商品的結(jié)果映射;1、創(chuàng)建商品pojo對象:
public class TShopSku { /** * 主鍵ID */ private Long id; /** * 商品名 */ private String skuName; /** * 分類ID */ private Long categoryId; /** * 主鍵ID * @return ID */ public Long getId() {return id; } /** * 主鍵ID, * @param id */ public void setId(Long id) {this.id = id; } /** * 商品名 * @return SKU_NAME 商品名 */ public String getSkuName() {return skuName; } /** * 商品名 * @param skuName 商品名 */ public void setSkuName(String skuName) {this.skuName = skuName == null ? null : skuName.trim(); } /** * 分類ID * @return CATEGORY_ID 分類ID */ public Long getCategoryId() {return categoryId; } /** * 分類ID * @param categoryId 分類ID */ public void setCategoryId(Long categoryId) {this.categoryId = categoryId; }
對應(yīng)的resultMap:
<resultMap type='com.meikai.shop.entity.TShopSku'> <id column='ID' jdbcType='BIGINT' property='id' /> <result column='SKU_NAME' jdbcType='VARCHAR' property='skuName' /> <result column='CATEGORY_ID' jdbcType='BIGINT' property='categoryId' /></resultMap> 二、商品pojo類添加屬性集合:
一個(gè)商品會(huì)有一些屬性,現(xiàn)在需要將查詢出的商品屬性添加到商品對象中,首先需要在原商品pojo類的基礎(chǔ)上中添加屬性的集合:
/** * 屬性集合 */ private List<TShopAttribute> attributes; /** * 獲得屬性集合 */ public List<TShopAttribute> getAttributes() {return attributes; }/** * 設(shè)置屬性集合 * @param attributes */ public void setAttributes(List<TShopAttribute> attributes) {this.attributes = attributes; }
將Collection標(biāo)簽添加到resultMap中,這里有兩種方式:
1、嵌套結(jié)果:
對應(yīng)的resultMap:
<resultMap type='com.meikai.shop.entity.TShopSku'> <id column='ID' jdbcType='BIGINT' property='id' /> <result column='SKU_NAME' jdbcType='VARCHAR' property='skuName' /> <result column='CATEGORY_ID' jdbcType='BIGINT' property='categoryId' /> <collection property='attributes' ofType='com.meikai.shop.entity.TShopAttribute' > <id column='AttributeID' jdbcType='BIGINT' property='id' /><result column='attribute_NAME' jdbcType='VARCHAR' property='attributeName' /> </collection></resultMap>
查詢語句:
<select resultMap='basePlusResultMap'> select s.ID,s.SKU_NAME,s.CATEGORY_ID,a.ID,a.ATTRIBUTE_NAME from t_shop_sku s,t_shop_attribute a where s.ID =a.SKU_ID and s.ID = #{id,jdbcType =BIGINT};</select>
2、關(guān)聯(lián)的嵌套查詢(在collection中添加select屬性):
商品結(jié)果集映射resultMap:
<resultMap type='com.meikai.shop.entity.TShopSku'> <id column='ID' jdbcType='BIGINT' property='id' /> <result column='SKU_NAME' jdbcType='VARCHAR' property='skuName' /> <result column='CATEGORY_ID' jdbcType='BIGINT' property='categoryId' /> <collection column='{skuId=ID}' property='attributes' ofType='com.meikai.shop.entity.TShopAttribute' select='getAttribute' > </collection></resultMap>
collection的select會(huì)執(zhí)行下面的查詢屬性語句:
<select resultMap='AttributeResultMap'> select a.ID,s.ATTRIBUTE_NAME from t_shop_attribute a where a.ID = #{skuId,jdbcType =BIGINT};</select>
屬性結(jié)果集映射:
<resultMap type='com.meikai.shop.entity.TShopAttribute'> <id column='ID' jdbcType='BIGINT' property='id' /> <result column='ATTRIBUTE_NAME' jdbcType='VARCHAR' property='attributeName' /></resultMap>
BasePlusResultMap包含了屬性查詢語句的Collection
所以通過下面的查詢商品語句就可獲得商品以及其包含的屬性集合:
<select resultMap='BasePlusResultMap'> select s.ID,s.SKU_NAME,s.CATEGORY_ID from t_shop_sku s where s.ID = #{id,jdbcType =BIGINT};</select>
到此這篇關(guān)于Mybatis中resultMap的使用總結(jié)的文章就介紹到這了,更多相關(guān)Mybatis resultMap 使用內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. DB2 XML 全文搜索之為文本搜索做準(zhǔn)備2. 快速解決mysql導(dǎo)出scv文件亂碼、躥行的問題3. 數(shù)據(jù)庫人員手冊之ORACLE應(yīng)用源碼4. MySQL基礎(chǔ)教程9 —— 函數(shù)之日期和時(shí)間函數(shù)5. 用SQL SERVER記錄站點(diǎn)日志6. 輕松解決SQL Server 2005中的常見問題7. MySQL 千萬級(jí)數(shù)據(jù)量如何快速分頁8. 如何:創(chuàng)建和運(yùn)行 CLR SQL Server 存儲(chǔ)過程9. centos 7安裝mysql5.5和安裝 mariadb使用的命令10. 在hp-ux10.20系統(tǒng)下配置oracle8.0.5
