Mybatis ResultMap
来源:原创 发布时间:2015-04-27 归档:mybatis
环境 :
JDK 7
Mybatis 3.2.7
Maven 3
Junit 4.11
Spring 4.1.5
Eclipse Luna
数据库表结构 :
实体类定义 :
<select id="queryById" parameterType="int" resultType="Role"> SELECT * FROM ROLE WHERE id = #{id} </select>
SQL 执行时返回的结果由 mybatis 静默创建一个 ResultMap 来映射列到 JavaBean 属性上。mybatis 会获取 SQL 返回的列名并在 JAVA 类中查找相同名字的属性 ( 忽略大小写 ), 然后将列的值赋给这些属性。这是自动映射的过程。如果表列名与实体类属性名称不匹配, 可以通过 SQL 别名 (AS) 来进行手工配置 :
<select id="queryById" parameterType="int" resultType="Product"> SELECT id, prod_name as name, prod_price as price FROM PRODUCT WHERE id = #{id} </select>
你也可以这样做 :
<resultMap type="Product" id="productResultMap"> <id property="id" column="id" /> <result property="name" column="prod_name" /> <result property="price" column="prod_price" /> </resultMap>
或者可以这样做 :
<resultMap type="Product" id="productResultMap"> <result property="name" column="prod_name" /> <result property="price" column="prod_price" /> </resultMap>
在 <resultMap> 中, 你可以只对一些特殊的属性来进行列的映射, 那些没有手工设定的属性将会进行自动映射, 自动映射的前提是属性名称与查询结果列的名称相同。自动映射处理完成以后, 手工映射才会被处理。
像这样来引用它 :
<select id="queryById" parameterType="int" resultMap="productResultMap"> SELECT * FROM PRODUCT WHERE id = #{id} </select>
注意这里的 resultType 和 resultMap 用法的区别。resultType 表明返回的结果的数据类型, 是查询结果的列映射到的类型, 如我们的实体类、Map 等。resultMap 是外部 ResultMap 的引用, 使用的前提是必须先配备 <resultMap>, <resultMap> 定义了数据库表的列与 JavaBean 属性之间的映射关系。
另外, resultType 和 resultMap 不能共存, 两者只能选其一, 查询的结果要么是 resultType, 要么是 resultMap。
另外, resultType 和 resultMap 不能共存, 两者只能选其一, 查询的结果要么是 resultType, 要么是 resultMap。