最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis之BaseTypeHandler用法解讀

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

BaseTypeHandler用法

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

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

舉栗子:把集合類型當string存起來,讀取的時候映射為list集合

首先自定義handler 繼承BaseTypeHandler重寫他里邊的四個方法

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> 標簽內 映射字段的handler 指定自定義的handler即可,保存的時候也要指定。

測試

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

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

在mysql的使用過程中,我們經常會將一些json串存入mysql當中,如下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"
? ? ]
}

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

首先我們需要完成一個工具類

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中對需要使用json格式的字段引用這個方法

? ? <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>

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java中Lambda常用場景代碼實例

    java中Lambda常用場景代碼實例

    這篇文章主要介紹了java中Lambda常用場景,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Java編程調用微信接口實現(xiàn)圖文信息推送功能

    Java編程調用微信接口實現(xiàn)圖文信息推送功能

    這篇文章主要介紹了Java編程調用微信接口實現(xiàn)圖文信息等推送功能,涉及java微信圖文信息推送接口調用及相關文件、字符串編碼轉換相關操作技巧,需要的朋友可以參考下
    2017-08-08
  • Java 8 中 Map 騷操作之 merge() 的使用方法

    Java 8 中 Map 騷操作之 merge() 的使用方法

    本文簡單介紹了一下Map.merge()的方法,除此之外,Java 8 中的HashMap實現(xiàn)方法使用了TreeNode和 紅黑樹,原理很相似,今天通過本文給大家介紹Java 8 中 Map 騷操作之 merge() 的用法 ,需要的朋友參考下吧
    2021-07-07
  • 深入解讀Java代碼組織中的package包結構

    深入解讀Java代碼組織中的package包結構

    這篇文章主要介紹了Java代碼組織中的package包結構,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2016-03-03
  • spring boot密碼加密配置與實例詳解

    spring boot密碼加密配置與實例詳解

    BCrypt是一種專為密碼哈希設計的算法,它被廣泛認為是安全的選擇之一,這篇文章主要介紹了spring boot密碼加密配置與實例詳解,需要的朋友可以參考下
    2024-12-12
  • Java關鍵詞final示例解讀

    Java關鍵詞final示例解讀

    這篇文章主要介紹了Java關鍵詞final解讀,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • Java Socket編程(四) 重復和并發(fā)服務器

    Java Socket編程(四) 重復和并發(fā)服務器

    Java Socket編程(四) 重復和并發(fā)服務器...
    2006-12-12
  • 對象存儲服務MinIO快速入門(集成項目的詳細過程)

    對象存儲服務MinIO快速入門(集成項目的詳細過程)

    MinIO是一個開源的對象存儲服務,支持多種操作系統(tǒng),配置簡單且性能高,它使用糾刪碼進行數(shù)據(jù)保護,可以容忍硬件故障,MinIO支持多種語言的SDK和豐富的API,本文介紹對象存儲服務MinIO快速入門,感興趣的朋友一起看看吧
    2025-03-03
  • Java中的stream流的概念解析及實際運用總結

    Java中的stream流的概念解析及實際運用總結

    流是指傳輸時的數(shù)據(jù),Java為流準備了很多內置類,尤其是IO輸入輸出流非常常用,這里我們來看一下Java中的stream流的概念解析及實際運用總結
    2016-06-06
  • java 用redisTemplate 的 Operations存取list集合操作

    java 用redisTemplate 的 Operations存取list集合操作

    這篇文章主要介紹了java 用redisTemplate 的 Operations存取list集合操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

湟源县| 确山县| 阿鲁科尔沁旗| 冕宁县| 贵阳市| 泾源县| 嘉定区| 新泰市| 伊川县| 湖南省| 平潭县| 宿州市| 海安县| 固始县| 淮滨县| 德惠市| 正定县| 阿克| 嘉峪关市| 新晃| 海原县| 云南省| 抚州市| 宁陵县| 安泽县| 龙里县| 肥东县| 大洼县| 临江市| 措美县| 横峰县| 丰顺县| 务川| 德阳市| 博爱县| 承德县| 朝阳市| 金华市| 宕昌县| 保定市| 怀远县|