//实体类
public class User {
private String name;
private int age;
private String sex;
}
<!--mapper.xml配置文件-->
<select id="getByAge" resultType="user">
select name,age,gender from user where age = #{age}
</select>
1,问题
- 实体类性别的字段名为sex
- 数据库性别的字段名是gender
查询的结果为:
User{name='李四', age=30, sex='null'}
可以看出查询结果中sex属性为null,并未赋值
解决办法:
- 给字段起别名
- 引入结果集对象ResultMap
2、ResoultMap
<!--在Mapping.xml中使用结果集对象-->
<resultMap id="UserMap" type="com.myboy.domain.User">
<result column="gender" property="sex"/>
</resultMap>
<select id="getByAge" resultMap="UserMap">
select name,age,gender from user where age = #{age}
</select>
测试成功
User{name='李四', age=30, sex='男'}
总结:
- 当实体类属性名和数据库字段名一致时,MyBatis 会在幕后自动创建一个
ResultMap
,再基于属性名来映射列到 JavaBean 的属性上 - 当实体类属性名和数据库字段名不一致时,只需配置不一致这一项的映射
- 使用ResultMap后,select,delete等其他标签中不需要使用resultType属性,改为resultMap属性