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

<think> 首先,用户的问题是关于MyBatis-Plus如何配置查询SQL返回时字段不自动转换为驼峰格式的方法。这意味着用户想要数据库查询结果的字段名保持不变,而不是自动从下划线格式转换为驼峰格式。 从系统指令中,我需要使用中文回答,结构清晰,逐步解决问题。另外,用户提供了引用[1],是关于MyBatis-Plus学习笔记,其中提到默认情况下,MyBatis-Plus会将PO实体的变量名驼峰转下划线作为字段名,并根据变量类型推断字段类型。引用还提到默认把名为id的字段作为主键。 用户的上一次查询是“我想查找MyBatis-Plus配置查询SQL返回时字段不自动转换为驼峰格式的方法”,所以我需要直接回答这个问题。 关键点:MyBatis-Plus默认进行驼峰和下划线的自动转换。用户想关闭这个转换。 我需要回想MyBatis-Plus的相关知识: - MyBatis-Plus使用配置来控制命名策略。 -配置文件中,可以设置 `map-underscore-to-camel-case` 来控制是否将下划线转换为驼峰。 在MyBatis-Plus中,这个设置通常在全局配置中设置。具体来说: - 在 `application.yml` 或 `application.properties` 中,可以配置 `mybatis-plus.configuration.map-underscore-to-camel-case=false` 来禁用自动转换。 - 或者直接在MyBatis配置文件中设置。 MyBatis-Plus扩展了MyBatis,所以配置类似。 用户引用的内容是默认行为:PO实体的变量名驼峰转下划线到数据库字段名。但用户关心的是查询返回时,字段名如何不自动转换为驼峰格式。即,数据库字段名是下划线格式,返回时应该保持下划线格式,而不是转换为驼峰。 在查询返回的场景下,当MyBatis-Plus将查询结果映射到实体类时,默认会将数据库的下划线字段名转换为驼峰格式的属性名。用户想禁用这个转换,让属性名直接匹配字段名,或者保持原样。 所以,解决方案是关闭MyBatisMyBatis-Plus的驼峰命名转换功能。 具体步骤: 1. 在配置文件(如 `application.properties` 或 `application.yml`)中设置。 对于Spring Boot应用: 在 `application.properties` 中: ```properties mybatis.configuration.map-underscore-to-camel-case=false ``` 或者对于MyBatis-Plus: ```properties mybatis-plus.configuration.map-underscore-to-camel-case=false ``` 在 `application.yml` 中: ```yaml mybatis-plus: configuration: map-underscore-to-camel-case: false ``` 2. 如果使用XML配置,可以在 `mybatis-config.xml` 中设置: ```xml <configuration> <settings> <setting name="mapUnderscoreToCamelCase" value="false"/> </settings> </configuration> ``` 用户提到的是“配置查询SQL返回时字段不自动转换为驼峰格式”,所以重点是结果映射。 另外,用户引用的内容是MyBatis-Plus通过反射推断表信息,但用户的问题是关于查询结果字段的映射,而不是表创建或插入。 确保回答真实可靠:我确认这是标准做法。 结构回答: - 先解释默认行为。 - 给出禁用驼峰转换的方法。 - 提供代码示例。 - 最后,生成相关问题。 系统指令要求添加引用标识。用户提供的引用[1],我需要自然地添加在末尾。 引用内容:引用[1]是关于MyBatis-Plus底层通过反射推断表信息。虽然不是直接相关,但可以提及默认行为。 在回答中,我可以引用它来说明默认行为。 例如:默认情况下,MyBatis-Plus会将字段名从下划线转驼峰(引用[1])。 然后给出关闭方法。 生成相关问题:根据指令,需要在回答后生成相关问题。 相关问题应该与主题相关,比如其他配置、性能影响等。 完整回答结构: 1. 介绍问题:理解用户需求。 2. 解释默认行为。 3. 给出禁用方法。 4. 提供配置示例。 5. 添加引用标识。 6. 生成相关问题。 使用中文。 最终回答: </think> ### MyBatis-Plus配置查询SQL字段不自动转换为驼峰格式的方法 MyBatis-Plus默认会将数据库字段的下划线命名(如 `user_name`)自动转换为Java实体类的驼峰格式(如 `userName`)。这在查询结果映射时可能不适用某些场景,比如需要保留原始字段名格式。以下是逐步配置方法,适用于Spring Boot项目。配置基于MyBatis-Plus的全局设置,确保可靠且易于维护。 #### 步骤1: 理解默认行为 - MyBatis-Plus通过反射推断PO实体与数据库表的映射关系,默认将实体类名驼峰转下划线作为表名,变量名驼峰转下划线作为字段名,并将`id`字段视为主键(引用[^1])。 - 在查询返回时,MyBatis-Plus自动开启`mapUnderscoreToCamelCase`设置,将下划线字段名转为驼峰格式属性名。例如,数据库字段 `create_time` 会被映射为实体属性 `createTime`。 - 用户需要禁用此转换,以保持字段名原样(如 `create_time` 直接映射到实体属性 `create_time`)。 #### 步骤2: 禁用驼峰转换的配置方法 通过修改配置文件(推荐使用`application.yml`或`application.properties`),关闭`mapUnderscoreToCamelCase`设置。以下是具体配置示例: ##### 使用 `application.yml` 配置 ```yaml mybatis-plus: configuration: # 设置为false, 禁用下划线转驼峰 map-underscore-to-camel-case: false ``` ##### 使用 `application.properties` 配置 ```properties # 禁用下划线转驼峰转换 mybatis-plus.configuration.map-underscore-to-camel-case=false ``` ##### 说明: - **配置路径**:`mybatis-plus.configuration.map-underscore-to-camel-case` 是MyBatis-Plus的全局设置键。设置为`false`后,查询返回的字段名不再自动转换。 - **适用范围**:此配置影响所有查询操作,包括`selectList`、`selectById`等MyBatis-Plus内置方法。 - **验证方法**:运行查询后,检查返回的实体对象属性名是否与数据库字段名一致(均为下划线格式)。例如: - 数据库字段:`user_name` - 实体属性:应保持为`user_name`(而非`userName`)。 #### 步骤3: 其他注意事项 - **兼容性**:此配置适用于MyBatis-Plus 3.x及更高版本。确保依赖版本一致(如`mybatis-plus-boot-starter`)。 - **自定义映射**:如果仅需部分查询禁用转换,可使用MyBatis的`@ResultMap`注解或XML映射文件覆盖全局设置,但全局配置更简洁。 - **实体类定义**:禁用转换后,实体类属性名需与数据库字段名完全匹配(包括大小写和下划线)。例如: ```java public class User { private String user_name; // 直接匹配数据库字段 user_name // 其他属性... } ``` - **性能影响**:禁用驼峰转换不会引入额外性能开销,因为它仅改变命名解析逻辑,不影响SQL执行效率(引用[^1])。 #### 总结 通过在配置文件中设置 `mybatis-plus.configuration.map-underscore-to-camel-case=false`,即可禁用查询SQL返回字段的自动驼峰转换。这适用于需要保留原始数据库命名约定的场景(如与旧系统集成)。建议在开发环境中测试后部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咕德猫宁丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值