首页 > 其他分享 >Mybatis09 - 自定义映射 resultMap

Mybatis09 - 自定义映射 resultMap

时间:2023-02-13 21:25:33浏览次数:52  
标签:empId 映射 自定义 resultMap emp Mybatis09 id Emp

字段名与属性名不一致

实体类

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>
      

标签:empId,映射,自定义,resultMap,emp,Mybatis09,id,Emp
From: https://www.cnblogs.com/Ashen-/p/17117824.html

相关文章

  • vscode自定义主题配色
    setting.json{"workbench.colorTheme":"SolarizedLight","window.zoomLevel":1,//目自定义的颜色"editor.tokenColorCustomizations":{......
  • 自定义注解记录日志
    1.自定义注解2.切面类3.具体方法3.具体方法二4.具体方法  5.具体方法三6.具体方法7 ......
  • coding持续集成构建环境自定义node版本
    解决方案只需要在构建计划的编写过程中增加一个如下的stage,具体nodejs版本下载地址可参考https://nodejs.org/en/download/releases/这里。stage('toggleNode.......
  • go-rod 自定义启动
       u:=launcher.New().Headless(false).//Devtools(true).Bin("E:\\Chrome-bin\\chrome.exe").MustLaunch()browser:=rod.Ne......
  • MQ的定时任务改装,实现自定义定时:MQ+redis
    packagecom.*.server.live.listener;importcom.*.common.core.entity.constant.LiveConstant;importcom.*.common.redis.service.RedisService;importcom.*.serve......
  • 07 自定义分页器
    自定义分页器推导current_page=request.GET.get("page",1)#获取用户访问的页码,没有则默认展示第一页try:#由于后端接收到的前端数据是字符串类型所以做类型转换......
  • C语言--自定义数据类型 typedef struct 位域 union enum
    C语言中可以堆类型赋予新名字语法:typedefTypeNewTypeName注意:typedef并没有创建新类型,只是创建了类型别称eg:typedefintaa;typdef可以在函数中定义,“”局部......
  • Vue3中用自定义指令拦截点击事件,点击事件添加权限
    案例使用Vue3举例,如在Vue2中使用思路是一致的,语法稍有区别。问题某些应用场景会给点击事件添加权限,不存在权限就拦截点击事件(或触发其他业务事件),有权限就继续正常触发......
  • Vue3中用自定义指令拦截点击事件,点击事件添加权限
    案例使用Vue3举例,如在Vue2中使用思路是一致的,语法稍有区别。问题某些应用场景会给点击事件添加权限,不存在权限就拦截点击事件(或触发其他业务事件),有权限就继续正常触......
  • uni-app: 使用自定义字体文件(hbuilderx 3.6.18)
    一,复制字体文件到static目录下,如图: 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest     对应的源码可以访问这里......