当前位置: 首页 > news >正文

MyBatis基础之自动映射、映射类型、文件注解双配置

在这里插入图片描述

文章目录

    • 自动映射原理
    • jdbcType
    • 同时启用配置文件和注解两种配置方式

自动映射原理

在 MyBatis 的配置文件settings 元素部分)中,有一个 autoMappingBehavior 配置,其默认值为 PARTIAL ,表示 MyBatis 会自动映射(简单的,没有嵌套关系的)结果集。

有三种自动映射等级:

NONE - 禁用自动映射。仅对手动映射的属性进行映射。
PARTIAL - 对除在内部定义了嵌套结果映射(也就是连接的属性)以外的属性进行映射
FULL - 自动映射所有属性。`

"PARTIAL"也 表示设置自动映射的行为为部分匹配模式。具体来说,当实体类中存在与查询结果列相同的属性时,MyBatis 会将它们进行自动映射,而对于没有匹配的列,则会忽略它们。这样可以避免在实体类中定义过多无用的属性。

需要注意的是,如果设置了全局的自动映射行为(通过 标签中的 autoMappingBehavior 属性),则该项设置会被覆盖。此外,还可以在映射语句(Mapper)级别或者方法级别上进行自定义的自动映射行为设置,其他可以参考官方文档Auto-Mapping。

<configuration><properties>....</properties><settings>....<setting name="autoMappingBehavior" value="PARTIAL"/>....</settings><typeAliases>....</typeAliases> ....</configuration>

如果你的类的属性名与表的字段名一致,那么 MyBatis 会自动将结果集的一行封装成一个 JavaBean 。

一般而言,数据库表和字段的命名风格是以下划线为分隔符,而 Java 中命名风格是驼峰命风格。

如果,PO 类的属性名和 Table 的列名仅仅是命名风格的不同,那么此时你可以使用 mapUnderscoreToCamelCase 进行控制,以便于自动转换或不转换。

<configuration><properties>....</properties><settings>....<setting name="mapUnderscoreToCamelCase" value="false"/>....</settings><typeAliases>....</typeAliases> ....</configuration>

jdbcType

将 ResultSet 数据映射成对象时,会涉及到两种数据类型:数据库类型(varchar) 和 Java 类型(String)。MyBatis 使用 类型转换器(typeHandler)来处理两种类型数据的转换问题。

[!attention]注意,
不同的数据库对于同一个数据类型的概念可能会使用不同的『单词』。
例如:整型,在 MySQL 中是 INT ,在 Oracle 中是 INTEGER

在 Java 的 JDBC 中,对不同数据库的各种类型的『称呼』进行了统一:JDBC 类型 。例如:

『整型』的 JDBC Type 表示为 INTEGER ,即表示 MySQL 中的 INT ,又表示 Oracle 中的 INTEGER

常见的有:

JDBC TypeMysql TypeJava Type
SMALLINTSMALLINTshort
java.lang.Short
INTEGERINTEGERint
java.lang.Integer
BIGINTBIGINTlong
java.lang.Long
FLOATFLOATfloat
java.lang.Float
DOUBLEDOUBLEdouble
java.lang.Double
DECIMALDECIMALjava.math.BigDecimal
CHARCHARjava.lang.String
VARCHARVARCHARjava.lang.String
DATEDATEjava.util.Date
TIMETIMEjava.util.Date
TIMESTAMPTIMESTAMPjava.util.Date

注意:对于 java.lang.Datejava.sql.Date ,是两种不同的类型。在写 JavaBean 一定要确认你所使用的是哪个 Date 类型(一般都是使用 java.lang.Date

同时启用配置文件和注解两种配置方式

虽然通过 mapper.xml 配置文件和注解都可以拿到 mapper 对象,进而操作数据库,不过,有意思地是,Mybatis 居然支持同时使用 mapper.xml 和注解

虽然这个特性看起来有些多余,但是实际上它极具价值,因为,注解配置虽然万般皆好,唯独有一个功能它实现不了,在这个功能上注解是取代不了 mapper.xml 配置文件的(不知道这个问题在 MyBatis 的未来的发展中会不会解决掉)。所以,MyBatis 允许两种配置方式同时使用,我们就可以同时「享受」注解和配置文件的全部优点的同时,又避免各自的缺点。

同时使用两种配置方式本质上是让 mapper.xml 和注解两者进行分工,你要做的操作和工作分配如下:

  1. “退回”到早期 mapper.xml 的使用方式:在核心配置文件中指定 mapper.xml 配置文件的路径名(而不是指定接口所在)
  2. 在 mapper.xml 配置文件中只配置 “<resultMap>” 指定映射规则,不配置 SQL 语句。SQL 语句在接口中通过 @Select 等注解指定;
  3. 在注解中使用 “@ResultMap” 注解引用 mapper.xml 配置文件中的映射规则。

[!attention] 注意
映射文件中的映射规则 “<resultMap>” 可以有多个,他们之间通过 id 来进行区分。

另外,注解是哪一点功能实现不了,反而不如 mapper.xml 配置文件,我们在复杂映射关系之后讲解。其实就是 @Results 注解没有 100% 实现 <resultMap> 的全部功能。

相关文章:

MyBatis基础之自动映射、映射类型、文件注解双配置

文章目录 自动映射原理jdbcType同时启用配置文件和注解两种配置方式 自动映射原理 在 MyBatis 的配置文件&#xff08;settings 元素部分&#xff09;中&#xff0c;有一个 autoMappingBehavior 配置&#xff0c;其默认值为 PARTIAL &#xff0c;表示 MyBatis 会自动映射&…...

8、docker 安装 nginx

1、下载镜像 docker pull nginx 2、本机创建目录 1&#xff09;创建nginx挂载目录 mkdir /usr/local/nginx 2&#xff09;进入nginx目录 cd /usr/local/nginx 3&#xff09;创建 www和logs目录 mkdir -p www logs 3、创建nginx容器 此容器用于复制配置文件&#xff0c;复…...

关于Skywalking Agent customize-enhance-trace对应用复杂参数类型取值

对于Skywalking Agent customize-enhance-trace 大家应该不陌生了&#xff0c;主要支持以非入侵的方式按用户自定义的Span跟踪对应的应用方法&#xff0c;并获取数据。 参考https://skywalking.apache.org/docs/skywalking-java/v9.0.0/en/setup/service-agent/java-agent/cust…...

手机路径、Windows路径知识及delphiXE跨设备APP自动下载和升级

手机路径、Windows路径知识 及delphiXE跨设备APP自动下载和升级 一、APP安装程序文件版本和权限信息 1、运行时动态调用Android apk的AndroidManifest.xml获取versionName 2、运行时动态调用IOS ipa的info.plist获取CFBundleVersion &#xff08;和entitlements&#xff09…...

GitLab 502问题解决方案

由于最近 gitlab 切换到另一台服务器上部署的 gitlab 后&#xff0c;经常出现 502。平时重启 gitlab 后都能解决&#xff0c;今天突然重启多次后都还是 502&#xff08;重启日志是正常的&#xff09;&#xff0c;遂通过 gitlab-ctl tail 查看日志进行排查。 gitlab-ctl tail通…...

selenium打开火狐浏览器

项目上需求为&#xff1a;甲方OA 系统是IE系统&#xff0c;需要从IE系统点个按钮打开火狐浏览器单点登录跳转到我们的系统 前期解决方案为&#xff1a;打开浏览器就行了&#xff0c;然后就用的是打开本地浏览器&#xff0c;但是由于B/S架构&#xff0c;有别人远程访问我的ip来…...

多标签分类论文笔记 | ML-Decoder: Scalable and Versatile Classification Head

个人论文精读笔记&#xff0c;主要是翻译心得&#xff0c;欢迎旁观&#xff0c;如果有兴趣可以在评论区留言&#xff0c;我们一起探讨。 Paper: https://arxiv.org/pdf/2111.12933.pdf Code: https://github.com/Alibaba-MIIL/ML_Decoder 文章目录 0. 摘要1. 介绍2. 方法2.1 Ba…...

修改http_charfinder.py使能在python311环境中运行

需要修改两个函数&#xff0c;第一个是init函数&#xff0c;修改如下&#xff1a; async def init(loop, address, port): # <1> # app web.Application(looploop) # <2> # app.router.add_route(GET, /, home) # <3> app web.Application(…...

蓝桥杯(跳跃 C++)

思路&#xff1a; 1、根据题目很容易知道可以用深度搜索、广度搜索、动态规划的思想解题。 2、这里利用深度搜素&#xff0c;由题目可知&#xff0c;可以往九个方向走。 3、这里的判断边界就是走到终点。 #include<iostream> using namespace std; int max1 0; int …...

08 | Jackson 注解在实体里面如何应用?常见的死循环问题如何解决?

我们用 Spring Boot 里面默认集成的 fasterxml.jackson 加以说明&#xff0c;这看似和 JPA 没什么关系&#xff0c;但是一旦我们和 Entity 一起使用的时候&#xff0c;就会遇到一些问题&#xff0c;特别是新手同学&#xff0c;我们这一课时详细介绍一下用法。先来跟着我了解一下…...

JavaScript—获取当前时间 并转化为yyyy-MM-dd hh:mm:ss格式

JavaScript—获取当前时间 并转化为yyyy-MM-dd hh:mm:ss格式 每次项目都需要用到时间戳格式,可以封装成一个方法 下次直接CV过去 const timestampPadStart=(str)=>{str=String(str);return str.padStart(2,0)...

OpenHarmony创新赛丨报名倒计时,超强秘籍带你直通大奖!

OpenHarmony创新赛报名倒计时开始啦&#xff01; 设于开放原子全球开源大赛下的OpenHarmony创新赛&#xff0c;目前正在如火如荼地进行赛事招募中&#xff01;这次大赛围绕创新应用、商显行业、金融行业三大赛题&#xff0c;邀请来自企业、个人、高校师生等各界群体的优秀开发者…...

Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池

动态创建子进程或子线程的缺点&#xff1a; 1.动态创建进程或线程比较耗时&#xff0c;这将导致较慢的客户响应。 2.动态创建的子进程或子线程通常只用来为一个客户服务&#xff08;除非我们做特殊处理&#xff09;&#xff0c;这将导致系统上产生大量的进程或线程&#xff0c…...

微信小程序/vue3/uview-plus form兜底校验

效果图 代码 <template><u-form :model"form" ref"formRole" :rules"rules"><u-form-item prop"nickname"><u-input v-model"form.nickname" placeholder"姓名" border"none" /&…...

Photoshop 2024正式发布!内置最新PS AI,创意填充等功能无限制使用!

PS正式版目前更新到了2024&#xff0c;版本为25.0。 安装教程 1、下载得到安装包后&#xff0c;先解压。鼠标右键&#xff0c;【解压到当前文件夹】 2、双击 Set-up 开始安装 3、这里可以更改安装位置。如果C盘空间不够大&#xff0c;可以把它安装到C盘以外。更改好后&#x…...

芯片学习记录TLP184

TLP184 芯片介绍 TLP184是一款光耦隔离器&#xff0c;它的主要特点包括&#xff1a;高电压耐受能力、高传输速度、高共模隔离能力、低功耗等。它可以用于工业自动化、通信设备、家用电器等领域的电气隔离应用。由一个光电晶体管组成&#xff0c;光学耦合到两个红外发射二极管…...

C++ 重载运算符和重载函数

前言 C 允许在同一作用域中的某个函数和运算符指定多个定义&#xff0c;分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明&#xff0c;但是它们的参数列表和定义&#xff08;实现&#xff09;不相同。 当您调用一个…...

Linux:mongodb数据库基础操作(3.4版本)

安装 3.*版本和4.*版本安装都是一样的 Linux&#xff1a;mongodb数据库源码包安装&#xff08;4.4.25版本&#xff09;_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/133826626?spm1001.2014.3001.5501 mysql和mongodb对比 登录…...

nginx实现灰度上线(InsCode AI 创作助手)

要基于Nginx实现灰度上线&#xff0c;有以下三种方法&#xff1a; 权重分发&#xff1a;使用Nginx的upstream模块来设置不同服务器的权重。将一部分请求分发给新版本服务器&#xff0c;另一部分请求分发给旧版本服务器。这可以通过以下方式实现&#xff1a; http {upstream bac…...

记:apifox 返回 invalid header token 的问题排查思路

背景&#xff1a; 某接口服务使用 springboot 2.x 开发&#xff0c; RestController 、ReqeustBody 在本地(localhost)调用的时候正常、chrome (.cn域名访问)浏览器访问正常。 换成 apifox (.cn域名访问)、postman (.cn域名访问)调用异常返回&#xff1a;invalid header t…...

C语言回调函数原理与实战应用指南

C语言回调函数深度解析与实践应用1. 函数指针基础1.1 函数指针概念函数指针是指向函数的指针变量&#xff0c;与普通指针变量不同&#xff0c;它指向的是代码区而非数据区。标准定义形式为&#xff1a;返回值类型 (*指针变量名)(参数类型列表);关键特征&#xff1a;指针变量名必…...

TensorRT实战:从模型转换到部署推理的完整指南

1. TensorRT入门&#xff1a;为什么选择它&#xff1f; 如果你正在寻找一种能够让你的深度学习模型在生产环境中飞起来的方法&#xff0c;TensorRT绝对是你的不二之选。简单来说&#xff0c;TensorRT是NVIDIA推出的高性能推理优化器和运行时引擎&#xff0c;专门为NVIDIA GPU设…...

OpenClaw+GLM-4.7-Flash:智能客服机器人搭建指南

OpenClawGLM-4.7-Flash&#xff1a;智能客服机器人搭建指南 1. 为什么选择这个技术组合&#xff1f; 去年夏天&#xff0c;我接手了一个小团队的客服系统改造项目。团队只有5个人&#xff0c;却要处理日均300的客户咨询。传统客服系统要么太贵&#xff0c;要么定制化程度不够…...

VMWare 虚拟机中运行 Android-x86 的完整指南(新手友好版)

1. 为什么要在VMWare里跑Android-x86&#xff1f; 很多朋友可能好奇&#xff0c;明明手机就能跑安卓系统&#xff0c;为什么还要在电脑上折腾虚拟机&#xff1f;其实这个需求在开发者和极客圈里特别常见。我最早接触Android-x86是因为要测试一个APP在不同分辨率设备上的表现&a…...

PyTorch模型的TensorRT优化:原理与实践

PyTorch模型的TensorRT优化&#xff1a;原理与实践 1. 背景与意义 在深度学习模型部署过程中&#xff0c;推理速度是一个关键指标。TensorRT是NVIDIA开发的高性能深度学习推理优化库&#xff0c;它可以显著提高模型的推理速度&#xff0c;降低延迟。本文将深入探讨TensorRT的工…...

如何高效抓取足球数据:SoccerData实战指南

如何高效抓取足球数据&#xff1a;SoccerData实战指南 【免费下载链接】soccerdata ⛏⚽ Scrape soccer data from Club Elo, ESPN, FBref, FiveThirtyEight, Football-Data.co.uk, SoFIFA and WhoScored. 项目地址: https://gitcode.com/gh_mirrors/so/soccerdata 在足…...

OpenClaw三种方式安装:手把手保姆级教程

前置操作 【一】获取API Key 现在很多平台的API Key都有免费额度&#xff0c;阿里云和Kimi的优惠力度大些&#xff0c;大家按需索取。 阿里云百炼 Step01&#xff1a;注册/登录阿里云 Step02&#xff1a;创建并获取API Key 注意&#xff1a;我们要的是API Key&#xff0c;如…...

GLM-OCR性能基准测试报告:对比不同GPU型号上的推理速度与成本

GLM-OCR性能基准测试报告&#xff1a;对比不同GPU型号上的推理速度与成本 最近在做一个文档数字化的项目&#xff0c;需要处理大量扫描件和图片里的文字。选型的时候&#xff0c;自然就盯上了各种OCR模型。GLM-OCR作为国产大模型阵营里的一员&#xff0c;表现一直挺亮眼&#…...

如何永久保存微信聊天记录:3步实现数据自主管理的完整指南

如何永久保存微信聊天记录&#xff1a;3步实现数据自主管理的完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

数据库扩展实战:如何用ShardingCore实现高性能分库分表

数据库扩展实战&#xff1a;如何用ShardingCore实现高性能分库分表 【免费下载链接】sharding-core high performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库读写分离…...