Mybatis09 - 自定义映射 resultMap

字段名与属性名不一致

实体类

public class Emp {

    private Integer empId;

    private String empName;

    private Integer age;

    private String gender;
    ...
}

接口类

public interface EmpMapper {
	Emp getEmpByEmpId(@Param("empId") Integer empId);
}

映射文件

<!--  Emp getEmpByEmpId(@Param("empId") Integer empId);  -->
<select id="getEmpByEmpId" resultType="Emp">
    SELECT * FROM t_emp WHERE emp_id = #{empId};
</select>

属性名 对应数据库 字段名

empId -> emp_id 和 empName -> emp_name

测试

@Test
public void testGetEmpByEmpId(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
    Emp emp = mapper.getEmpByEmpId(2);
    System.out.println(emp);
}

查询结果: 属性名与字段名不同的属性值为 null

Emp{empId=null, empName='null', age=22, gender='男'}

解决方法

  • 一:SQL语句中起别名(一般不使用)
    • <!--  Emp getEmpByEmpId(@Param("empId") Integer empId);  -->
      <select id="getEmpByEmpId" resultType="Emp">
          SELECT emp_id empId, emp_name empName, age, gender FROM t_emp WHERE emp_id = #{empId};
      </select>
      
    • 结果:Emp

  • ☆ 二:属性名与字段名虽然不同,但都分别符合java和sql的命名规则,即属性名-驼峰,字段名-表_字段
    • 在mybatis的核心配置文件中设置全局配置,可以自动将下划线格式映射为驼峰格式

    • <settings>
          <!-- 将下划线映射为驼峰 -->
          <setting name="mapUnderscoreToCamelCase" value="true"/>
      </settings>
      
    • emp_id -> empId & emp_name -> empName

  • ☆☆☆ 三:自定映射 resultMap,在SQL语句前,先通过 resultMap 将字段与属性的映射关系定义好
    • <resultMap id="empResultMap" type="Emp">
          <!-- id 主键和属性映射关系-->
          <id column="emp_id" property="empId"></id>
          <!-- result 普通字段和属性映射关系-->
          <result column="emp_name" property="empName"></result>
          <result column="age" property="age"></result>
          <result column="gender" property="gender"></result>
          <!-- association 多字段对一属性 collection 一字段对多属性 -->
      </resultMap>
      
    • 映射文件需要通过 resultMap 的 id 获取映射规则 resultMap="empResultMap"

    • <!--  Emp getEmpByEmpId(@Param("empId") Integer empId);  -->
      <select id="getEmpByEmpId" resultMap="empResultMap">
          SELECT * FROM t_emp WHERE emp_id = #{empId};
      </select>
      
posted @ 2023-02-13 21:05  LaViez  阅读(17)  评论(0)    收藏  举报