默认情况,若依不支持这个配置,需要我们重写配置类才能到达需求。
这里只展示controller接口部分代码,其余代码在这里不过多介绍。
@GetMapping("/map")
@ResponseBody
public AjaxResult selectNoticeMap() {
List<Map<String,Object>> map = noticeService.selectNoticeMap();
return AjaxResult.success(map);
}
例如以若依中的公告类,返回一个List<Map<String,Object>>
集合,通过postman
调用
可以发现,默认情况下,返回的key
都是以下划线命令的,本章需求就是解决如何将以下划线命令的key
转换为驼峰式。
(1)导入guava
依赖
在ruoyi-common
模块中的pom.xml
下添加
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
(2)编写配置类
MapWrapperFactory .java
package com.ruoyi.framework.config.mybatis;
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 MyMapWrapper(metaObject, (Map) object);
}
}
MyMapWrapper.java
package com.ruoyi.framework.config.mybatis;
import com.google.common.base.CaseFormat;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.wrapper.MapWrapper;
import java.util.Map;
public class MyMapWrapper extends MapWrapper {
MyMapWrapper(MetaObject metaObject, Map<String, Object> map) {
super(metaObject, map);
}
/**
* mybatis查询结果下划线转峰坨
*
* @param name
* @param useCamelCaseMapping 是否进行转换。yml 中配置map-underscore-to-camel-case=true
* @return
*/
@Override
public String findProperty(String name, boolean useCamelCaseMapping) {
if (useCamelCaseMapping) {
// 使用guava的转换方法,覆盖Map的默认返回值
return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name);
}
return name;
}
}
然后在MyBatisConfig.java 中配置@Bean
/**
* mybatis resultType为map时下划线键值转小写驼峰形式插
*/
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setObjectWrapperFactory(new MapWrapperFactory());
}
最后修改mybatis-config.xml,完成最终配置 。
mybatis-config.xml文件位置:ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 全局参数 -->
<settings>
<!-- 使全局的映射器启用或禁用缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 允许JDBC 支持自动生成主键 -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!-- 指定 MyBatis 所用日志的具体实现 -->
<setting name="logImpl" value="SLF4J"/>
<!-- 使用驼峰命名法转换字段 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<objectWrapperFactory type="com.ruoyi.framework.config.mybatis.MapWrapperFactory"/>
</configuration>
注意点:一定要设置mapUnderscoreToCamelCase为true,否则配置将不会生效。
powered by kaifamiao