Spring Boot将Mybatis返回结果转为驼峰的三种实现方式
本文不再更新,可能存在内容过时的情况,实时更新请访问原地址: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 Bean
和Map
都返回驼峰。
本文不再更新,可能存在内容过时的情况,实时更新请访问原地址:Spring Boot将Mybatis返回结果转为驼峰的三种实现方式;
Spring Boot将Mybatis返回结果转为驼峰的三种实现方式的更多相关文章
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。
1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...
- 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 内容简介:本文介绍 Spring Boot 的配置文件和配置管理,以及介绍了三种读取配置文 ...
- spring boot快速入门 1 :创建项目、 三种启动项目方式
准备工作: (转载)IDEA新建项目时,没有Spring Initializr选项 最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot. 看着博客来进行操作上手sprin ...
- spring mvc:拦截器不拦截静态资源的三种处理方式
方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...
- Spring boot 梳理 - SpringBoot中注入ApplicationContext对象的三种方式
直接注入(Autowired) @Configuration public class OAConfig { @Autowired private ApplicationContext applica ...
- spring bean的init 方法和 destory方法的三种实现方式
1.通过@Bean(initMethod ="initPerson",destroyMethod ="destroyPerson" ) public class ...
- spring boot加mybatis使用Map返回时,当值为空时属性也会没有(转)
使用spring boot加mybatis时,设置Map返回,当值为空时属性也会没有,就会报错 在application.properties中加入下面配置,将会解决这个问题. #当查询数据为空时 ...
- spring boot + druid + mybatis + atomikos 多数据源配置 并支持分布式事务
文章目录 一.综述 1.1 项目说明 1.2 项目结构 二.配置多数据源并支持分布式事务 2.1 导入基本依赖 2.2 在yml中配置多数据源信息 2.3 进行多数据源的配置 三.整合结果测试 3.1 ...
- Spring Boot 实战 —— MyBatis(注解版)使用方法
原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...
随机推荐
- 十 | 门控循环神经网络LSTM与GRU(附python演练)
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 门控循环神经网络简介 长短期记忆网络(LSTM) 门控制循环单元(GRU) ...
- ConcurrentHashMap(1.7版本和1.8版本)
为什么要使用ConcurrentHashMap? ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代hashMap和HashTable.因为在并发编程中使 ...
- socket,实现服务器和客户端对话
服务器: #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string>#include<WinSock ...
- [POJ1190]生日蛋糕<DFS>
题目链接:http://poj.org/problem?id=1190 题看上去确实很复杂 涉及到半径面积这些,其实看着真的很头疼 但是除去这些就是剪枝优化的dfs算法 #include<cst ...
- SQL 实战(五)
一. 将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01.CREATE TABLE IF NOT EXISTS titles_test ( ...
- Java中使用RSA算法加密
Java中使用RSA算法加密 概述 RSA加密算法是一种非对称加密算法 RSA加密的方式 使用公钥加密的数据,利用私钥进行解密 使用私钥加密的数据,利用公钥进行解密 RSA是一对密钥.分别是公钥和私钥 ...
- RedHat 6.7 使用 CentOS 6 的源
1. 移除 RedHat 相关软件包 # yum -y remove subscription-manager and rh-check # rpm -aq | grep yum | xargs rp ...
- wireshark一开,无线网络就断开
最近在研究wireshark 笔记本连着wifi,开始抓包后,无线网就断了 查了半天,需要把捕获-->选项里的监控模式去掉就行了
- 部署mysql主从同步
mysql-day06 部署mysql主从同步 案例拓扑 • 一主.一从 – 单向复制时,建议将 ...
- 【JavaScript】js01
一,javascript 历史. netscape -> 浏览器. -> livescript 微软 -> jscript netscape -> ecma 组织 -> ...