【Mybatis-puls】使用Map作为返回对象下划线自动转成驼峰

⛈️问题描述


VO实体类自动转换驼峰 下面配置即可,但是很多情况是几个字段懒得写实体类返回一个map.这个是时候也希望可以返回已经转成驼峰命名的字段

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true

🌦️方案一


🌀yml配置解决方案


在网上找到说配置下面的即可,但是的配置上就启动报错

mybatis-plus:
  configuration:
    object-wrapper-factory: com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory

🌀错误分析


***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'mybatis-plus.configuration.object-wrapper-factory' to org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory:

    Property: mybatis-plus.configuration.object-wrapper-factory
    Value: "com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory"
    Origin: class path resource [application.yml] - 25:29
    Reason: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory]

Action:

Update your application's configuration

我们来错误分析一下

  • 关键这个一段No converter found capable of converting from type [java.lang.String] to type [org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory]
  • 翻译一下: 找不到对应的转换器将string转化为ObjectWrapperFactory对象,
  • 因为我这里当时比较着急解决这个问题,就是没有深究为什么会没有这个转换器
  • 直接就进入下一步,我们自己写一个对象转换器

🌀解决方案(转换器代码)


import lombok.SneakyThrows;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

/**
 * @Author: hrd
 * @CreateTime: 2023/7/5 17:17
 * @Description:
 */
@Component
@ConfigurationPropertiesBinding
public class StringToObjectWrapperFactoryConverter implements Converter<String, ObjectWrapperFactory> {
    @SneakyThrows
    @Override
    public ObjectWrapperFactory convert(String source) {

        return (ObjectWrapperFactory) Class.forName(source).newInstance();

    }
}

在这里插入图片描述

  • 可以看已经进入我这个转换器了,
  • 启动也成功了,map转换成驼峰也没有问题

🌀@ConfigurationPropertiesBinding的作用


@ConfigurationPropertiesBinding 是 Spring Boot 中的一个注解,用于将自定义的转换器(Converter)注册为属性绑定的候选项。它可用于将外部属性绑定到 Spring 环境中的 Java 对象或 Bean 属性。

  • 在 Spring Boot 应用中,通常会使用 @ConfigurationProperties 注解来绑定外部配置文件中的属性到一个 Java 对象。但是,当属性的类型与 Java 对象的属性类型不匹配时,就需要自定义转换器进行类型转换。
  • 使用 @ConfigurationPropertiesBinding 注解,你可以将自定义的转换器注册为属性绑定的候选项。这样,Spring 在属性绑定时会优先考虑候选项中的转换器。
  • 然后,你可以在需要的地方使用 @Autowired 注解来注入该转换器,或者在配置类中指定转换器的类型,以便在属性绑定时进行类型转换。
  • 注意:使用自定义转换器时,需要你的转换器类为 @Component 或其他 Spring 组件注解,以让 Spring 自动扫描并注册转换器,而无需显式定义配置类。

🌦️方案二(怕麻烦的建议使用方案二)

🌀通过Java配置bean解决


  • 直接用下面的代码配置用下面的配置的话记得把yml里面的删除掉
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: hrd
 * @CreateTime: 2023/4/29 9:28
 * @Description:
 */
@Configuration
public class MybatisConfig {
    @Bean
    public ConfigurationCustomizer mybatisConfigurationCustomizer(){
        return configuration -> configuration.setObjectWrapperFactory(new MybatisMapWrapperFactory());
    }
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值