mybatis地图实现查询结果下划线转驼峰

  介绍

本篇文章为大家展示了mybatis地图实现查询结果下划线转驼峰,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

添加一个配置类MybatisCamelConfig即可

包com.fpi.notify.config;
  
  进口com.google.common.base.CaseFormat;
  进口org.apache.ibatis.reflection.MetaObject;
  进口org.apache.ibatis.reflection.wrapper.MapWrapper;
  进口org.apache.ibatis.reflection.wrapper.ObjectWrapper;
  进口org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
  进口org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
  进口org.springframework.context.annotation.Bean;
  进口org.springframework.context.annotation.Configuration;
  进口java.util.Map;/* *
  * mybatis查询地图返回值下划线转峰坨
  * @author xingxing_yuan
  * @since 2020-02-18 13:47
  */@ configuration
  公开课MybatisCamelConfig {
  @ bean
  公共ConfigurationCustomizer mybatisConfigurationCustomizer () {//使用自定义的解析器工厂
  返回默认配置环境;配置。setObjectWrapperFactory(新MapWrapperFactory ());
  }/* *
  *实现工厂
  */静态类MapWrapperFactory实现ObjectWrapperFactory {
  @Override
  公共布尔hasWrapperFor(对象对象){//判断是地图就使用该解析
  返回对象实例映射;
  }
  
  @Override
  公共ObjectWrapper getWrapperFor (MetaObject MetaObject、对象对象){//将默认的解析器替换成峰坨转换
  返回新CamelWrapper (metaObject (Map)对象);
  }
  }/* *
  *重写转换器;添加转换方法
  */静态类CamelWrapper延伸MapWrapper {
  
  CamelWrapper (MetaObject MetaObject Map<字符串,Object>地图){
  超级(metaObject地图);
  }/* *
  * mybatis查询结果下划线转峰坨
  *
  * @param名字
  * @param useCamelCaseMapping是否进行转换.yaml中配置map-underscore-to-camel-case=true
  * @return
  */@Override
  公共findProperty字符串(字符串名称,布尔useCamelCaseMapping) {
  如果(useCamelCaseMapping) {//使用番石榴的转换方法,覆盖地图的默认返回值
  返回CaseFormat.UPPER_UNDERSCORE.to (CaseFormat。LOWER_CAMEL、名称);
  }
  返回名称;
  }
  
  }
  }

<>强关于Springboot + Mybatis中返回结果集为地图时其内的关键转换为驼峰的命名(2种方法)

使用场景:

使用Mybatis的时候,简单的连表查询,用地图接收的时候,都是像DB定义的字段一样,类似以下student_name, student_id,没有转换为驼峰,但是又不能因为这一个定义一个javabean来映射数据库字段集合,这样,会有无穷无尽的javabean,完全不是办法。然后看了下mybatis-spring-boot的配置文档

http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/,发现有这么个属性

mybatis.configuration。map-underscore-to-camel-case=true

看着属性意思,很像地图是下划线转换为驼峰,然后我天真的以为,加个这个,就会将地图里面的关键转换为驼峰的命名方式,总归是太天真了。没办法,接着找了了一下,发现官方文档http://www.mybatis.org/mybatis-3/configuration.html属性,描述过这个的作用,如下

癿ybatis图实现查询结果下划线转驼峰"

才发现,这个属性的作用,是作用于javabean的的领域,并不是地图。既然map-underscore-to-camel-case不能作用于地图,那么只能自己动手了,然后就想到了2个解决方案:

继承HashMap,重写把函数,将mybatis返回的地图,写上自定义地图的路径,自定义的地图,将所有的关键内部转换为驼峰表达式

找到mybatis的处理程序,通过处理程序来找到转换映射关系的接口定义,继承或者实现接口,然后走自定义的转换规则来实现地图映射的驼峰转换

最终决定,采用第二种,方便以后扩展

下面是使用第二种的两种在项目中的具体实现

<强>第一种实现方法:

首先,我开始找mybatis的配置里面的mapUnderscoreToCamelCase属性调用的地方

癿ybatis图实现查询结果下划线转驼峰"

有两个地方调用了,然后我们看第一个调用的地方,发现名称是createAutomaticMappings,应该是地图的映射字段创建,如下代码,光标显示的地方,就是调用的地方

癿ybatis图实现查询结果下划线转驼峰"

然后我们在查看属性传递进去后的操作,点进metaObject。findProperty的实现

mybatis地图实现查询结果下划线转驼峰