Mybatis-ResultMap结果集映射
解决属性名和字段名不一致的问题
测试实体类属性名和字段名不一致的情况
字段名:id、name、password
实体类:
private int id;
private String name;
private String pwd;
测试类:
@Test
public void testGetUserById() {
// 第一步: 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 执行
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user.getPwd());
sqlSession.close();
}
返回的结果是:null
问题的原因是:
查询语句是:select id, name, pwd from user where id = 1,而数据库表user中没有pwd字段
解决方法
-
起别名
select id, name, pwd as password from user where id = 1
-
ResultMap
ResultMap
结果集映射
<mapper namespace="com.kangzhu.dao.UserMapper">
<!-- 结果集映射-->
<resultMap id="UserMap" type="User">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="password" property="pwd"/>
</resultMap>
<select id="getUserById" parameterType="int" resultMap="UserMap">
select * from user where id = #{id}
</select>
</mapper>
这里有两处更改:
- 添加了一个结果集映射
- 在select中添加了resultMap
note:
如果字段名和属性名一样,则不需要添加到结果集映射,直接这样写就好了:
<resultMap id="UserMap" type="User">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="password" property="pwd"/>
</resultMap>