mybatis-plus返回map自動(dòng)轉(zhuǎn)駝峰配置操作
mybatis-plus返回map自動(dòng)轉(zhuǎn)駝峰配置object-wrapper-factory不生效問(wèn)題解決;配置map-underscore-to-camel-case: true不生效問(wèn)題解決
很多時(shí)候我們工作中查詢(xún)很多字段的時(shí)候一般是返回一個(gè)VO來(lái)接收,這個(gè)時(shí)候我們只要在yml中配置了
map-underscore-to-camel-case: true
就會(huì)自動(dòng)將查詢(xún)數(shù)據(jù)庫(kù)的字段帶下劃線(xiàn)的屬性轉(zhuǎn)成對(duì)應(yīng)實(shí)體類(lèi)VO中駝峰命名的屬性。
但是會(huì)經(jīng)常有這種場(chǎng)景:例如我們只查詢(xún)2個(gè)字段要返回給前端,這時(shí)候我們還需要新建一個(gè)VO,很是麻煩,我們只需要查詢(xún)返回一個(gè)Map來(lái)接收就可以了 ,但是返回到控制臺(tái)的屬性結(jié)果卻不是駝峰命名。
如下圖 ,這就是為何你yml中配置了map-underscore-to-camel-case: true也不生效的原因。(對(duì)返回map不生效
怎么解決這個(gè)問(wèn)題呢?解決方案:
mybatis-plus其實(shí)已經(jīng)幫我們寫(xiě)好了MybatisMapWrapperFactory類(lèi)(開(kāi)啟返回map結(jié)果集的下劃線(xiàn)轉(zhuǎn)駝峰)
在mybatis-plus-extension.jar下有一個(gè)類(lèi)
com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory
和
com.baomidou.mybatisplus.extension.handlers.MybatisMapWrapper
mybatis-plus自帶map下劃線(xiàn)轉(zhuǎn)駝峰配置類(lèi)
重點(diǎn):
我們只需要在yml中配置一下object-wrapper-factory指定MybatisMapWrapperFactory就可以了
mybatis-plus: mapper-locations: classpath:mapper/*Mapper.xml configuration: call-setters-on-nulls: true map-underscore-to-camel-case: true object-wrapper-factory: com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory
然后啟動(dòng)項(xiàng)目,我去竟然報(bào)錯(cuò)了:
***************************
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]:99:29
Reason: 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
啟動(dòng)報(bào)錯(cuò)詳情
提示找不到合適的converter將string轉(zhuǎn)化為ObjectWrapperFactory對(duì)象。這又是什么鬼呢?
看字面意思,應(yīng)該是缺少對(duì)應(yīng)的converter,難道m(xù)ybatis沒(méi)有提供這個(gè)converter嗎?
簡(jiǎn)直有點(diǎn)坑。而且springboot也不提供用反射機(jī)制來(lái)構(gòu)件對(duì)象的converter?
是的,springboot沒(méi)有這樣做。通過(guò)查資料得知springboot提供了一種擴(kuò)展機(jī)制,允許你來(lái)寫(xiě)一個(gè)converter來(lái)完成你想要的轉(zhuǎn)換工作。于是,我又寫(xiě)了一個(gè)converter:
package com.bytedance.douyin.config;
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;
@Component
@ConfigurationPropertiesBinding
public class ObjectWrapperFactoryConverter implements Converter<String,ObjectWrapperFactory> {
@Override
public ObjectWrapperFactory convert(String source) {
try {
return (ObjectWrapperFactory) Class.forName(source).newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
再次啟動(dòng) ok不報(bào)錯(cuò)了,這時(shí)候來(lái)看看結(jié)果是不是返回map自動(dòng)轉(zhuǎn)成駝峰命名。果然自動(dòng)轉(zhuǎn)了
返回map自動(dòng)轉(zhuǎn)駝峰命名
第二種方式:如果嫌配置Converter麻煩,不自定義Converter,那就不能在yml中配置
object-wrapper-factory: com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory
教你第二種方式:直接這樣配置就搞定了
@Bean
public ConfigurationCustomizer mybatisConfigurationCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setObjectWrapperFactory(new MybatisMapWrapperFactory());
}
};
}

補(bǔ)充知識(shí):解決spring boot整合mybatis時(shí) 返回map value為空字段不顯示
這兩天公司從YMP框架換到了spring boot 在整合mybatis時(shí)多表聯(lián)查,返回map的時(shí)候,發(fā)現(xiàn)map里面的value是空的情況下
字段也不顯示了 導(dǎo)致頁(yè)面取值報(bào)錯(cuò),如下圖

上網(wǎng)查了一下,在yml文件中加入一個(gè)配置就可以了
mybatis: configuration: call-setters-on-nulls: true
以上這篇mybatis-plus返回map自動(dòng)轉(zhuǎn)駝峰配置操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA感覺(jué)不香了AI智能編程工具Cursor使用圖文教程
這篇文章主要介紹了IDEA感覺(jué)不香了AI智能編程工具Cursor使用,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
springboot swagger 接口文檔分組展示功能實(shí)現(xiàn)
這篇文章主要介紹了springboot swagger 接口文檔分組展示功能實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-03-03
基于Java實(shí)現(xiàn)多線(xiàn)程下載并允許斷點(diǎn)續(xù)傳
這篇文章主要介紹了基于Java實(shí)現(xiàn)多線(xiàn)程下載并允許斷點(diǎn)續(xù)傳,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java數(shù)組轉(zhuǎn)換為L(zhǎng)ist的四種方式
這篇文章主要介紹了Java開(kāi)發(fā)技巧數(shù)組轉(zhuǎn)List的四種方式總結(jié),每種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
Spring中的AutowireCandidateResolver的具體使用詳解
這篇文章主要介紹了Spring中的AutowireCandidateResolver的具體使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
mybatis-plus如何修改日志只打印SQL語(yǔ)句不打印查詢(xún)結(jié)果
這篇文章主要介紹了mybatis-plus如何修改日志只打印SQL語(yǔ)句不打印查詢(xún)結(jié)果問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
springMVC不掃描controller中的方法問(wèn)題
這篇文章主要介紹了springMVC不掃描controller中的方法問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

