为什么会有ResultMap?
<!--
ResultMap :
在sql查询中,如果给查询结果的列名定义了别名,
在用resultType进行普通映射时,是无法给当前类属性赋值的,
由于列名的别名与类的属性名不一致,所以产生了ResultMap映射,
用来映射表的别名与类属性
-->
使用ResultMap,在mapper.xml中配置 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace : 命名空间为UserMapper接口的完全限定名
-->
<mapper namespace="mapper.UserMapper" >
<!--
定义ResultMap :
将SELECT id id_ , username username_ FROM USER
查询出来的列名和User类中的属性做一个映射
type: resultMap 最终映射成的Java类型,
可以使用总配置文件中xml定义的别名
id : 对resultMap的唯一标识
-->
<resultMap type="user" id="userResultMap">
<!--
id表示对id的唯一标识 :
column : 查询出来的列名
property :指定pojo类中的属性名
-->
<id column="id_" property="id" />
<!--
result表示对普通列的映射关系
column : 查询出来的列名
property :指定pojo类中的属性名
-->
<result column="username_" property="username" />
</resultMap>
<!--
使用ResultMap进行输出映射
resultMap : 指定定义的resultMap的id,
如果这个resultMap在其他mapper文件被引用,
前面应加namespace命名空间,
例如:(resultMap="mapper.UserMapper.userResultMap")
-->
<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
SELECT id id_ , username username_ FROM USER WHERE ID=#{id}
</select>
</mapper>
Mapper接口中的方法定义:
//根据id查找用户,返回resultMap
public User findUserByIdResultMap (int id) ;
方法测试 :
//根据id查找用户,返回resultMap
@Test
public void testFindUserByIdResultMap (){
//创建session
SqlSession session = sessionFactory.openSession();
//通过session获取mapper代理
UserMapper mapper = session.getMapper(UserMapper.class);
//调用代理接口中的方法
User user = mapper.findUserByIdResultMap(3);
//输出user
System.out.println(user);
}