网站首页 > 技术文章 正文
注解
@TableName
基本概念
表名注解,标识实体类对应的表。
作用域
实体类上
属性
value
表名
resultMap
xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定)
autoResultMap
是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入),默认值是false。当设置为true时,MyBatis-Plus会自动为该实体类生成ResultMap配置。
主要用途
1、类型处理器自动应用
当实体字段使用了自定义TypeHandler时,autoResultMap=true确保类型转换正确执行:
2、复杂类型映射
处理非基本类型的字段映射:
3、字段名映射处理
当数据库字段名与实体属性名不一致时
excludeProperty
需要排除的属性名
注意事项
在使用MyBatis Plus框架时,若实体类未添加@TableName注解,默认的表名规则如下:
1、默认表名生成规则
MyBatis Plus会将实体类的类名直接转换为小写形式作为数据库表名,不会自动进行驼峰转下划线的转换。
示例:
实体类 User 表名 user
实体类 UserInfo 表名 userinfo(而非 user_info)
2、如何修改默认行为
若需启用驼峰转下划线的表名映射,可通过以下配置实现
在 application.yml 中配置
启用后,实体类 UserInfo 将映射到表 user_info
总结
(1)默认行为:表名 = 实体类名的小写形式(无驼峰转下划线)。
(2)推荐实践:
若数据库表名遵循驼峰转下划线规范,建议全局配置 table-underline: true。
复杂场景(如多前缀、特殊表名)可直接使用 @TableName 注解。
@TableId
基本说明
主键注解
使用位置
实体类主键字段上
属性
value
主键字段名
type
指定主键类型,默认值:IdType.NONE
IdType
@TableField
基本说明
字段注解(非主键)
属性
value
数据库字段名
exist
是否为数据库表字段,默认值为true,表示存在。
condition
字段 where 实体查询比较条件,默认 `=` 等值。
whereStrategy
字段验证策略之 where: 表示该字段在拼接where条件时的策略。默认值为FieldStrategy.DEFAULT
IGNORED:
直接拼接 column=#{columnProperty}
NOT_NULL:
<if test="columnProperty != null">column=#{columnProperty}</if>
NOT_EMPTY:
<if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
fill
字段自动填充策略
select
是否进行 select 查询,默认值为true
numericScale
指定小数点后保留的位数,只生效与 mp 自动注入的 method,建议配合TableName#autoResultMap()一起使用。
insertStrategy
字段验证策略之 insert: 当insert操作时,该字段拼接insert语句时的策略。
updateStrategy
当更新操作时,该字段拼接set语句时的策略
typeHandler
类型处理器
@TableLogic
基本概念
用于标记一个字段作为逻辑删除字段。@TableLogic 注解可以应用在实体类的字段上,用于指定一个字段作为逻辑删除字段。被标记的字段需要满足以下条件:
1、字段的类型必须为整数类型(如 int、Integer、long、Long 等),也可以为boolean类型、字符类型。
2、逻辑删除字段的默认值代表未删除状态。
3、删除状态的值需要设置对应的删除标识值。
作用域
使用在字段上。
属性
value
默认逻辑未删除值(该值可无、会自动获取全局配置)
delval
默认逻辑删除值(该值可无、会自动获取全局配置)
示例
我们有一个名为 User 的实体类,并希望实现逻辑删除功能,可以这样使用 @TableLogic 注解。
在上述示例中,我们在 deleted 字段上添加了 @TableLogic 注解,表示该字段将作为逻辑删除字段。默认情况下该字段的值为 0 表示未删除状态,当需要删除一条记录时,可以将 deleted 字段的值设置为对应的删除标识值,例如 1。当使用 MyBatis Plus 提供的删除方法或通过条件构造器进行删除操作时,MyBatis Plus 会自动根据逻辑删除字段的值生成相应的删除条件,从而实现逻辑删除的功能。
总结
@TableLogic 注解是 MyBatis Plus 提供的用于实现逻辑删除的注解,用于指定一个字段作为逻辑删除字段,并配置对应的删除标识值。使用该注解可以方便地实现逻辑删除功能,避免直接从数据库中物理删除记录。使用@TableLogic注解可以实现数据的逻辑删除,有助于维护数据的完整性和可追溯性,同时避免了物理删除操作可能带来的数据丢失风险。开发者无需手动编写逻辑删除的代码,MyBatis-Plus 会自动处理这一过程。
@Version
基本说明
@Version 是 MyBatis-Plus 提供的乐观锁注解,用于实现数据库层面的并发控制,防止数据并发修改时的冲突。
作用域
用在字段上
核心原理
基本用法
1、实体类配置
2、表结构
配置乐观锁插件
实际使用示例
1、插入操作
2、更新操作
并发场景演示
支持的数据类型
注意事项
1、只对 updateById() 和 update() 方法生效
2、version 字段不要手动修改
3、批量更新不支持乐观锁
优点
1、避免数据并发修改冲突
2、性能好,无需加锁
3、实现简单,只需一个注解
缺点
1、更新失败需要业务层处理重试逻辑
2、只适用于低并发场景
3、高并发时失败率较高
总结
通过 @Version 注解,MyBatis-Plus 为你提供了简单易用的乐观锁解决方案,有效防止数据并发修改问题。
@InterceptorIgnore
基本说明
@InterceptorIgnore 是 MyBatis Plus 中的一个注解,通常用于在特定方法或类上标记,表示在执行这些方法或类时,忽略某些拦截器的作用。MyBatis Plus 中的拦截器机制可以在执行 SQL 语句之前或之后执行一些逻辑,比如自动填充、性能分析等。通过 @InterceptorIgnore 注解,你可以在特定的操作上关闭这些拦截器的执行。
作用范围
用在类或者方法上。
使用场景
1、忽略自动填充功能
如果你在某个方法中不希望触发自动填充(例如,插入操作时不自动填充创建时间、更新时间等字段),你可以使用该注解。
2、性能分析的忽略
在某些情况下,你可能希望跳过性能分析拦截器的分析,不记录 SQL 执行的性能数据。
3、分页拦截器的忽略
在某些情况下,可能希望跳过分页拦截器,直接执行完整的查询。
作用
@InterceptorIgnore 注解默认会禁用 MyBatis Plus 默认拦截器(如分页、自动填充等)的作用。它可以用在方法上或类上,具体方式如下:
方法级别:只在该方法中忽略拦截器的执行。
类级别:在该类中的所有方法中忽略拦截器的执行。
使用方法
1、引入依赖
2、方法或类上使用 @InterceptorIgnore 注解
在方法上使用:表示只对该方法忽略拦截器。
在类上使用:表示对该类的所有方法都忽略拦截器。
示例 1:方法上使用 @InterceptorIgnore
在上述代码中,addUser 方法上加了 @InterceptorIgnore 注解,这意味着在执行 addUser 方法时,MyBatis Plus 的拦截器(例如自动填充)将被忽略。
示例 2:类上使用 @InterceptorIgnore
在上述代码中,@InterceptorIgnore 被应用到 UserServiceImpl 类上,这意味着该类的所有方法都会忽略 MyBatis Plus 的拦截器。
属性
tenantLine
行级租户
dynamicTableName
动态表名
blockAttack
攻击 SQL 阻断解析器,防止全表更新与删除
illegalSql
dataPermission
sharding
others
注意事项
1、与其他注解配合使用
@InterceptorIgnore 可以与其他 MyBatis Plus 功能结合使用,例如自动填充功能、性能分析功能、分页拦截器等,来灵活控制是否执行特定功能。
2、影响范围
如果你使用的是类级别的注解,那么该类中的所有方法都将忽略拦截器。如果只想控制某个特定方法,应该将注解应用到方法上。
3、可能的副作用
在某些情况下,忽略拦截器可能会导致预期之外的行为(例如,自动填充字段没有被填充,分页查询没有应用分页限制等)。在使用时需要谨慎,确保你了解这些功能在某些方法中被禁用后的影响。
总结
@InterceptorIgnore 是MyBatis Plus 提供的一个注解,用来在某些场景下禁用拦截器的作用。你可以选择将它应用到方法级别或者类级别,来灵活控制 MyBatis Plus 的拦截器是否在特定操作中生效。它通常用于禁用自动填充、分页、性能分析等功能。
@KeySequence
基本概念
@KeySequence 注解用于生成数据库主键的策略。它可以与 @TableId 注解一起使用,用于指定主键字段的生成规则。当使用数据库自增主键不适用或者需要使用其他主键生成策略时,可以使用 @KeySequence 注解来指定主键生成规则。它通过获取指定序列(Sequence)或表(Table)的下一个主键值,并将其作为主键填入数据库表中。专门用于支持 Oracle、PostgreSQL 等数据库的序列(Sequence)主键生成策略。
源码
核心作用
为实体类指定数据库序列名称,实现主键自动生成:
使用位置
使用在类上
属性
value
序列名
dbType
数据库类型
基本用法
实体类配置:
配置序列生成器
注意事项
1、必须配置 IdType.INPUT
2、序列必须存在
@MybatisPlusTest
基本概念
@MybatisPlusTest 是 MyBatis-Plus 提供的一个用于简化单元测试的注解,通常用于测试 MyBatis-Plus 集成的 DAO 层。它的作用是帮助开发者更方便地进行与 MyBatis-Plus 相关的数据库操作测试,特别是在进行集成测试时,减少配置的复杂度。
说明
这个注解是从
mybatis-plus-boot-starter-test的3.5.3.1版本才有的。
核心作用
创建一个轻量级的测试环境,只加载 MyBatis-Plus 相关的配置和 Bean:
基本用法
自动配置组件
使用 @MybatisPlusTest 会自动配置:
1、DataSource:数据源
2、SqlSessionFactory:MyBatis 会话工厂
3、SqlSessionTemplate:MyBatis 模板
4、@Mapper 接口:所有 Mapper 接口
5、MyBatis-Plus 插件:分页、乐观锁等插件
与其他测试注解对比
优势
1、轻量级
只加载必要组件,测试启动快
2、隔离性
每个测试方法独立,互不影响
3、便捷性
自动配置数据库和 MyBatis-Plus
4、真实性
使用真实的数据库操作,而非 Mock
总结
@MybatisPlusTest 为 MyBatis-Plus 项目提供了专业的数据层测试解决方案。
@EnumValue
基本概念
@EnumValue 注解的作用是标记枚举类型中的某个字段值,该字段值会用于数据库存储和查询的映射。当你在实体类中使用枚举类型字段时,MyBatis-Plus 默认会将枚举类型对象存储为字符串或数字,但你可以通过 @EnumValue 来指定具体的字段值映射方式,通常用于数据库与枚举之间的转换。
使用方式
假设我们有一个枚举类 Gender,其值可以是 MALE 和 FEMALE,我们希望将它们分别存储为 1 和 0(而不是默认的字符串)
@EnumValue 注解标记了 value 字段,它表示数据库中存储的实际值。
这个 value 字段是 Gender 枚举的“存储值”,在数据库中会被映射为 1(MALE)和 0(FEMALE)。
数据库映射
在数据库表中,我们会将 Gender 枚举的值存储为整数 1 或 0。例如:
@EnumValue 与 EnumTypeHandler 配合使用
MyBatis-Plus 会自动根据 @EnumValue 注解来进行枚举值的数据库存储与映射。因此,通常不需要额外指定 EnumTypeHandler。如果没有使用 @EnumValue,你还可以通过 EnumTypeHandler 来手动指定枚举的映射方式。
总结
@EnumValue 注解的作用是指定枚举类中用于映射数据库的字段。它帮助 MyBatis-Plus 将枚举类型与数据库字段之间的转换工作自动化。通过在枚举类中使用 @EnumValue 注解,你可以控制枚举值在数据库中的存储方式(如数字或字符串)。这个注解大大简化了枚举与数据库的映射工作,使得代码更加简洁、易于维护。
@OrderBy
基本概念
@OrderBy 是 MyBatis-Plus 提供的排序注解,用于在实体类字段上指定默认的排序规则,在查询时自动添加 ORDER BY 子句。
源码
核心作用
为实体类字段设置默认排序规则,在执行查询时自动生成排序条件
基本用法
1、单字段排序
2、多字段排序
猜你喜欢
- 2025-07-27 MyBatis批量插入的3种方案对比,速度差10倍!
- 2025-07-27 [JPA教程]02.认识JPA的注解.md(jpa的@query注解)
- 2025-07-27 MyBatis配置详解:从入门到精通(mybatis配置文件详解)
- 2025-07-27 Mybatis Plus框架学习指南-第三节内容
- 2025-07-27 什么是实时数据同步?纯干货解读!(什么是实时数据传输)
- 2024-10-27 一文看懂mycat配置--数据库的读写分离、分表分库
- 2024-10-27 基于Percona XtraBackup 实现全备&增量备份与恢复
- 2024-10-27 Java EE核心框架实战:如何使用MyBatis实现CURD-2种数据库
- 2024-10-27 mysql如何进行累加计算 mysql 变量累加
- 2024-10-27 Springboot集成Mybatis ID生成策略注解 @GeneratedValue
你 发表评论:
欢迎- 633℃几个Oracle空值处理函数 oracle处理null值的函数
- 626℃Oracle分析函数之Lag和Lead()使用
- 614℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 608℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 606℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 599℃【数据统计分析】详解Oracle分组函数之CUBE
- 588℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 574℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- CVE-2025-30762|Oracle(java oracle)
- 低代码可能铲不掉“屎山”,但能让这个它更有「型」
- 科技大事件:新苹果手表可通过击掌或握手来传递信息
- 你的百万级上下文窗口大模型,可能并没有你想象中那么强
- DApp 开发中的安全测试(软件测试过程中安全测试的具体应用场景和测试思路)
- 盘点Java中最没用的知识⑧:这3个过时套路,你还在代码里硬撑?
- 机房硬件设备及Oracle数据库软件维护服务项目竞争性磋商公告
- 微软与甲骨文扩大合作关系,推出Oracle Database@Azure
- JPA实体类注解,看这篇就全会了(java实体类注解)
- Java反射机制最全详解(图文全面总结)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)