当前位置: 首页 > 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> 的全部功能。

http://www.lryc.cn/news/195170.html

相关文章:

  • 8、docker 安装 nginx
  • 关于Skywalking Agent customize-enhance-trace对应用复杂参数类型取值
  • 手机路径、Windows路径知识及delphiXE跨设备APP自动下载和升级
  • GitLab 502问题解决方案
  • selenium打开火狐浏览器
  • 多标签分类论文笔记 | ML-Decoder: Scalable and Versatile Classification Head
  • 修改http_charfinder.py使能在python311环境中运行
  • 蓝桥杯(跳跃 C++)
  • 08 | Jackson 注解在实体里面如何应用?常见的死循环问题如何解决?
  • JavaScript—获取当前时间 并转化为yyyy-MM-dd hh:mm:ss格式
  • OpenHarmony创新赛丨报名倒计时,超强秘籍带你直通大奖!
  • Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池
  • 微信小程序/vue3/uview-plus form兜底校验
  • Photoshop 2024正式发布!内置最新PS AI,创意填充等功能无限制使用!
  • 芯片学习记录TLP184
  • C++ 重载运算符和重载函数
  • Linux:mongodb数据库基础操作(3.4版本)
  • nginx实现灰度上线(InsCode AI 创作助手)
  • 记:apifox 返回 invalid header token 的问题排查思路
  • 【00】神经网络之初始化参数
  • 代码随想录Day20 回溯算法 LeetCode77 组合问题
  • 免费获取天气预报的API接口(Json格式)
  • 安卓程序执行入口
  • 消息队列(中间件)
  • Java|学习|异常
  • nextjs项目修改启动端口号,以及开发启动后自动打开浏览器
  • 微服务架构 | 超时管理
  • Qt 样式表大全整理
  • k8s-10 cni 网络
  • IDEA中.gitignore配置不生效的解决方案