Mybatis中resultMap和resultType

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代码  收藏代码
  1. <select id="count" parameterType="AreaDto" resultType="java.lang.Integer">  
  2.         SELECT id FROM USER  
  3. </select>  

 

返回一个int

 

Xml代码  收藏代码
  1. <select id="count" parameterType="AreaDto" resultType="java.lang.Integer">  
  2.         SELECT count(*) FROM USER  
  3. </select>  

 

返回map

Xml代码  收藏代码
  1. <select id=”selectUsers” parameterType=”int” resultType=”hashmap”>  
  2.     select id, username, hashedPassword  
  3.     from some_table  
  4.     where id = #{id}  
  5. </select>  

 

这样一个语句简单作用于所有列被自动映射到HashMap的键上,这由resultType属性指定。这在很多情况下是有用的,但是HashMap不能很好描述一个领域模型。那样你的应用程序将会使用JavaBeans或POJOs(Plain Old Java Objects,普通Java对象)来作为领域模型

返回javaBEAN 对象

 

Xml代码  收藏代码
  1. <select id="count" parameterType="AreaDto" resultType="User">  
  2.         SELECT * FROM USER  
  3. </select>   

 

要记住类型别名是你的伙伴。使用它们你可以不用输入类的全路径。

 

Xml代码  收藏代码
  1. <typeAlias type=”com.someapp.model.User” alias=”User”/>  

 这些情况下,MyBatis会在幕后自动创建一个ResultMap,基于属性名来映射列到JavaBean的属性上

 

2.resultMap

 

MyBatis会自动创建一个ResultMap对象,然后基于查找出来的属性名进行键值对封装,然后再看到返回类型是Blog对象,再从ResultMap中取出与Blog对象对应的键值对进行赋值。

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

 

简单resultMap配置 

Xml代码  收藏代码
  1. <resultMap type="com.liulanghan.Blog" id="BlogResult">    
  2.     <id column="id" property="id"/>    
  3.     <result column="title" property="title"/>    
  4.     <result column="content" property="content"/>    
  5.     <result column="owner" property="owner"/>    
  6. </resultMap>   
  7.    
  8. <select id="selectBlog" parameterType="int" resultMap="BlogResult">    
  9.       select * from t_blog where id = #{id}    
  10. </select>  

 

结果集的列比resultMap多会报错么?
不会,只映射resultMap中有的列。

 

结果集的列比resultMap少会报错么?
不会,只映射结果集中有的列。


resultType                                        语句返回值类型的整类名或别名。注意,如果是集合,那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。(resultType 与resultMap 不能并用    
resultMap 引用的外部resultMap 名。结果集映射是MyBatis 中最强大的特性。许多复杂的映射都可以轻松解决。(resultType 与resultMap 不能并用)


没有更多推荐了,返回首页