MyBatis-Plus 学习笔记-配置(二) Configuration

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕德猫宁丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值