一、约定由于配置
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 配置,避免写冗长的全限定类名,提升可读性和维护性。
⚠️注意:
-
别名默认是类的简单名(首字母大小写均可)
即
User和user通常都能识别(MyBatis 内部做了兼容),但建议统一使用首字母大写。 -
若多个包中有同名类,会发生冲突
例如
com.a.User和com.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 = ?时,如果age为null,则不会更新该字段。
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策略避免了因前端未传参导致的字段被清空问题。
四、总结
