MyBatis-Plus 的 Configuration 配置继承自 MyBatis 原生支持的配置,这意味着您可以通过 MyBatis XML 配置文件的形式进行配置,也可以通过 Spring Boot 的配置文件进行设置。
map-underscore-to-camel-case(驼峰命名规则映射)
开启自动驼峰命名规则(camel case)映射, 从 A_COLUMN(下划线命名) > aColumn(驼峰命名) 的类似映射,**数据库命名符合规则,无需使用 @TableField 注解指定数据库字段名**。
mybatis-plus:
configuration:
map-underscore-to-camel-case: true #开启自动驼峰命名规则(camel case)映射
default-enum-type-handler(枚举)
默认枚举处理类,如果配置了该属性,枚举将统一使用指定处理器进行处理。
MyBatis-Plus 支持多种枚举处理方式,包括存储枚举名称、索引或自定义处理。
从 3.5.2 开始,默认枚举处理器为 CompositeEnumTypeHandler,它会根据枚举是否为通用枚举来选择合适的处理方式。
- org.apache.ibatis.type.EnumTypeHandler : 存储枚举的名称
- org.apache.ibatis.type.EnumOrdinalTypeHandler : 存储枚举的索引
- com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler : 枚举类需要实现 IEnum 接口或字段标记@EnumValue 注解.(3.1.2 以下版本为 EnumTypeHandler)
从 3.5.2 开始,默认枚举处理器为 CompositeEnumTypeHandler,会对定义为 MyBatis-Plus 通用枚举的枚举(实现IEnum了或加了EnumValue注解) 在内部使用MybatisEnumTypeHandler处理枚举。
其他的枚举使用内部属性 defaultEnumTypeHandler(默认为org.apache.ibatis.type.EnumTypeHandler)进行处理。
此配置仅改变 CompositeEnumTypeHandler#defaultEnumTypeHandler的值
mybatis-plus:
configuration:
default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler`
枚举
enum的全称为 enumeration
enum Gender{MAN,WOMAN}
枚举是一组常量的集合。枚举类属于一种特殊的类,里面只包含一组有限的特定的对象
使用 EnumValue注解方式 也可以实现IEnum
- @EnumValue注解:标记数据库中存储的值
- @JsonValue注解: 标记查询和返回所显示的值
package com.example.demo.user.myBatisEnum;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.IEnum;
import com.fasterxml.jackson.annotation.JsonValue;
/**
* 性别枚举类,用于定义性别常量`
*/
public enum SexEnum{
/**
* 男性常量
*/
MAN(1,"男"),
/**
* 女性常量
*/
WOMAN(2,"女");
@EnumValue // 标记数据库中存储的值
private Integer value;
@JsonValue // 标记查询和返回所显示的值
private String desc;
SexEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
}`
实体
package com.example.demo.user.entity;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.example.demo.user.myBatisEnum.SexEnum;
import lombok.Data;
import java.io.Serializable;
/**
* (MybatisUser)表实体类
*
* @author makejava
* @since 2024-11-12 14:37:09
*/
@SuppressWarnings("serial")
@Data
public class MybatisUser extends Model<MybatisUser> {
private Integer id;
private String name;
private SexEnum sex;
/**
* 获取主键值
*
* @return 主键值
*/
@Override
public Serializable pkVal() {
return this.id;
}
}
aggressive-lazy-loading(懒加载)
当设置为 true 时,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载,需要和 lazy-loading-enabled一起使用
mybatis-plus:
configuration:
aggressive-lazy-loading: false
进行关联查询的时候,按照设 置延迟加载规则推迟对关联对象的select检索。延迟加载可以有效的减少数据库 的压力,使用懒加载功能时,需要确保对象在访问关联属性时仍然处于数据库会话(Session)的范围内,否则可能会出现懒加载异常。
auto-mapping-behavior(映射)
MyBatis 自动映射策略,通过该配置可指定 MyBatis 是否并且如何来自动映射数据表字段与对象的属性。
- AutoMappingBehavior.NONE:不启用自动映射
- AutoMappingBehavior.PARTIAL:只对非嵌套的 resultMap 进行自动映射
- AutoMappingBehavior.FULL:对所有的 resultMap 都进行自动映射
mybatis-plus:
configuration:
auto-mapping-behavior: full
auto-mapping-unknown-column-behavior(映射未知处理策略)
MyBatis 自动映射时未知列或未知属性处理策略,通过该配置可指定 MyBatis 在自动映射过程中遇到未知列或者未知属性时如何处理。
- AutoMappingUnknownColumnBehavior.NONE:不做任何处理 (默认值)
- AutoMappingUnknownColumnBehavior.WARNING:以日志的形式打印相关警告信息
- AutoMappingUnknownColumnBehavior.FAILING:当作映射失败处理,并抛出异常和详细信息
mybatis-plus:
configuration:
auto-mapping-unknown-column-behavior: warning
缓存
local-cache-scope(一级缓存)
Mybatis 一级缓存,默认为 SESSION。
- SESSION:Session 级别缓存,同一个 Session 相同查询语句不会再次查询数据库
- STATEMENT:关闭一级缓存
mybatis-plus:
configuration:
local-cache-scope: statement
一级缓存是在SqlSession上的缓存,默认情况下,Mybatis会开启一级缓存,当在一个 SqlSession 中执行相同的查询语句时,MyBatis 会先查看一级缓存中是否存在之前查询的结果,如果存在则直接从缓存中读取数据,而不会再次发送数据库请求。SqlSession相互独立,无法共享。
在单服务架构中(仅有一个程序提供相同服务),开启一级缓存不会影响业务,只会提高性能。在微服务架构中需要关闭一级缓存,原因是:Service1 查询数据后,如果 Service2 修改了数据,Service1 再次查询时可能会得到过期数据。
cache-enabled(二级缓存)
mybatis-plus:
configuration:
cache-enabled: false
二级缓存是跨 SqlSession 的缓存机制,它可以被多个 SqlSession 共享,在 MyBatis 映射文件中通过 <cache> 标签来启用的,它存储在一个特定的命名空间内。由于二级缓存是跨 SqlSession 的,因此需要特别注意数据的一致性和并发控制问题。通常建议使用缓存插件如 Ehcache 或 Redis来管理和控制二级缓存,.
可以在维护数据后手动清空SqlSession缓存来达到数据一致(使用SqlSession的clearCache()方法清除当前session的缓存)。
redis可以使用@CacheNamespace注解,用于在 Mapper 接口中定义缓存策略。这个注解可以应用于 Mapper 接口层面,用来控制该接口中的所有映射操作的缓存行为。
call-setters-on-nulls(结果为 null,是否调用Setter)
当结果集中值为 null 时是否调用映射对象的 Setter 方法(Map 对象时为 put 方法)。通常用于有 Map.keySet() 依赖或 null 值初始化的情况。
mybatis-plus:
configuration:
call-setters-on-nulls: true
基本类型(int、boolean 等)是不能设置成 null 的。
configuration-factory(载用户的配置文件)
指定一个提供 Configuration 实例的工厂类。该工厂生产的实例将用来加载已被反序列化对象的懒加载属性值。
工厂类必须包含一个签名方法 static Configuration getConfiguration()
。
mybatis-plus:
configuration:
configuration-factory: com.your.config.MyConfigurationFactory