Mybatis中resultMap和resultType
2016-08-25 18:14
323 查看
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接
表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,
值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给
resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,
只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType
所指定对象的属性,而当我们提供的返回类型是resultMap的时候,因为Map不能很好表示领域模型,
我们就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
这里要强调的是,Mybatis是对返回的结果的每一行做映射的。所以,下面的语句返回的是Integer,而不是List
Xml代码
<select id="count" parameterType="AreaDto" resultType="java.lang.Integer">
SELECT id FROM USER
</select>
返回一个int
Xml代码
<select id="count" parameterType="AreaDto" resultType="java.lang.Integer">
SELECT count(*) FROM USER
</select>
返回map
Xml代码
<select id=”selectUsers” parameterType=”int” resultType=”hashmap”>
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
这样一个语句简单作用于所有列被自动映射到HashMap的键上,这由resultType属性指定。这在很多情况下是有用的,但是HashMap不能很好描述一个领域模型。那样你的应用程序将会使用JavaBeans或POJOs(Plain Old Java Objects,普通Java对象)来作为领域模型
返回javaBEAN 对象
Xml代码
<select id="count" parameterType="AreaDto" resultType="User">
SELECT * FROM USER
</select>
要记住类型别名是你的伙伴。使用它们你可以不用输入类的全路径。
Xml代码
<typeAlias type=”com.someapp.model.User” alias=”User”/>
这些情况下,MyBatis会在幕后自动创建一个ResultMap,基于属性名来映射列到JavaBean的属性上
MyBatis会自动创建一个ResultMap对象,然后基于查找出来的属性名进行键值对封装,然后再看到返回类型是Blog对象,再从ResultMap中取出与Blog对象对应的键值对进行赋值。
当返回类型直接是一个ResultMap的时候也是非常有用的,这主要用在进行复杂联合查询上,因为进行简单查询是没有什么必要的。
简单resultMap配置
Xml代码
<resultMap type="com.liulanghan.Blog" id="BlogResult">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<result column="owner" property="owner"/>
</resultMap>
<select id="selectBlog" parameterType="int" resultMap="BlogResult">
select * from t_blog where id = #{id}
</select>
结果集的列比resultMap多会报错么?
不会,只映射resultMap中有的列。
结果集的列比resultMap少会报错么?
不会,只映射结果集中有的列。
表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
1.resultType
在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,
值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给
resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,
只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType
所指定对象的属性,而当我们提供的返回类型是resultMap的时候,因为Map不能很好表示领域模型,
我们就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
这里要强调的是,Mybatis是对返回的结果的每一行做映射的。所以,下面的语句返回的是Integer,而不是List
Xml代码
<select id="count" parameterType="AreaDto" resultType="java.lang.Integer">
SELECT id FROM USER
</select>
返回一个int
Xml代码
<select id="count" parameterType="AreaDto" resultType="java.lang.Integer">
SELECT count(*) FROM USER
</select>
返回map
Xml代码
<select id=”selectUsers” parameterType=”int” resultType=”hashmap”>
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
这样一个语句简单作用于所有列被自动映射到HashMap的键上,这由resultType属性指定。这在很多情况下是有用的,但是HashMap不能很好描述一个领域模型。那样你的应用程序将会使用JavaBeans或POJOs(Plain Old Java Objects,普通Java对象)来作为领域模型
返回javaBEAN 对象
Xml代码
<select id="count" parameterType="AreaDto" resultType="User">
SELECT * FROM USER
</select>
要记住类型别名是你的伙伴。使用它们你可以不用输入类的全路径。
Xml代码
<typeAlias type=”com.someapp.model.User” alias=”User”/>
这些情况下,MyBatis会在幕后自动创建一个ResultMap,基于属性名来映射列到JavaBean的属性上
2.resultMap
MyBatis会自动创建一个ResultMap对象,然后基于查找出来的属性名进行键值对封装,然后再看到返回类型是Blog对象,再从ResultMap中取出与Blog对象对应的键值对进行赋值。
当返回类型直接是一个ResultMap的时候也是非常有用的,这主要用在进行复杂联合查询上,因为进行简单查询是没有什么必要的。
简单resultMap配置
Xml代码
<resultMap type="com.liulanghan.Blog" id="BlogResult">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<result column="owner" property="owner"/>
</resultMap>
<select id="selectBlog" parameterType="int" resultMap="BlogResult">
select * from t_blog where id = #{id}
</select>
结果集的列比resultMap多会报错么?
不会,只映射resultMap中有的列。
结果集的列比resultMap少会报错么?
不会,只映射结果集中有的列。
resultType | 语句返回值类型的整类名或别名。注意,如果是集合,那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。(resultType 与resultMap 不能并用) | ||
resultMap | 引用的外部resultMap 名。结果集映射是MyBatis 中最强大的特性。许多复杂的映射都可以轻松解决。(resultType 与resultMap 不能并用) |
相关文章推荐
- 关于mybatis配置文件中的resultMap和resultType
- mybatis初步----查询之resultMap和resultType
- mybatis3.0 配置等值连接两种方式:resultMap和resulttype
- Mybatis中resultMap和resultType
- Mybatis中的resultMap和resultType
- Mybatis中的resultType和resultMap
- Mybatis利用ResultMap自定义映射案例
- MyBatis学习笔记之resultMap
- [置顶] mybatis中代码复用问题resultMap、sql、include标签
- Mybatis 高级结果映射 ResultMap Association Collection
- MyBatis之使用resultMap实现高级映射
- MyBatis引入外部文件的resultMap
- Mybatis 一对一 关联查询 与 resultMap
- MyBatis实战——resultMap,resultType简介,关联对象
- MyBatis学习总结(13)——Mybatis查询之resultMap和resultType区别
- mybatis学习高级映射一对一之resultMap映射
- MyBatis之ResultMap简介,关联对象…
- mybatis配置文件中resultType和resultMap错写后将会封装成属性不一样数据,以及后台报错java.util.HashMap cannot be cast to com.entity
- 【Mybatis框架】输出映射-resultType与resultMap
- Mybatis中resultMap