MyBatis 自定义映射 ResultMap:字段与属性的映射详解
在 MyBatis 框架中,ResultMap是一个非常强大的功能,它允许我们自定义SQL查询结果与Java对象之间的映射关系。特别是在数据库字段名和Java对象属性名不一致时,ResultMap能够帮助我们精确地映射数据。
ResultMap 的基本使用
若字段名和实体类中的属性名不一致,则可以通过resultMap设置自定义映射,即使字段名和属性名一致的属性也要映射,也就是全部属性都要列出来
ResultMap 通过在XML映射文件中定义,可以指定一个唯一的 id
,以及一个 type
属性来指定要映射的Java类型。在ResultMap内部,我们可以使用 <id>
和 <result>
标签来分别映射主键字段和普通字段。
xml
<resultMap id="empResultMap" type="Emp"> <id property="eid" column="eid"/> <result property="empName" column="emp_name"/> <result property="age" column="age"/> <result property="sex" column="sex"/> <result property="email" column="email"/>
</resultMap> <select id="getAllEmp" resultMap="empResultMap"> SELECT * FROM t_emp
</select>
在这个例子中,empResultMap定义了如何将 t_emp 表中的字段映射到 Emp 类的属性上。
- 说明:
resultMap
:设置自定义映射- 属性:
id
:表示自定义映射的唯一标识,不能重复type
:查询的数据要映射的实体类的类型
- 子标签:
id
:设置主键的映射关系result
:设置普通字段的映射关系- 子标签属性:
property
:设置映射关系中实体类中的属性名column
:设置映射关系中表中的字段名
- 属性:
处理字段名和属性名不一致的情况
若字段名和实体类中的属性名不一致,但是字段名符合数据库的规则(使用_),实体类中的属性名符合Java的规则(使用驼峰)。除了使用ResultMap,还有其他两种常见方法处理字段名和实体类中的属性的映射关系:
使用字段别名
在SQL查询中,我们可以为字段指定别名,使其与Java对象的属性名保持一致。这样,MyBatis在映射时就可以自动找到对应的属性。
xml
<select id="getAllEmp" resultType="Emp"> SELECT eid, emp_name AS empName, age, sex, email FROM t_emp
</select>
全局配置自动映射
MyBatis允许我们设置一个全局配置,使得在查询时自动将下划线分隔的字段名转换为驼峰命名的属性名。这通过 mapUnderscoreToCamelCase
设置项实现。
在MyBatis的核心配置文件中:
xml
<settings> <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
在Spring Boot的 application.yml
或 application.properties
配置文件中:
yml
mybatis-plus: configuration: map-underscore-to-camel-case: true
注意:在使用MyBatis-Plus时,该设置项通常已经默认启用。
为什么要使用ResultMap
虽然上述两种方法都能处理字段名和属性名不一致的问题,但ResultMap提供了更大的灵活性和控制力。特别是当数据库表结构复杂,或者需要关联多个表查询时,ResultMap能够帮助我们精确地控制数据的映射关系。
此外,ResultMap还支持关联映射(association)和集合映射(collection),可以处理更复杂的查询结果,如一对多、多对一等关系。
总之,ResultMap 是 MyBatis 中一个非常强大且实用的功能,它允许我们灵活地定义SQL查询结果与Java对象之间的映射关系,帮助我们更轻松地处理数据。
相关文章:
MyBatis 自定义映射 ResultMap:字段与属性的映射详解
在 MyBatis 框架中,ResultMap是一个非常强大的功能,它允许我们自定义SQL查询结果与Java对象之间的映射关系。特别是在数据库字段名和Java对象属性名不一致时,ResultMap能够帮助我们精确地映射数据。 ResultMap 的基本使用 若字段名和实体类…...

找单身狗2
找单身狗2 之前遇到类似的题目的思路: 首先写出这些数的二进制形式: 核心原理 接下来的问题是怎么把5和6分开来? 这里是最后一位进行比较,按位异或是相同为0,相异为1,最后一位从上图看出是1,说…...

element-ui将组件默认语言改为中文
在main.js中加入以下代码即可 // 引入 Element Plus 及其样式 import ElementPlus from element-plus import element-plus/dist/index.css// 引入中文语言包 import zhCn from element-plus/es/locale/lang/zh-cn// 使用 Element Plus 并设置语言为中文 app.use(ElementPlus,…...
SuperMap iClient3D 11i(2023) SP1 for Cesium 调整
SuperMap iClient3D 11i(2023) SP1 for Cesium 最新版本 下载地址 SuperMap技术资源中心|为您提供全面的在线技术服务 每一次版本升级,都要对代码进行修改调整,都是为了解决功能需求。当然,也为产品做了小白鼠测试,发现bug,优化功能。 由于前端开发使用的是dojo框架,类…...

保姆级小白就业人工智能(视频+源码+笔记)
🍅我是小宋, Java学习AI,记录学习之旅。关注我,带你轻松过面试。提升简历亮点(14个demo) 🍅我的java面试合集已有12W 浏览量。🌏号:tutou123com。拉你进专属群。 ⭐⭐你的…...
微信小程序,分享和反馈功能
<button type"primary" open-type"share">分享</button> <button type"primary" open-type"feedback">反馈</button>...

数据安全未来之路,天空卫士荣誉领榜《中国数据安全50强(2024)》
《中国数据安全50强(2024)》 数世咨询首份《中国数据安全50强(2024)》报告发布。天空卫士凭借其卓越的技术创新、市场领导力、业务收入能力和企业发展能力,在众多竞争者中脱颖而出,荣登50强榜单࿰…...

CAD二次开发(10)-单行文字的添加+图形修改
1. 单行文字的添加 第一步: 首先在CAD中新增中文样式 输入ST命令: 第二步:代码开发 /// <summary>/// 添加文本信息/// </summary>[CommandMethod("AddText")]public void AddText(){var doc Application.DocumentM…...

【SpringBoot集成Spring Security】
一、前言 Spring Security 和 Apache Shiro 都是安全框架,为Java应用程序提供身份认证和授权。 二者区别 Spring Security:重量级安全框架Apache Shiro:轻量级安全框架 关于shiro的权限认证与授权可参考小编的另外一篇文章 : …...

docker部署dm数据库
官方文档参考 官网地址:https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html 下载镜像地址 docker部署 1、加载镜像 docker load -i dm8_20240613_x86_rh6_64_rq_ent_8.1.3.140_pack5.tar使用docker images,查看镜像和镜像标签…...
Shell中执行.sh文件的常见方式
在Shell中执行.sh文件有几种常见的方式,具体取决于你希望如何执行这个脚本文件。以下是一些常用的方法: 直接运行: ./script.sh 这是最简单的方式。在当前Shell会话中执行脚本文件。 使用bash命令执行: bash script.sh 明确使用b…...

超分辨率重建——2022冠军RLFN网络推理测试(详细图文教程)
💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…...

国际荐酒师香港协会受邀参加2024年美国独立日庆祝活动
国际荐酒师(香港)协会受邀参加2024年美国独立日庆祝活动促进世界酒中国菜的全球化发展 2024年6月18日,国际荐酒师(香港)协会大中华区驻广州办事处荣幸地接受了美国驻广州总领事馆 Nicholas Burns大使和Lisa Heller总领…...

(微服务实战)聚合支付系统商户线上聚合收银台接口设计
1 概述 聚合支付收款分为线上和线下业务场景,本文中的商户收银台接口设计主要是指线上业务场景,线下业务场景聚合收款方式后续会进行单独设计和分析。 主流的线上支付渠道有微信支付,支付宝支付,云闪付。这三种支付渠道都有各自…...

【漏洞复现】CRMEB开源电商系统 /api/products SQL注入漏洞(CVE-2024-36837)
0x01 产品简介 CRMEB开源电商系统是一款由西安众邦网络科技有限公司打造的全栈式电商解决方案,旨在为开发者和商家提供高性能、智能化的电商平台服务。该系统集成了CRM(客户关系管理)、ERP(企业资源规划)和EB(电子商务)的功能,通过深度结合这些功能&…...

摄像头图像矫正的表格生成方法
1.设置单元格高宽 点击表格左上角 的 小三角 列宽: HOME -> Rows and Columns -> Column Width 5 CM 行高: HOME -> Rows and Columns -> Row Height 5 CM 2.设置 条件格式 HOME -> Conditional Formatting-> Manager Rules 点击 左上方 New Rule…...
【Arc gis】Arc gis出现ERROR 999999问题的解决办法
地址:ArcGIS中ERROR 999999报错Configuration RasterCommander ImageServer can not be started解决_投影栅格失败error999999-CSDN博客...
优化 Flutter 应用开发:探索 ViewModel 的威力
介绍 1.1 什么是 ViewModel? ViewModel,顾名思义,就是视图的模型。在 Flutter 中,ViewModel 是一种用于管理视图状态和业务逻辑的重要概念。它承载了应用程序的核心功能,像是一个精心设计的控制中心,负责…...

Android开发系列(四)Jetpack Compose之Button
在Jetpack Compose中,Button是一个常用的用户界面组件,用于执行某些操作或触发某些事件。Button控件是可触摸的,并且通常会显示一个文本或图标来表示其功能。 要在Jetpack Compose中创建一个Button,可以使用Button()函数…...

Java17 --- RabbitMQ之插件使用
目录 一、Federation插件 1.1、运行两个rabbitmq实例 1.2、启用插件 1.3、在下游端点添加上游端点 1.4、创建策略 1.6、测试 二、联邦队列 2.1、创建策略 2.2、创建交换机与队列 2.2.1、创建52000的队列与交换机 2.2.2、创建62000的队列 三、Shovel 3.1、启…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...