欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis之BaseTypeHandler用法解讀

 更新時(shí)間:2023年04月06日 09:38:22   作者:暖風(fēng)ii  
這篇文章主要介紹了mybatis之BaseTypeHandler用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

BaseTypeHandler用法

BaseTypeHandler 是個(gè)抽象類,需要子類去實(shí)現(xiàn)其定義的 4 個(gè)抽象方法,而它本身實(shí)現(xiàn)了 typeHandler 接口的 4 個(gè)方法。

可以對(duì)數(shù)據(jù)保存與查詢時(shí)做出相應(yīng)處理,類似操作數(shù)據(jù)庫(kù)之間的一個(gè)攔截器

舉栗子:把集合類型當(dāng)string存起來(lái),讀取的時(shí)候映射為list集合

首先自定義handler 繼承BaseTypeHandler重寫(xiě)他里邊的四個(gè)方法

public abstract void setNonNullParameter(PreparedStatement var1, int var2, T var3, JdbcType var4) throws SQLException;
 
public abstract T getNullableResult(ResultSet var1, String var2) throws SQLException;
 
public abstract T getNullableResult(ResultSet var1, int var2) throws SQLException;
 
public abstract T getNullableResult(CallableStatement var1, int var2) throws SQLException;

代碼如下

public class ListToStringHandler extends BaseTypeHandler<List> {
 
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, List list, JdbcType jdbcType) throws SQLException {
        preparedStatement.setString(i, JSON.toJSONString(list));
    }
 
    @Override
    public List getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return JSONArray.parseArray(resultSet.getString(s));
    }
 
    @Override
    public List getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return JSONArray.parseArray(resultSet.getString(i));
    }
 
    @Override
    public List getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return JSONArray.parseArray(callableStatement.getString(i));
    }
}

映射操作

mybaits-plus 方式

bean上添加注解

@TableName(autoResultMap = true)

映射字段上添加如下注解,指定自定義的handler

@TableField(jdbcType = JdbcType.VARCHAR, typeHandler = ListToStringHandler.class)

mybaits的方式

<resultMap> 標(biāo)簽內(nèi) 映射字段的handler 指定自定義的handler即可,保存的時(shí)候也要指定。

測(cè)試

這只是其一種簡(jiǎn)單的用法,其他的比如加密解密也適用。

通過(guò)BaseTypeHandler從mysql數(shù)據(jù)庫(kù)存取json字符串

在mysql的使用過(guò)程中,我們經(jīng)常會(huì)將一些json串存入mysql當(dāng)中,如下json串

{
? ? "params":[
? ? ? ? {
? ? ? ? ? ? "name":"zl",
? ? ? ? ? ? "age":18,
? ? ? ? ? ? "createTime":"2020-06-19 09:28:38",
? ? ? ? ? ? "modifyTime":"2020-06-19 09:29:07"
? ? ? ? }
? ? ],
? ? "paramsTypes":[
? ? ? ? "com.zl.platform.student"
? ? ]
}

對(duì)于這種數(shù)據(jù)在mybatis的存取過(guò)程需要一些特殊的處理,我們可以通過(guò)繼承mybatis的org.apache.ibatis.type.BaseTypeHandler來(lái)實(shí)現(xiàn)。

首先我們需要完成一個(gè)工具類

import com.alibaba.fastjson.JSON;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
?* @Author: zl
?*/
public class JsonTypeHandler<T> extends BaseTypeHandler<T> {

? ? private Class<T> type;
? ? public JsonTypeHandler(Class<T> type) {
? ? ? ? if (type == null) {
? ? ? ? ? ? throw new IllegalArgumentException("Type argument cannot be null");
? ? ? ? }
? ? ? ? this.type = type;
? ? }

? ? @Override
? ? public void setNonNullParameter(PreparedStatement ps, int i, Object parameter,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? JdbcType jdbcType) throws SQLException {

? ? ? ? ps.setString(i, JSON.toJSONString(parameter));
? ? }

? ? @Override
? ? public T getNullableResult(ResultSet rs, String columnName)
? ? ? ? ? ? throws SQLException {

? ? ? ? return JSON.parseObject(rs.getString(columnName), type);
? ? }

? ? @Override
? ? public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {

? ? ? ? return JSON.parseObject(rs.getString(columnIndex), type);
? ? }

? ? @Override
? ? public T getNullableResult(CallableStatement cs, int columnIndex)
? ? ? ? ? ? throws SQLException {

? ? ? ? return JSON.parseObject(cs.getString(columnIndex), type);
? ? }
}

然后在mybatis中對(duì)需要使用json格式的字段引用這個(gè)方法

? ? <resultMap id="BaseResultMap" type="com.zl.platform.entity.demo.DubboControllerInfo">
? ? ? ? <id column="id" property="id" />
? ? ? ? <result column="department" property="department" />
? ? ? ? <result column="case_name" property="caseName"/>
? ? ? ? <result column="author" property="author" />
? ? ? ? <result column="service_name" property="serviceName" />
? ? ? ? <result column="method_name" property="methodName" />
? ? ? ? <result column="dubbo_params" property="dubboParams" typeHandler="com.zl.platform.utils.JsonTypeHandler"/>
? ? ? ? <result column="create_time" property="createTime" />
? ? ? ? <result column="update_time" property="updateTime" />
? ? </resultMap>
? ??
? ? <insert id="insertDubboInfo" ?parameterType="com.zl.platform.entity.demo.DubboControllerInfo">
? ? ? insert into dubbo_controller_info (department, author, service_name,
? ? ? method_name, dubbo_params,create_time, update_time)
? ? ? VALUES (#{department},#{author},#{serviceName},#{methodName},#{dubboParams,typeHandler=com.zl.platform.utils.JsonTypeHandler},
? ? ? ?#{createTime},#{updateTime})
? ? </insert>

? ? <select id="selectAll" resultMap="BaseResultMap">
? ? ? ? select * from dubbo_controller_info
? ? </select>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java構(gòu)造器使用方法及注意事項(xiàng)

    Java構(gòu)造器使用方法及注意事項(xiàng)

    這篇文章主要介紹了Java構(gòu)造器使用方法及注意事項(xiàng)的相關(guān)資料,這里舉例說(shuō)明如何使用構(gòu)造器及需要注意的地方,需要的朋友可以參考下
    2017-07-07
  • Java 中使用Spring Security的實(shí)例詳解

    Java 中使用Spring Security的實(shí)例詳解

    Spring Security是一款強(qiáng)大的安全框架,可以幫助用戶保護(hù)Web應(yīng)用程序和REST API的安全性,這篇文章主要介紹了Java 中如何使用Spring Security,需要的朋友可以參考下
    2023-06-06
  • IDEA下使用Spring Boot熱加載的實(shí)現(xiàn)

    IDEA下使用Spring Boot熱加載的實(shí)現(xiàn)

    本文主要介紹了IDEA下使用Spring Boot熱加載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring Cloud 請(qǐng)求重試機(jī)制核心代碼分析

    Spring Cloud 請(qǐng)求重試機(jī)制核心代碼分析

    這篇文章主要介紹了Spring Cloud 請(qǐng)求重試機(jī)制核心代碼分析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解

    JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解

    這篇文章主要介紹了JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java的RxJava庫(kù)操作符的用法及實(shí)例講解

    Java的RxJava庫(kù)操作符的用法及實(shí)例講解

    RxJava由于提供異步和基于事件的支持在Android開(kāi)發(fā)者中獲得了不少人氣,這里我們就來(lái)看一下Java的RxJava庫(kù)操作符的用法及實(shí)例講解,需要的朋友可以參考下
    2016-06-06
  • springboot+vue實(shí)現(xiàn)驗(yàn)證碼功能

    springboot+vue實(shí)現(xiàn)驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了springboot+vue實(shí)現(xiàn)驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot 接口開(kāi)發(fā)教程(httpclient客戶端)

    SpringBoot 接口開(kāi)發(fā)教程(httpclient客戶端)

    這篇文章主要介紹了SpringBoot 接口開(kāi)發(fā)教程(httpclient客戶端),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • maven私服搭建的實(shí)現(xiàn)步驟

    maven私服搭建的實(shí)現(xiàn)步驟

    本文主要介紹了maven私服搭建的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • SpringBoot集成logback打印彩色日志的代碼實(shí)現(xiàn)

    SpringBoot集成logback打印彩色日志的代碼實(shí)現(xiàn)

    Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開(kāi)源日志組件,默認(rèn)情況下,Spring?Boot會(huì)用Logback來(lái)記錄日志,并用INFO級(jí)別輸出到控制臺(tái),本文給大家介紹了SpringBoot集成logback打印彩色日志,需要的朋友可以參考下
    2024-03-03

最新評(píng)論