--場景一:
select code,name,addr from users
---場景二:
select * from users
使用MyBatis查詢且resultType=Map
時,如果未做任何配置,以上兩個SQL查詢結果均如下:
[{
CODE: '1',
NAME: '張三',
ADDR: '上海'
}]
我希望將鍵值改爲小寫:
方法一:設置返回字段的別名
對於場景一,我們可以給每個查詢字段加個別名,如下:
select
code as "code",
name as "name",
addr as "addr"
from users
但加別名的方式不適用於場景二。
方法二:通用方法(推薦)
- 步驟一:創建類
MapKeyLowerWrapper.java
,繼承MapWrapper
。該類將查詢結果轉換成Map。
package com.example.demo.filter;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.wrapper.MapWrapper;
import java.util.Map;
/**
* 將Map的key全部轉換爲小寫
*/
public class MapKeyLowerWrapper extends MapWrapper {
public MapKeyLowerWrapper(MetaObject metaObject, Map<String, Object> map) {
super(metaObject, map);
}
@Override
public String findProperty(String name, boolean useCamelCaseMapping) {
return name == null ? "" : name.toLowerCase();
}
}
步驟二:創建類MapWrapperFactory.java
。該類引用調用剛創建的自定義轉換類MapKeyLowerWrapper
package com.example.demo.filter;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.wrapper.ObjectWrapper;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import java.util.Map;
public class MapWrapperFactory implements ObjectWrapperFactory {
@Override
public boolean hasWrapperFor(Object object) {
return object != null && object instanceof Map;
}
@Override
public ObjectWrapper getWrapperFor(MetaObject metaObject, Object object) {
return new MapKeyLowerWrapper(metaObject, (Map) object);
}
}
步驟三:創建類ObjectWrapperFactoryConverter.java
package com.example.demo.filter;
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);
}
}
}
步驟四:在yml中添加 MapWrapperFactory 的配置
#mybatis配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
configuration:
object-wrapper-factory: com.example.demo.filter.MapWrapperFactory
重啓即可。