本篇文章为大家展示了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属性,描述过这个的作用,如下
才发现,这个属性的作用,是作用于javabean的的领域,并不是地图。既然map-underscore-to-camel-case不能作用于地图,那么只能自己动手了,然后就想到了2个解决方案:
继承HashMap,重写把函数,将mybatis返回的地图,写上自定义地图的路径,自定义的地图,将所有的关键内部转换为驼峰表达式
找到mybatis的处理程序,通过处理程序来找到转换映射关系的接口定义,继承或者实现接口,然后走自定义的转换规则来实现地图映射的驼峰转换
最终决定,采用第二种,方便以后扩展
下面是使用第二种的两种在项目中的具体实现
<强>第一种实现方法:强>
首先,我开始找mybatis的配置里面的mapUnderscoreToCamelCase属性调用的地方
有两个地方调用了,然后我们看第一个调用的地方,发现名称是createAutomaticMappings,应该是地图的映射字段创建,如下代码,光标显示的地方,就是调用的地方
然后我们在查看属性传递进去后的操作,点进metaObject。findProperty的实现