写在前面
ResultMap的出现,是为了解决数据库字段名与Java类属性名不一致的问题
下面介绍下问题场景:
数据库有一张User表,字段名分别是:id , username , pwd
而Java类中有一个User类,属性名分别是:id , username , password
这里可以发现,pwd与password的字段名不一样,这样查询数据库时,后端接收到的password值将会是null
解决方式一(在SQL语句方面做文章)
众所周知,在Sql语句查询时,可以为查询的字段起别名,这样就可以起一个与Java类属性名一致的别名让Mybatis去识别:
<select id="xxx" >
select id, username, pwd as password
from user
where id = #{id}
</select>
解决方式二(使用ReslutMap)
在UserMapper.xml的sql语句中添加ResultMap属性
<select id="xxx" resultMap="UserMap">
select * from user where id = #{id}
</select>
同时添加ResultMap标签:
<resultMap id="UserMap" type="User">
<!--column的值代表数据库中表的字段,property代表实体类中的属性名-->
<result column="pwd" property="password"/>
</resultMap>
这里,id值要与上面select标签中的resultMap属性值相对应,
type属性值表明要映射到的类是User类
用ReslutMap就可以完成表字段与类属性名的映射了
【注】这里的字段仅限于基础类型,如果字段是另一个对象,则另当别论。。。