MyBatis-Plus02: 常用注解

一、约定由于配置

Mybatis-plus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

  • 类名驼峰转下划线作为表名
  • 名为 id 的字段作为主键
  • 变量名驼峰转下划线作为表的字段名

若是不符合上述配置,需要用注解。

二、常用注解

MybatisPlus 中比较常用的几个注解如下:

  • @TableName:用来指定表名
  • @TableId:用来指定表中的主键字段信息
  • @TableField:用来指定表中的普通字段信息

2-1、IdType 枚举:

  • AUTO:数据库自增长
  • INPUT:通过 set 方法自行输入
  • ASSIGN_ID:分配 ID,接口 IdentifierGenerator 的方法 nextId 来生成 id,默认实现类为 DefaultIdentifierGenerator 雪花算法(Mybatis-plus的接口)

若是不指定type,默认是ASSIGN_ID,雪花算法

2-2、使用 @TableField 的常见场景:

  • 成员变量名与数据库字段名不一致
  • 成员变量名以 is 开头,且是布尔值
  • 成员变量名与数据库关键字冲突
  • 成员变量不是数据库字段

三、MyBatisPlus 常见配置项


3-1、MyBatisPlus 配置项详解

1. mybatis-plus:

根配置项,所有 MyBatisPlus 的配置都包含在此下。


2. type-aliases-package: com.itheima.mp.domain.po

作用: 指定实体类(POJO)的包路径,用于自动扫描并注册别名。

说明:

  • 在 SQL 映射文件中可以直接使用类名(无需写全限定名),例如:<resultMap> 中引用 User 而不是 com.itheima.mp.domain.po.User
  • 若未配置,则需手动指定完整类名或使用 @Alias 注解。

示例:

bash 复制代码
type-aliases-package: com.itheima.mp.domain.po

含义:扫描 com.itheima.mp.domain.po 包下的所有类,并将其作为别名注册。

type-aliases-package 的作用范围是 整个 MyBatis/MyBatisPlus 映射体系中所有需要引用 Java 类型的地方 ,而不仅限于 resultType

它的核心价值是简化 XML 配置,避免写冗长的全限定类名,提升可读性和维护性。

⚠️注意:

  • 别名默认是类的简单名(首字母大小写均可)

    Useruser 通常都能识别(MyBatis 内部做了兼容),但建议统一使用首字母大写。

  • 若多个包中有同名类,会发生冲突

    例如 com.a.Usercom.b.User,都注册为 User,会导致解析错误。此时应:

    • 使用 @Alias("CustomName") 注解指定唯一别名,或
    • 避免在 type-aliases-package 中包含冲突包
  • 不适用于非实体类(如 DTO、VO)?

    只要这些类在指定包下,同样会被注册。所以建议将所有需要在 MyBatis 中引用的 Java 类(PO、DTO、VO 等)放在该包或其子包中。


3. mapper-locations: "classpath*:/mapper/**/*.xml"

作用: 指定 Mapper XML 文件的位置。

说明:

  • 使用 classpath*: 可以匹配多个 jar 包中的资源(如多模块项目)。
  • ** 表示任意层级目录,*.xml 表示匹配所有 xml 文件。
  • 默认值为 "classpath*:mappers/**/*.xml",此处可自定义路径。

示例:

bash 复制代码
mapper-locations: "classpath*:/mapper/**/*.xml"

# or
mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml

含义:从 classpath 下所有 mappers 目录及其子目录中加载所有的 .xml 文件。


4. configuration:

作用: 继承 MyBatis 原生配置项,影响全局行为。

(1) map-underscore-to-camel-case: true

作用: 是否开启数据库字段下划线转 Java 属性驼峰命名的映射。

说明:

  • 数据库字段通常为下划线风格(如 user_name),Java 实体类属性为驼峰风格(如 userName)。
  • 开启后,MyBatis 自动完成字段映射,避免手动设置 resultMap

示例:

bash 复制代码
map-underscore-to-camel-case: true

当查询结果包含 user_name 字段时,会自动映射到实体类的 userName 属性上。

(2) cache-enabled: false

作用: 是否启用二级缓存。

计算机每次从mysql中执行sql语句,都是内存与硬盘的通信,对计算机来说,影响效率。因此使用缓存机制。

说明:

  • 默认为 true,但建议在生产环境中根据实际需求决定是否开启。
  • 二级缓存是跨会话的,可能带来数据一致性问题,尤其在高并发场景。

示例:

bash 复制代码
cache-enabled: false

关闭二级缓存,确保每次查询都是最新数据,适合对实时性要求高的系统。


5. global-config:

作用: MyBatisPlus 特有的全局配置,影响 CRUD 操作行为。

(1) db-config:

作用: 数据库相关配置。

a. id-type: assign_id

作用: 设置主键生成策略。

说明:

  • assign_id:由程序手动赋值 ID,常与雪花算法结合使用。
  • 其他常见选项:
    • auto:数据库自增
    • none:无主键
    • input:手动输入
    • assign_uuid:UUID 生成

示例:

bash 复制代码
id-type: assign_id

意味着主键由应用层通过雪花算法生成(如使用 IdWorker),插入时直接传入 ID 值。


b. update-strategy: not_null

作用: 更新操作时的字段更新策略。

说明:

  • not_null:只更新非空字段(即字段值不为 null 的才更新)。
  • 其他选项:
    • default:默认策略(可能全部更新)
    • not_null_column:仅更新非空且非空列的字段(更严格)

示例:

bash 复制代码
update-strategy: not_null

当执行 update user set name = ?, age = ? where id = ? 时,如果 agenull,则不会更新该字段。


3-2、总结

配置项 作用 推荐值 备注
type-aliases-package 扫描实体类包 必填 提升开发效率
mapper-locations 指定 XML 映射文件路径 必填 支持通配符
map-underscore-to-camel-case 下划线转驼峰 true 推荐开启
cache-enabled 是否启用二级缓存 false 生产慎用
id-type 主键生成方式 assign_id 结合雪花算法
update-strategy 更新策略 not_null 防止误覆盖

实际应用场景提示

  • 若使用 Spring Boot + MyBatisPlus,推荐将上述配置写入 application.yml
  • assign_id 配合雪花算法可用于分布式系统中唯一 ID 生成。
  • not_null 策略避免了因前端未传参导致的字段被清空问题。

四、总结

相关推荐
ruleslol2 天前
MyBatis-Plus05:IService接口基本用法
mybatis-plus
ruleslol2 天前
MyBatis-Plus04:自定义SQL
mybatis-plus
识君啊6 天前
MyBatis-Plus 逻辑删除导致唯一索引冲突的解决方案
java·spring boot·mybatis·mybatis-plus·唯一索引·逻辑删除
独断万古他化14 天前
【MyBatis-Plus 进阶】注解配置、条件构造器与自定义 SQL的复杂操作详解
sql·mybatis·mybatis-plus·条件构造器
子沫20201 个月前
使用mybatis-plus、mybatis插入数据库时加密,查询数据库时解密,自定义TypeHandler 加解密使用
数据库·mybatis·mybatis-plus
silence2502 个月前
MyBatis-Plus 报错 Invalid bound statement(insert)?其实是 SqlSessionFactoryBean 踩坑了
mybatis·mybatis-plus
爱学习的小可爱卢2 个月前
JavaEE进阶——MyBatis-Plus新手完全攻略
java·mybatis-plus
言一木2 个月前
mybatis-plus分表实现案例
springboot·mybatis-plus·水平分表
YDS8292 个月前
MyBatis-Plus精讲 —— 从快速入门到项目实战
java·后端·spring·mybatis·mybatis-plus