自定义映射resultMap(解决属性和字段的不一致)

 自定义映射resultMap

 1 . resultMap处理字段和属性的映射关系:

       若字段名和实体类中的属性名不一致,则可以通过resultMap设置自定义映射

package com.atguigu.mybatis.mapper;

import com.atguigu.mybatis.pojo.Emp;

import java.util.List;

public interface EmpMapper {
   /**
    * @return
    * 查询所有的员工信息
    */
   List<Emp> getAllEmp();
}

   第一种方法:

<!-- 为字段起别名,保持和属性名的一致--> 
</select>
   <select id="getAllEmp" resultType="Emp">
       select eid,emp_name empName,age,sex,email from t_emp
  </select>

 

第二种方法:

    <!--    映射是有规则的:
       将_下划线字段映射为驼峰,emp_name:empName
          (在核心配置文件中配置)
          (可以参考mybatis官方文档)
-->
<settings>
  <setting name="mapUnderscoreToCamelCase" value="true"/>
  </settings>
  <select id="getAllEmp" resultType="Emp" >
       select * from t_emp
   </select>

 

  第三种方法:

<!--
   自定义映射,所以要设置字段和属性的映射关系,通过resultMap标签来设置自定义映射的
   通过sql语句就会通过resultMap所设置的自定义映射的关系然后进行映射

   resultMap:设置自定义映射关系
   id:唯一标识(不能重复)
   type:设置映射关系中的实体类类型
   子标签:
     id:设置主键的映射关系
     result:设置普通字段映射关系
     属性:
     property:设置映射关系中的属性名,必须type属性所设置的实体类型中的属性名
     column:设置映射关系中的字段名,必须是sql语句查询出的字段名
     resultMap:只在查询功能中有用(增删改不需要设置映射关系)
-->
   <!--List<Emp> getAllEmp();-->
   <resultMap id="empResultMap" type="Emp">
       <id property="eid" column="eid"></id>
       <result property="empName" column="emp_name"></result>
       <result property="age" column="age"></result>
       <result property="sex" column="sex"></result>
       <result property="empName" column="emp_name"></result>
       <result property="email" column="email"></result>
   </resultMap>
   
       <select id="getAllEmp" resultMap="empResultMap">
       select * from t_emp
   </select>

  测试类:

    /**
    * 解决字段名和属性名不一致的情况:
    * ①为字段起别名,保持和属性名的一致
    * ②设置全局配置,将_自动映射为驼峰(满足条件:属性符合属性规则,字段符合字段规则)
    * <setting name="mapUnderscoreToCamelCase" value="true"/>
    * ③通过resultMap设置自定义的映射关系
    */
   @Test
   public void testGetAllEmp(){
       SqlSession sqlSession = SqlSessionUtils.getSqlSession();
       EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
       List<Emp> allEmp = mapper.getAllEmp();
       allEmp.forEach(emp ->
           System.out.println(emp));
  }
 

 

posted @ 2022-11-02 20:37  zjw_rp  阅读(245)  评论(0)    收藏  举报