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 BeanMap都返回駝峰。

本文不再更新,可能存在內容過時的情況,實時更新請訪問原地址:Spring Boot將Mybatis返回結果轉為駝峰的三種實現方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM