0
点赞
收藏
分享

微信扫一扫

若依mybatis返回map将下划线命名转为驼峰式命名

小黑Neo 2022-02-24 阅读 467



默认情况,若依不支持这个配置,需要我们重写配置类才能到达需求。


目录

​​一、需求情景复现​​

​​二、重写配置类​​

      ​​(1)导入guava依赖​​

​​(2)  编写配置类 ​​

​​三、验证结果​​

一、需求情景复现

这里只展示controller接口部分代码,其余代码在这里就不过多介绍,不是本文的重点。

@GetMapping("/map")
@ResponseBody
public AjaxResult selectNoticeMap() {
List<Map<String,Object>> map = noticeService.selectNoticeMap();
return AjaxResult.success(map);
}

例如我们以若依中的公告类,返回一个List<Map<String,Object>> 集合,通过postman调用

若依mybatis返回map将下划线命名转为驼峰式命名_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,否则配置将不会生效。


三、验证结果

若依mybatis返回map将下划线命名转为驼峰式命名_apache_02

最终我们可以看到,我们已经将所有属性字段为下划线的都已经转换为驼峰式名称了。

至此,本章教程,到此就结束,如果本文对你有帮助,希望能够点赞+评论+收藏+关注。


举报

相关推荐

0 条评论