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 @   LaViez  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示