您的位置:首页 > 其它

Mybatis中resultMap和resultType

2016-08-25 18:14 323 查看
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接

表示返回类型的,而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 不能并用)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: