举例说明:
数据库中字段名为 user_id,而实体类中字段名为 userId,此时在 SQL 语句中:
<select id="selectUsers" resultType="zone.aileen.domain.entity.User">
select *
from t_user
</select>
返回的是User对象,数据库和实体类对应不上会出现 null 值情况。
解决方案一:
// 第一步 添加映射
<!-- 添加一个 resultMap 用来将实体字段和数据库字段做映射(一一对应) -->
<resultMap type="User" id="UserResult">
<!-- 此次只写一个字段作为演示,最后将所有的字段都做映射 -->
<!-- property 的值是实体类中的字段,column 的值是数据库字段 -->
<id property="userId" column="user_id" />
</resultMap>
// 第二步 将 resultType 换成做的映射 resultMap
<select id="selectUsers" resultMap="UserResult">
select *
from t_user
</select>
解决方案二:
适用于多表联查,要返回多个表的字段而新建一个VO接收返回值,可以使用 别名 来进行映射
返回实体对象如下
@Data
public class TeamInformationVo {
/** 队伍名字 */
private String teamName;
/** 地址 */
private String address;
/** 队长姓名 */
private String captainName;
/** 队长电话 */
private String captainPhone;
}
SQL 别名映射:
<select id="selectBasicInformation" resultType="zone.aileen.domain.vo.TeamInformationVo">
select
<!-- 别名映射 -->
t.team_name teamName, t.address address,
u.user_name captainName,
u.phonenumber captainPhone
from res_team_user tu
join res_team t on tu.team_id = t.team_id
join sys_user u on tu.user_id = u.user_id
where t.parent_id = 0 and tu.person_type = 0
</select>