Mybatis映射中的resultType和resultMap之代码详解

一、概述

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

二、ResultType

a.返回实体SQL:<select id="getCollectionProduct2" resultType="com.alqsoft.entity.collectionproduct.CollectionProduct">  SELECT * FROM  alq_collection_product  where member_id = #{mid,jdbcType=BIGINT} and product_id = #{pid,jdbcType=BIGINT}</select>对应的dao接口是:CollectionProduct getCollectionProduct2(@Param("mid") Long id, @Param("pid") Long pid);

b.返回java.util.MapSQL:<select id="getCollectionProductList" resultType="java.util.Map">   SELECT cp.id,p.id productId,p.name,p.imageurl,h.id hunterId,p.status productStatus,(SELECT ROUND(ps.sale_price/100,2) FROM alq_product_specification psWHERE ps.product_id= p.id and ifnull(ps.is_delete,0)=0 ORDER BY ps.created_time ASC LIMIT 1 ) price FROM  alq_product p ,alq_collection_product cp,alq_hunter h WHERE p.id=cp.product_id AND h.id=p.hunter_id AND cp.type= 0  AND cp.member_id = #{uid,jdbcType=BIGINT}   LIMIT  #{page} , #{rows} </select>
对应的dao接口是:

List<Map<String,Object>> getCollectionProductList(Map<String,Object> map);

三、ResultMap当返回类型直接是一个ResultMap的时候也是非常有用的,这主要用在进行复杂联合查询上,因为进行简单查询是没有什么必要的。先看看一个返回类型为ResultMap的简单查询,再看看复杂查询的用法。SQL:

<resultMap id="BaseResultMap" type="com.alqsoft.vo.CollectionProductVO" >  <id column="id" property="id" jdbcType="BIGINT" />  <result column="type" property="type" jdbcType="INTEGER" />  <result column="member_id" property="memberId" jdbcType="BIGINT" />  <result column="product_id" property="productId" jdbcType="BIGINT"/></resultMap>

<sql id="Base_Column_List" >  id,  type, member_id,product_id</sql>

<select id="getCollectionProduct" resultMap="BaseResultMap" >  select   <include refid="Base_Column_List" />

from alq_collection_product  where member_id = #{mid,jdbcType=BIGINT} and product_id = #{pid,jdbcType=BIGINT}</select>
对应的dao接口是:
CollectionProductVO getCollectionProduct(@Param("mid") Long id, @Param("pid") Long pid);
时间: 2024-10-17 23:19:37

Mybatis映射中的resultType和resultMap之代码详解的相关文章

【转】Mybatis 3.1中 Mapper XML 文件 的学习详解

MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 95%的代码量.MyBatis 的构建就是聚焦于 SQL 的,使其远离于普通的方式. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 配置给定命名空间的缓存. cache-ref – 从其他命名空间引用缓存配置. resultMap – 最复杂,也是最有力量的元

Mybatis 3.1中 Mapper XML 文件 的学习详解

转:http://blog.csdn.net/zhll3377/article/details/8203440 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 95%的代码量.MyBatis 的构建就是聚焦于 SQL 的,使其远离于普通的方式. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 配置给定命名空间

Mybatis中输出映射resultType与resultMap的区别

(原文地址:http://blog.csdn.net/acmman/article/details/46509375) 1.resultType 使用resultType进行输出映射,只有查询出来的列名和pojo(实体bean)中的属性名一致,该列才可以映射成功. 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象.只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象. 1.1输出pojo对象和pojo列表 不管是输出的pojo单个对象还是一个列表(list中

MyBatis中的@Mapper注解及配套注解使用详解(上)

前言: 从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件(那个xml写的是真的蛋疼...).很恶心的一个事实是源码中并没有对于这个注解的详细解释 现在我们通过一个简易的maven项目去了解@Mapper注解的使用方式 完整项目请访问我的github项目地址下载 构建一个maven的web项目,目录结构如下:  导入相应的依赖 <dependency> <groupId>org.mybatis</groupId> <ar

Mybatis中的resultType和resultMap

一.概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在. 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值. ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给r

Mybatis中的resultType和resultMap 区别

Mybatis中的resultType和resultMap 是mybatis 中返回类型一定用到的,但不会同时出现.mybatis返回类型肯定是map结构,然后根据返回类型是map还是对象类型,再转换. 在给对象设置属性的时候,两个方法肯定会调用. private Object getRowValue(ResultSetWrapper rsw, ResultMap resultMap) throws SQLException { final ResultLoaderMap lazyLoader

MyBatis学习总结_13_Mybatis查询之resultMap和resultType区别

MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用. 1.resultType 返回单个实例 <select id="selectUser" parameterType="int" resu

mybatis中resultType和resultMap的区别

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMapresultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用但是resultType跟resultMap不能同时存在.在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值.当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultT

mybatis配置文件resultType和resultMap的区别以及mybatis自带的别名

returnType是自定义的类或者jdk自带的类 resultMap是在mapperXMl文件中通过resultMap节点定义出来的 例如: <resultMap id="BaseResultMap" type="com.sinosoft.reins.POJO.model.PrpMaxNo" >     <id column="GROUPNO" property="groupno" jdbcType=&qu