5.解决属性名和字段名不一致的问题 resultMap
5.1问题
在UserMapper.xml中的一个标签中,如select标签,
<select id="getUserList" resultType="com.ariverh.pojo.User">
select * from mybatis_study.user;
</select>
如果User类中的属性名和数据库中的user的字段名不一致时,那么当我们查询的时候那么不一致的字段查询到的值就不会赋值给User属性的值,那么该属性值就为空。
那么我们该如何解决这个问题呢?
方法一:在查询时给字段取别名。
select id as userId,name as UserName,age as UserAge from mybatis_study.user;
方法二:使用结果映射(resultMap),通过结果姐映射将不同字段映射到不用类的属性上。
5.1解决问题resultMap
在之前的返回值类型中,我们都是用resultType类指定返回值的类型,这样Mybatis会帮我们自动映射属性,即只有当类的属性名和字段名相同时,才存在映射关系。
<select id="getUserList" resultType="com.ariverh.pojo.User">
select * from mybatis_study.user;
</select>
如果我们属性名和字段名不同那么我们就需要用resultMap
<resultMap id="UserMapper" type="com.ariverh.pojo.User">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="userAge" column="age"/>
</resultMap>
<select id="getUserList" resultMap="UserMapper">
select id,name,age as userAge from mybatis_study.user;
</select>
上述的resultMap中id为该resultMap标识,select可以通过resultMap等于id名获得对应的resultMap。从而获得结果集映射。这样就解决了属性名和字段不一致的问题。
在resultMap标签中的result子标签,里面代表每个映射,property为属性名,colunm为字段名。一个resultMap可以有多个映射。但是我们发现,当我们字段名和属性名相同时,我们就用在resultMap中进行映射了,因为mybatis会帮我们映射字段名和属性名相同的部分。
这里我们只是简单的一对一映射,后面我们会讲述更难和复杂的映射关系。