MyBatis学习笔记(八) —— 字段名和属性不一致的情况下,如何处理映射关系

news2025/1/18 14:41:57

EmpMapper.java

/**
* 根据id查询员工信息
* @param empId
* @return
*/
Emp getEmpByEmpId(@Param("empId") Integer empId);

EmpMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fan.mybatis.mapper.EmpMapper">
	
</mapper>

ResultMapTest.java

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

数据库表里字段名是带下划线的,比如 emp_name。对应实体类中的属性是驼峰命名规则的,比如empName。

字段名和属性名不一致的情况下,通过mybatis来查询,字段名和属性名是对应不上的。

有3种方法处理字段名和属性名的映射关系

方式1:带下划线的字段起别名,和实体类中的属性名一样。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fan.mybatis.mapper.EmpMapper">

    <!-- 
      字段名和属性不一致的情况,如何处理映射关系
        第一种方式:为查询的字段设置别名,和属性名保持一致
  	-->
    <select id="getEmpByEmpId" resultType="Emp">
        select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #{empId}
    </select>
</mapper>

运行测试,可以看到查询出来的字段和属性名一致。

img

方式二:当字段符合MySQL的要求使用_,而属性符合java的要求使用驼峰

​ 此时可以在MyBatis的核心配置文件中设置一个全局设置,可以自动将下划线映射为驼峰

​ 比如:emp_id 映射为 empId, emp_name 映射为 empName

① 打开mybatis的核心配置文件 mybatis-config.xml

设置全局配置 settings,是作用于mybatis所有的增删改查的功能,

<settings>
  <!-- 将下划线映射为驼峰 -->
  <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

img

② EmpMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fan.mybatis.mapper.EmpMapper">

    <!--
        字段名和属性不一致的情况,如何处理映射关系
        1、为查询的字段设置别名,和属性名保持一致
        2、当字段符合MySQL的要求使用_,而属性符合java的要求使用驼峰
        此时可以在MyBatis的核心配置文件中设置一个全局设置,可以自动将下划线映射为驼峰
        emp_id:empId, emp_name:empName
     -->
    <select id="getEmpByEmpId" resultType="Emp">
        <!--select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #{empId}-->
        select * from t_emp where emp_id = #{empId}
    </select>
</mapper>

③ 运行测试,可以看到字段名映射为实体类中的属性了。

img

方式三:使用resultMap自定义映射处理

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fan.mybatis.mapper.EmpMapper">

    <!--
        字段名和属性不一致的情况,如何处理映射关系
        1、为查询的字段设置别名,和属性名保持一致
        2、当字段符合MySQL的要求使用_,而属性符合java的要求使用驼峰
        此时可以在MyBatis的核心配置文件中设置一个全局设置,可以自动将下划线映射为驼峰
        emp_id:empId, emp_name:empName
        3、使用resultMap自定义映射处理
     -->

    <!--
        resultMap: 设置自定义的映射关系
        id: 唯一标识
        type: 处理映射关系的实体类的类型
        常用的标签:
        id: 处理主键和实体类中实现的映射关系
        result: 处理普通字段和实体类中属性的映射关系
        column: 设置映射关系中的字段名,必须是sql查询出的某个字段
        property: 设置映射关系中的属性的属性名,必须是处理的实体类类型中的属性名
     -->
    <resultMap id="empResultMap" type="Emp">
        <id column="emp_id" property="empId"></id>
        <result column="emp_name" property="empName"></result>
        <result column="age" property="age"></result>
        <result column="gender" property="gender"></result>
    </resultMap>

    <select id="getEmpByEmpId" resultMap="empResultMap">
        select * from t_emp where emp_id = #{empId}
    </select>
</mapper>

select标签中的resultMap的值对应的是resultMap标签的id

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android仿QQ未读消息拖拽粘性效果

效果图原理分析首先是在指定某个位置画一个圆出来&#xff0c;手指按到这个圆的时候再绘制一个可以根据手指位置移动的圆&#xff0c;随着手指的移动两个圆逐渐分离&#xff0c;分离的过程中两圆中间出现连接带&#xff0c;随着两圆圆心距的增大&#xff0c;半径也是根据某一比…

LeetCode经典例题|134. 加油站|运用坐标系数学思维一步解决

134. 加油站 这道题刚看很容易就想到了暴力或者回溯剪枝。 这是一个有增有减的过程&#xff0c;就好像坐标系上的一个个点&#xff0c;连在一起形成一条上下起伏的折线。 1. 做坐标轴 比如 gas [1,2,3,4,5], cost [3,4,5,1,2] 从0号汽车站开始出发&#xff0c;一直到回到起…

计算机网络(第三版) 胡亮 课后习题第四章答案

计算机网络&#xff08;第三版&#xff09; 胡亮 课后习题第四章答案 1、数据链路层的任务和功能是什么&#xff1f; 数据链路层的任务是提供两个相邻的网络节点或主机及其相连的网络节点之间的可靠通信。 数据链路层的主要服务功能是线路规程、差错控制和流量控制。 2、什么是…

第四阶段08-基于element-ui的vue2.0脚手架(续)

42. VUE脚手架项目嵌套路由 在配置路由&#xff08;配置/src/router/index.js&#xff09;时&#xff0c;如果配置的路由对象是routes常量的直接数组元素&#xff0c;则此路由配置的视图会显示在App.vue的<router-view/>中。 在设计视图时&#xff0c;可能会出现<ro…

深度学习基础实例与总结

一、神经网络 1 深度学习 1 什么是深度学习&#xff1f; 简单来说&#xff0c;深度学习就是一种包括多个隐含层 (越多即为越深)的多层感知机。它通过组合低层特征&#xff0c;形成更为抽象的高层表示&#xff0c;用以描述被识别对象的高级属性类别或特征。 能自生成数据的中…

Spring常见面试题汇总(超详细回答)

1.什么是Spring框架&#xff1f;Spring框架是一个开源的Java应用程序开发框架&#xff0c;它提供了很多工具和功能&#xff0c;可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架&#xff0c;开发者可以更加轻松地开发Java应用程序&#xff0c;并且可以更加灵活地组…

C++学习笔记

C学习笔记 学习视频资料 随手记 vector是一个能够存放任意类型的动态数组 unordered_set 不能放重复元素的容器 emplace放入 std::cin.get(); //使控制器不会立马关闭&#xff0c;保持窗口打开 总是通过 const引用传递对象 默认 动态链接 static 静态链接&#xff08;只在当…

WebRTC Qos策略

1.WebRTC 用于提升 QoS 的方法&#xff1a;NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR&#xff08;动态帧率调整策略&#xff09;https://blog.csdn.net/CrystalShaw/article/details/80432267丢包重传NACK&#xff1a;一种通知技术&#xff0c;…

【办公类-19-02】Python批量制作word文本框的名字小标签,用A4word打印(植物角、家长会、值日生)

背景需求&#xff1a; 2月28日去小班带班&#xff0c;看到班主任制作了一些小手印花束作为家长会的家长座位提示&#xff0c;上面贴着“”圆形白色的幼儿名字贴”。 我立刻想起了制作的过程——在word中插入文本框&#xff0c;然后复制无数个文本框&#xff0c;摆好位置&#…

Win11的两个实用技巧系列之设置系统还原点的方法、安全启动状态开启方法

Win11如何设置系统还原点?Win11设置系统还原点的方法很多用户下载安装win11后应该如何创建还原点呢&#xff1f;现在我通过这篇文章给大家介绍一下Win11如何设置系统还原点&#xff1f;在Windows系统中有一个系统还原功能可以帮助我们在电脑出现问题的时候还原到设置的时间上&…

spring循环依赖debug源码【Java面试第三季】

spring循环依赖debug源码【Java面试第三季】前言spring循环依赖debug源码35_spring循环依赖debug源码01全部Debug断点36_spring循环依赖debug源码0237_spring循环依赖debug源码0338_spring循环依赖debug源码04最后前言 本文是4.Spring【Java面试第三季】的小节 spring循环依赖…

守护进程与TCP通讯

目录 一.守护进程 1.1进程组与会画 1.2守护进程 二.创建守护进程 setsid函数&#xff1a; 三. TCP通讯流程 3.1三次握手&#xff1a; 3.2 数据传输的过程 3.3四次挥手 一.守护进程 1.1进程组与会画 进程组&#xff1a;进程组由一个进程或者多个进程组成&#xff0c;每…

谷歌优化排名怎么做出来的?谷歌排名多久做上去?

本文主要分享谷歌排名的算法机制&#xff0c;让你很容易地用更短的时间把Google的自然排名做到首页。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 谷歌优化排名怎么做出来的&#xff1f; 答案是&#xff1a;持续更新原创优质内容…

让WPF中的DataGrid像Excel一样可以筛选

在默认情况下&#xff0c;WPF提供的DataGrid仅拥有数据展示等简单功能&#xff0c;如果要实现像Excel一样复杂的筛选过滤功能&#xff0c;则相对比较麻烦。本文以一个简单的小例子&#xff0c;简述如何通过WPF实话DataGrid的筛选功能&#xff0c;仅供学习分享使用&#xff0c;如…

唯品会财报:一面骄阳,一面寒霜

配图来自Canva可画 在互联网技术飞速发展、物流基础设施日益完善&#xff0c;以及消费者购物习惯不断改变等多重因素的共同影响下&#xff0c;电商行业实现了蓬勃发展。得益于此&#xff0c;电商行业也跑出了许多知名电商品牌&#xff0c;其中既有淘宝、京东、拼多多等综合型电…

SSRF漏洞原理、危害以及防御与修复

一、SSRF漏洞原理漏洞概述SSRF&#xff08;Server-side Request Forge&#xff0c;服务端请求伪造&#xff09;是一种由攻击者构造形成由服务端发起请求的安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的&#xff0c;所…

Java开发 - Elasticsearch初体验

目录 前言 什么是es&#xff1f; 为什么要使用es&#xff1f; es查询的原理&#xff1f; es需要准备什么&#xff1f; es基本用法 创建工程 添加依赖 创建操作es的文件 使用ik分词插件 Spring Data 项目中引入Spring Data 添加依赖 添加配置 创建操作es的业务逻…

深度学习常用的激活函数总结

各种激活函数总结 目录一、sigmoid二、tanh![在这里插入图片描述](https://img-blog.csdnimg.cn/a0d92552edf8464db793fdd2f2b75cb5.png)三、ReLU系列1.原始ReLU2.ReLU改进&#xff1a;Leaky ReLU四、swish五、GeLU一、sigmoid 优点&#xff1a; 1.可以将任意范围的输出映射到 …

高通平台开发系列讲解(Sensor篇)AlsPs的工作原理及介绍

文章目录 一、什么是ALS?二、什么是距感(PS)?三、AlsPs的工作原理四、AlsPs的特性五、距感的校准参数说明六、光感的校准参数说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 AlsPs 的工作原理及介绍。 一、什么是ALS? 光感的英文叫做Ambient Li…

算法小抄2-刷题中Python的常用语法

标准数据类型 不可变数据类型: Number String Tuple 可变数据类型:List Dictionary Set 关于为什么会分成可变和不可变最后会讲到哦 Number Number支持int,float,bool,complex四种,其中int范围小且必须为整数,float范围较大,可以是是小数,bool值表示是否,complex为复数,赋值…