这里要解决属性名和字段名不一致的问题
将User类的pwd属性改为password
private String password;
再次执行SelectUserById()方法测试得到的结果User{id=1, name=‘张三’, password=‘null’}
这里的select * from user where id = #{id} 可以看做select id,name,pwd from user where id = #{id}
MyBatis会根据要查询的列名(会将列名转化为小写,数据库不区分大小写) ,去对应的实体类中查找相应列名的set方法设值,由于找不到setPwd(),所以password返回null(自动映射)
我们可以为列名指定别名 , 别名和java实体类的属性名一致
<select id="selectUserById" resultType="User">
select id , name , pwd as password from user where id = #{id}
</select>
也可以使用结果集映射ResultMap(手动映射)
<resultMap id="UserMap" type="User">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
<select id="selectUserById" resultMap="UserMap">
select id , name , pwd from user where id = #{id}
</select>
在数据库中往往存在一对多,多对一的情况,在后面会用到一些高级的结果集映射