ResultMap是Mybatis中最重要最强大的元素,使用ResultMap可以解决两大问题:
- POJO属性名和表结构字段名不一致的问题
- 完成高级查询,比如说,一对一、一对多、多对多。
解决表字段名和属性名不-致的问题有两种方法:
- 如果是驼峰似的命名规则可以在Mybatis配置文件中设置解决
- 使用ResultMap解决。
- 使用别名
示例:
<!--
id:唯一标识
type:结果集对应的java类型!这里如果没有起别名的话,需要填写的是这个实体类的具体路径
autoMapping :完成数据库字段名到属性名自动映射,并且支持驼峰规则
-- >
<resultMap type= "User" id= “userResultMap” autoMapping= "true ">
<!-- 完成数据的字段名到j ava对象中属性的映射-- >
<!-- id标签指定主键的 ,建议大家不要省略
column :数据库的字段的名字
property :jav a中属性的名字
-->
<id column= "id" property= "id"/>
<!-- result完成不是 主键的字段的映射-->
<result column= "user_ name”property= "UserName "/>
/resultMap>
<!-- resultType :结果集映射的java对象-->
<select id="queryAllUser" resultMap="userResultMap">
select * from tb_ user
</select>
这里 resultMap要和上面的resultMap标签中的id一样!!
resultMap的自动映射:
在上面讲到的ResultMap中有这样的一个疑问,如果表字段名和属性名-致的情况下是否也需要定义出来?
这个决定于resultMap的autoMapping属性,默认为true。
为true:
Resultmap中定义不全的属性会自动映射到user实体中。
为false:
只是针对定义的ResultMap定义的属性做映射。
<resultMap type= "User" id= "userResul tMap" autoMapping= "true">
<id column="id" property= "id"/>
<result column="user_ name"" property= "userName "/>
</resultMap>