【MyBatis】深入解析 MyBatis:关于注解和 XML 的 MyBatis 开发方案下字段名不一致的的查询映射解决方案

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


注解查询映射


我们再来调用下面的 selectAll() 这个接口,执行的 SQL 是 select* from user_info,表示全列查询:
在这里插入图片描述


运行测试类对应方法,在日志中可以看到,字段名一致,Mybatis 就成功从数据库对应的字段中拿到值,但是字段名不一样,则没有从数据库中获取到值;

在这里插入图片描述

因为 Java 和数据库的属性命名规范不同,导致一些字段名称不同;

虽然数据库返回的值是正确的,但是并没有给 Java 中 UserInfo 类对象的各个属性成功赋值;


此时,我们需要一个转换规则,让名称不一样的字段可以对应起来:

在这里插入图片描述


通过 as 起别名映射


我们通过 as 关键字来给字段起别名

select id , username, `password`, age, gender, phone, delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from user_info;

验证 SQL 语句是否可以被成功执行:

在这里插入图片描述


接下来,我们将起好别名的 SQL 语句用 Mybatis 执行:

在这里插入图片描述


执行对应测试类方法,观察打印日志:

在这里插入图片描述


通过 @Results 进行结构映射映射


但是上面的方式还是比较麻烦的,我们可以通过注解 @Results 来绑定参数:

在这里插入图片描述


我们再继续点 Result [ ] 查看源码:

在这里插入图片描述


光从源码,我们还是无法知道 @Results 注解是如何使用的;

下面是 @Results 注解的使用,用于对应名称不一样的数据库字段和 java 属性:
在这里插入图片描述


我们重新执行对应的测试类方法,观察打印日志:

在这里插入图片描述


通过 @ResultsMap 复用@Results


但是如果后续还要执行关于 select 的 SQL ,岂不是每一个接口方法都要加上:

    @Results({@Result(column = "delete_flag" , property = "deleteFlag"),@Result(column = "create_time" , property = "createTime"),@Result(column = "update_time" , property = "updateTime")})

还是有些麻烦了,是否有更简单的工具,可以帮我们对应上名称不一样的字段呢?

在这里插入图片描述

我们再来查看 @Results 注解的源码,源码不单单只有 Result[ ],还有 id;

这个 id 属性可以帮我们标识一条 @Result 注解对应的名字:

在这里插入图片描述


通过上面的方式,我们就给这条注解起好了名字,后续如果还要使用 @Results 映射刚刚的字段,只需要使用 @ResultMap 注解来映射 @Results 即可

在这里插入图片描述


执行 selectAllById 接口对应的测试类方法,观察日志,成功给后面三个字段赋值,说明映射成功:
在这里插入图片描述


开启驼峰命名


但但但但但是,上面的两种方式还是太吃操作了,煮啵煮啵,有没有更简单快捷的映射方法推荐一下?

有的兄弟,有的!!!

接下来这款操作,不需要修改老长的 SQL 语句,也不需要使用复杂的 @Results、@Result、@ResultMap 注解;

我们只需要赋值下面的代码到配置文件中,即可实现从数据库命名规范字段 Java 命名规范字段的转换:

mybatis:configuration:map-underscore-to-camel-case: true  # 开启驼峰命名自动转换

通常数据库列使用蛇形命名法进行命名(下划线分割各个单词),而 Java 属性一般遵循驼峰命名法约定。

在这里插入图片描述

为了在这两种命名方式之间启用自动映射,需要将mapUnderscoreToCamelCase设置为true。


驼峰命名规则:abc_xyz => abcXyz

  • 表中字段名:abc_xyz
  • 类中属性名:abcXyz

配置好对应 yml 文件后,我们再来执行下列接口对应的测试类方法:

在这里插入图片描述


观察打印日志,赋值成功,说明成功映射参数:

在这里插入图片描述


XML 查询映射


通过 as 起别名映射


上文提到,我们可以使用 as 对 SQL 中的字段起别名,来解决查询映射的问题;

那么在 XML 开发模式下,又该如何解决该问题呢?我们写出如下 SQL:

select id , username, `password`, age, gender, phone, delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from user_info;

在这里插入图片描述

值得一提,XML 文件中的 SQL 语句换行没有意义,依旧代表一个完整的字符串,但是在 java 文件中,SQL 语句换行是需要带上 + 加号的;


我们执行对应的测试类方法:

在这里插入图片描述


查看打印日志,可以发现,不同名的对应属性通过起别名的方式,依旧可以成功映射:

在这里插入图片描述


结果映射


我们重新添加一个方法,来讲解结果映射:

在这里插入图片描述


<resultsMap>


此时,我们需要使用 <resultMap> </resultMap> 标签来进行结果映射

在这里插入图片描述


在这里插入图片描述


其实<resultsMap>标签和 @Result 注解源码是类似的,需要写的字段一样,知识写法不同:

在这里插入图片描述


@Results 的写法如下:

在这里插入图片描述


我们可以类比 <resultsMap> 的写法:

在这里插入图片描述


在这里插入图片描述

不过,如果使用这种方法来映射属性,就要把对象中的所有属性的映射都写全;

因为在别的 XML 文件中,依旧可以引入这个映射,特定场景下,如果这个映射没有写入全部对象属性,则可能会映射不上;


在这里插入图片描述


在这里插入图片描述


生成测试语句,调用 selectAll2() 对应的测试类方法,观察打印日志:

在这里插入图片描述


开启驼峰命名


mybatis:configuration:map-underscore-to-camel-case: true  # 开启驼峰命名自动转换

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

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

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

相关文章

深入理解Java性能调优与JVM底层机制

Java作为一种广泛应用的编程语言&#xff0c;在企业级应用中占据着举足轻重的地位。随着系统规模的扩大和业务需求的复杂化&#xff0c;性能调优成为了开发过程中不可忽视的一环。Java的性能瓶颈往往并不直接来自代码本身&#xff0c;而是与JVM&#xff08;Java虚拟机&#xff…

odo18实施——销售-仓库-采购-制造-制造外包-整个流程自动化单据功能的演示教程

安装模块 安装销售 、库存、采购、制造模块 2.开启外包功能 在进入制造应用点击 配置—>设置 勾选外包&#xff0c;点击保存 添加信息 一、添加客户信息 点击到销售应用 点击订单—>客户 点击新建 创建客户1&#xff0c;及其他客户相关信息&#xff0c;点…

Logo语言的在线课程学习

Logo语言在线课程学习的探索 引言 在信息技术快速发展的今天&#xff0c;编程已经成为一门重要的技能。尤其随着人工智能、数据分析和互联网技术的普及&#xff0c;各种编程语言层出不穷&#xff0c;其中Logo语言以其独特的教育意义和学习优势&#xff0c;逐渐受到学校和教育…

情感语音的“开源先锋”!网易开源

语音合成技术近年来取得了显著进步&#xff0c;特别是在语音克隆、语音助手、配音服务和有声读物等领域。然而&#xff0c;如何让合成的语音更具情感&#xff0c;更贴近人类的真实表达&#xff0c;一直是这一领域的重要研究方向。今天&#xff0c;我们将为大家介绍一款由网易有…

摄像头模块对焦方式的类型

摄像头模块的对焦方式直接影响成像清晰度和使用场景适应性&#xff0c;不同技术各有其优缺点。以下是常见对焦方式及其原理、特点和应用场景的详细说明&#xff1a; ‌1. 固定对焦&#xff08;Fixed Focus&#xff09;‌ ‌原理‌&#xff1a;镜头固定在特定距离&#xff08;…

使用Vue、Nodejs以及websocket搭建一个简易聊天室

简易聊天室 说在前面效果展示websocketwebsocket的由来websocket的特点 vue前端静态结构效果代码 点击切换用户以及该用户高亮实现思路效果展示 发送消息功能效果展示 连接服务端 Nodejs服务器端实现步骤代码 说在前面 在学习计算机网络的时候&#xff0c;看到了websocket这个…

【免费】2005-2019年各地级市绿色专利申请量数据

2005-2019年各地级市绿色专利申请量数据 1、时间2005-2019年 2、来源&#xff1a;国家知识产权局 3、指标&#xff1a;省份、城市、年份、绿色发明专利申请量、绿色实用新型专利申请量 4、范围&#xff1a;360地级市 5、指标解释&#xff1a;绿色专利是指涉及环保、新能源…

架构师面试(二十六):系统拆分

问题 今天我们聊电商系统实际业务场景的问题&#xff0c;考查对业务系统问题的分析能力、解决问题的能力和对系统长期发展的整体规划能力。 一电商平台在早期阶段业务发展迅速&#xff0c;DAU在 10W&#xff1b;整个电商系统按水平分层架构进行设计&#xff0c;包括【入口网关…

2. Qt界面文件原理

本节主要介绍ui文件如何与窗口关联&#xff0c;并通过隐式连接方式显示对话框 本文部分ppt、视频截图原链接&#xff1a;[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1 UI文件如何与窗口关联 1.1 mainwindow.cpp的头文件ui_mainwindow.h 根据编译原理的基本规…

雅思大作文写作——词伙、简单句、并列句的使用

词伙是一些可以表达我们常用观点的单词组合,这个组合可能不只是2-3个单词,也可能是很多单词组成的一个短句。 一、词伙使用 1. 不要中译英 2. 重视词伙,而非单词 如何替换表达 1. 如果要替换的是一个名词,如students,则有下面的一些方法: A. 使用替换词或者词组:y…

⭐算法OJ⭐滑动窗口最大值【双端队列(deque)】Sliding Window Maximum

文章目录 双端队列(deque)详解基本特性常用操作1. 构造和初始化2. 元素访问3. 修改操作4. 容量操作 性能特点时间复杂度&#xff1a;空间复杂度&#xff1a; 滑动窗口最大值题目描述方法思路解决代码 双端队列(deque)详解 双端队列(deque&#xff0c;全称double-ended queue)是…

电机的了解到调试全方面讲解

一、什么是电机 电机是一种将电能转换为机械能的装置,通常由定子、转子和电磁场组成。 当电流通过电机的绕组时,产生的磁场会与电机中的磁场相互作用,从而使电机产生旋转运动。电机广泛应用于各种机械设备和工业生产中,是现代社会不可或缺的重要设备之一。 常见的电机种…

分布式微服务系统架构第97集:JVM底层原理

加群联系作者vx&#xff1a;xiaoda0423 仓库地址&#xff1a;https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分&#xff1a; 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 JDK 1.8 同 JDK 1.7 比&…

制定大运维管理体系的标准、流程、机制、规范

规划并制定大运维管理体系的标准、流程、机制、规范&#xff0c;对于确保平台的可用性和稳定性至关重要。这一过程涉及从顶层设计到具体执行的全面考量&#xff0c;需要综合考虑业务需求、技术架构、团队能力等多方面因素。以下是一个基本框架&#xff0c;用于指导如何构建有效…

TruPlasma RF 3006 软件TRUMPF HUETTINGER TRUPLASMA RF 3006 调试监控软件

TruPlasma RF 3006 软件TRUMPF HUETTINGER TRUPLASMA RF 3006 调试监控软件

第16届蓝桥杯单片机模拟试题Ⅱ

试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //ds1302.c extern unsigned char time[3]; void w_ds1302(); void r_ds1302(); //iic.c float v_adc(unsigned char addr); //sys.c extern float light_v; extern float rb2_v; exte…

清华《数据挖掘算法与应用》FP-Growth算法

【例 8.7】实现FP 树算法,并对模拟数据集 simpDat挖掘频繁项集,最小支持度为2,绘制 FP树并输出频繁项集。 运行结果&#xff1a; 声明&#xff1a;著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 # -*- coding: utf-8 -*- ""&q…

npm 项目命名规则

以下是 npm 项目命名规则的详细说明&#xff1a; 一、核心命名规则 必须使用小写字母 名称中不能包含大写字母。原因&#xff1a; 跨平台兼容性&#xff08;如 Linux 区分大小写&#xff0c;而 Windows 不区分&#xff09;。避免命令行和 URL 中的大小写冲突&#xff08;例如包…

Ubertool 的详细介绍、安装指南及使用说明

Ubertool&#xff1a;多协议网络分析与调试平台 一、Ubertool 简介 Ubertool 是一款开源的 多协议网络分析工具&#xff0c;专为物联网&#xff08;IoT&#xff09;、嵌入式系统和工业自动化领域设计。它支持蓝牙、Wi-Fi、LoRa、CAN总线等多种通信协议的实时监控、数据包捕获…

AI重构农业:从“面朝黄土“到“数字原野“的产业跃迁—读中共中央 国务院印发《加快建设农业强国规划(2024-2035年)》

在东北黑土地的万亩良田上&#xff0c;无人机编队正在执行精准施肥作业&#xff1b;在山东寿光的智慧大棚里&#xff0c;传感器网络实时调控着番茄生长的微环境&#xff1b;在云南的咖啡种植园中&#xff0c;区块链溯源系统记录着每粒咖啡豆的旅程。这场静默的农业革命&#xf…