本文不再更新,可能存在内容过时的情况,实时更新请访问原地址:Spring Boot将Mybatis返回结果转为驼峰的三种实现方式

我们通常获取Mybatis返回的数据结果时想要将字段以驼峰的形式返回,比如ORGAN_NAME数据库字段,然后以organName的形式返回,具体实现方式有以下三种:

一、使用Mybatis内置配置

具体yml文件配置项:

mybatis:
mapper-locations: classpath:mapping/**/*.xml
type-aliases-package: com.inspur.inspection.portrait
configuration:
map-underscore-to-camel-case: true

响应的我们需要定义一个实体类来接收结果,例如:

<select id="officerSex" parameterType="java.util.HashMap" resultType="com.portrail.city.model.JwOfficerSex">
SELECT T.* FROM jw_officer_sex T
WHERE T.AREA_CODE = #{areaCode}
AND T.YEAR_NUM IN
<foreach collection="yearArr" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
ORDER BY T.YEAR_NUM DESC
</select>

注意: 如果你的返回结果不是实体类Java Bean,而是Map,此种方式无法实现,参考第二种。

二、定义一个resultMap

通常我们可以在Mybatis的mapping文件里这样定义:

<resultMap id="struViewResultMap" type="com.inspur.common.bsp.organ.view.StruView">
<result property="struId" column="STRU_ID"/>
<result property="parentId" column="PARENT_ID"/>
<result property="organId" column="ORGAN_ID"/>
</resultMap>

<resultMap id="extOrganMap" type="java.util.HashMap">
<result property="organId" column="TARGET_ID"/>
<result property="organName" column="ORGAN_NAME"/>
<result property="organCode" column="ORGAN_CODE"/>
<result property="organType" column="ORGAN_TYPE"/>
<result property="type" column="TYPE"/>
<result property="srcId" column="SRC_ID"/>
<result property="struType" column="STRU_TYPE"/>
<result property="struId" column="STRU_ID"/>
</resultMap>

其中,resultMap标签的type属性可以为Java Class类名,或Mybatis内建类型别名。

这种方式,对普通Java Bean和Map等类型都适用。

使用方式参考如下代码:

 <select id="getStruExtAndOrgan" parameterType="java.util.HashMap" resultMap="extOrganMap">
SELECT
ext.ID,
ext.TYPE,
ext.SRC_ID,
ext.TARGET_ID,
ext.STRU_TYPE,
ext.STRU_ID,
O.ORGAN_NAME,
O.ORGAN_CODE,
O.ORGAN_TYPE
FROM
pub_stru_ext ext
LEFT JOIN pub_organ O ON ext.TARGET_ID = O.ORGAN_ID
</select>

三、重实现ObjectWrapperFactory接口

代码1:CustomWrapper.java

package com.portrail.config;

import org.apache.commons.text.CaseUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.wrapper.MapWrapper; import java.util.Map; /**
* @author 四个空格:https://www.4spaces.org
*/
public class CustomWrapper extends MapWrapper {
public CustomWrapper(MetaObject metaObject, Map<String, Object> map) {
super(metaObject, map);
} @Override
public String findProperty(String name, boolean useCamelCaseMapping) {
if (useCamelCaseMapping) {
return CaseUtils.toCamelCase(name, false, new char[]{'_'});
}
return name;
}
}

代码2:MapWrapperFactory.java

package com.portrail.config;

import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.wrapper.ObjectWrapper;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory; import java.util.Map; /**
* @author 四个空格:https://www.4spaces.org
*/
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 CustomWrapper(metaObject,(Map)object);
}
}

代码3:MybatisConfig.java

package com.portrail.config;

import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @author 四个空格:https://www.4spaces.org
*/
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer mybatisConfigurationCustomizer() {
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setObjectWrapperFactory(new MapWrapperFactory());
}
};
}
}

这种方式,默认对按照方式一设置了开启驼峰的配置后的Java BeanMap都返回驼峰。

本文不再更新,可能存在内容过时的情况,实时更新请访问原地址:Spring Boot将Mybatis返回结果转为驼峰的三种实现方式

Spring Boot将Mybatis返回结果转为驼峰的三种实现方式的更多相关文章

  1. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。

    1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...

  2. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件

    精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 内容简介:本文介绍 Spring Boot 的配置文件和配置管理,以及介绍了三种读取配置文 ...

  3. spring boot快速入门 1 :创建项目、 三种启动项目方式

    准备工作: (转载)IDEA新建项目时,没有Spring Initializr选项 最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot. 看着博客来进行操作上手sprin ...

  4. spring mvc:拦截器不拦截静态资源的三种处理方式

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

  5. Spring boot 梳理 - SpringBoot中注入ApplicationContext对象的三种方式

    直接注入(Autowired) @Configuration public class OAConfig { @Autowired private ApplicationContext applica ...

  6. spring bean的init 方法和 destory方法的三种实现方式

    1.通过@Bean(initMethod ="initPerson",destroyMethod ="destroyPerson" ) public class ...

  7. spring boot加mybatis使用Map返回时,当值为空时属性也会没有(转)

    使用spring boot加mybatis时,设置Map返回,当值为空时属性也会没有,就会报错 在application.properties中加入下面配置,将会解决这个问题.   #当查询数据为空时 ...

  8. spring boot + druid + mybatis + atomikos 多数据源配置 并支持分布式事务

    文章目录 一.综述 1.1 项目说明 1.2 项目结构 二.配置多数据源并支持分布式事务 2.1 导入基本依赖 2.2 在yml中配置多数据源信息 2.3 进行多数据源的配置 三.整合结果测试 3.1 ...

  9. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

随机推荐

  1. python win32com

    要使用Python控制MS Word,您需要先安裝win32com套件,這個套件可以到 http://sourceforge.net/projects/pywin32/ 找到.本文假設您已經正確安裝w ...

  2. BUAA_2020_OO_第一单元总结

    三次作业,三次成长 第一次作业--幂函数求导总结 作业思路和心得 第一次作业的要求只有x的指数这样的幂函数加减组成表达式,对表达式进行求导,而且没有格式错误的检查,所以难度感觉还不是很高.不过由于我寒 ...

  3. qt creator源码全方面分析(3-6)

    目录 qtcreatorplugin.pri 使用实例 上半部 下半部 结果 qtcreatorplugin.pri 上一节我们介绍了qtcreatorlibrary.pri,现在我们介绍qtcrea ...

  4. [noip模拟]数字对<RMQ&二分>

    数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= ...

  5. LeetCode47, 全排列进阶,如果有重复元素怎么办?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第28篇,依然是全排列的问题. 如果对全排列不熟悉或者是最近关注的同学可以看一下上一篇文章: LeetCode46 回 ...

  6. 一文摸透从输入URL到页面渲染的过程

    一文摸透从输入URL到页面渲染的过程 从输入URL到页面渲染需要Chrome浏览器的多个进程配合,所以我们先来谈谈现阶段Chrome浏览器的多进程架构. 一.Chrome架构 目前Chrome采用的是 ...

  7. linux神器 strace解析

    除了人格以外,人最大的损失,莫过于失掉自信心了. 前言 strace可以说是神器一般的存在了,对于研究代码调用,内核级调用.系统级调用有非常重要的作用.打算了一周了,只有原文,一直没有梳理,拖延症犯了 ...

  8. Java基础知识3-类和对象(1)

    面向过程和面向对象的区别 面向过程(结构化程序设计) 实际上是一个面向操作过程,首先设计一系列过程(算法)来求解问题(操作数据),然后再考虑存储数据的方式(组织数据).即程序=算法\+数据结构.对应典 ...

  9. 1048 Find Coins (25分)

    Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...

  10. Python起步学习

    Python起步学习 案例1:程序输入输出 案例2:判断合法用户 安全3:编写判断成绩的程序 1 案例1:程序输入输出 1.1 问题 编写login.py脚本,实现以下目标: 提示用户输入用户名 将用 ...