mybatis-plus返回map自動轉(zhuǎn)駝峰配置操作
mybatis-plus返回map自動轉(zhuǎn)駝峰配置object-wrapper-factory不生效問題解決;配置map-underscore-to-camel-case: true不生效問題解決
很多時候我們工作中查詢很多字段的時候一般是返回一個VO來接收,這個時候我們只要在yml中配置了
map-underscore-to-camel-case: true
就會自動將查詢數(shù)據(jù)庫的字段帶下劃線的屬性轉(zhuǎn)成對應(yīng)實體類VO中駝峰命名的屬性。
但是會經(jīng)常有這種場景:例如我們只查詢2個字段要返回給前端,這時候我們還需要新建一個VO,很是麻煩,我們只需要查詢返回一個Map來接收就可以了 ,但是返回到控制臺的屬性結(jié)果卻不是駝峰命名。
如下圖 ,這就是為何你yml中配置了map-underscore-to-camel-case: true也不生效的原因。(對返回map不生效
怎么解決這個問題呢?解決方案:
mybatis-plus其實已經(jīng)幫我們寫好了MybatisMapWrapperFactory類(開啟返回map結(jié)果集的下劃線轉(zhuǎn)駝峰)
在mybatis-plus-extension.jar下有一個類
com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory
和
com.baomidou.mybatisplus.extension.handlers.MybatisMapWrapper
mybatis-plus自帶map下劃線轉(zhuǎ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
然后啟動項目,我去竟然報錯了:
***************************
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
啟動報錯詳情
提示找不到合適的converter將string轉(zhuǎn)化為ObjectWrapperFactory對象。這又是什么鬼呢?
看字面意思,應(yīng)該是缺少對應(yīng)的converter,難道m(xù)ybatis沒有提供這個converter嗎?
簡直有點坑。而且springboot也不提供用反射機(jī)制來構(gòu)件對象的converter?
是的,springboot沒有這樣做。通過查資料得知springboot提供了一種擴(kuò)展機(jī)制,允許你來寫一個converter來完成你想要的轉(zhuǎn)換工作。于是,我又寫了一個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); } } }
再次啟動 ok不報錯了,這時候來看看結(jié)果是不是返回map自動轉(zhuǎn)成駝峰命名。果然自動轉(zhuǎn)了
返回map自動轉(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ǔ)充知識:解決spring boot整合mybatis時 返回map value為空字段不顯示
這兩天公司從YMP框架換到了spring boot 在整合mybatis時多表聯(lián)查,返回map的時候,發(fā)現(xiàn)map里面的value是空的情況下
字段也不顯示了 導(dǎo)致頁面取值報錯,如下圖
上網(wǎng)查了一下,在yml文件中加入一個配置就可以了
mybatis: configuration: call-setters-on-nulls: true
以上這篇mybatis-plus返回map自動轉(zhuǎn)駝峰配置操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用spring oauth2框架獲取當(dāng)前登錄用戶信息的實現(xiàn)代碼
這篇文章主要介紹了使用spring oauth2框架獲取當(dāng)前登錄用戶信息的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Java二分查找算法與數(shù)組處理的應(yīng)用實例
二分查找法,又叫做折半查找法,它是一種效率較高的查找方法。數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。Java 語言中提供的數(shù)組是用來存儲固定大小的同類型元素2022-07-07Java中的HashSet、LinkedHashSet集合解析
這篇文章主要介紹了Java中的HashSet、LinkedHashSet集合解析,與HashSet不同的是,LinkedHashSet在內(nèi)部使用了一個雙向鏈表來維護(hù)元素的順序,因此它可以保持元素的插入順序,這使得LinkedHashSet在需要保持元素順序的場景下非常有用,需要的朋友可以參考下2023-11-11