MyBatis XML映射處理CLOB和BLOB類型

Mybatis的MapperXML映射文件應該處理數據庫字段類型為CLOB和BLOB類型的數據呢?首先我們先看下CLOB和BLOB這兩種數據類型的介紹。

介紹

使用Mybatis時涉及到兩種特殊類型的處理,分別是Blob(Binary Large Object)和Clob(Character Large Object)。Blob表示二進制大對象字段,而Clob則表示大字符對象字段。這兩種類型需要特殊處理。

Blob主要用于存儲大型二進制數據,例如圖像、音頻或視頻文件等。而Clob則用于存儲大量文本數據,比如長篇文章、日志等。在JDBC中,PreparedStatement和ResultSet提供了相應的方法來支持Blob和Clob的操作,使得在數據庫中存儲和檢索這些大型數據變得更加容易。

本文首發:https://www.panziye.com/java/7876.html

Mybatis作為一個持久層框架,也對Blob和Clob類型進行了支持。不同版本的Mybatis都提供了對這些類型的存儲和讀取操作的功能。下面將詳細介紹Mybatis中如何操作Clob字段。

對應關系

BLOB和CLOB在不一樣的數據庫中對應的類型也不同:
?MySQL中:clob對應text/longtext,blob對應blob
Oracle中:clob對應clob,blob對應blob

Mapper.xml映射

Mapper文件中查詢sql的id為queryByList,report_summary為Oracle數據庫中的一個字段,是CLOB類型。myClob為java類,在java類中定義一個String類型的字段reportSummary,用于接收CLOB信息。

1)Mapper.xml文件加入如下配置可以讀取CLOB和BLOB類型的數據

jdbcType="CLOB" typeHandler="org.apache.ibatis.type.ClobTypeHandler"
jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BLOBTypeHandler"

2)案例代碼

<select id="queryByList" parameterType="Map" resultMap="queryBaseResultMap">select  id ,title,type,report_summary,author from my_clobwhere 1 = 1 order by ${orderByClause}
</select>
<resultMap id="queryBaseResultMap" type="com.mxm.model.MyClob" ><id column="Id" property="id" jdbcType="INTEGER" /><result column="type" property="type" jdbcType="INTEGER" /><result column="title" property="title" jdbcType="VARCHAR" /><result column="author" property="author" jdbcType="VARCHAR" /><result column="report_summary" property="reportSummary" jdbcType="CLOB" typeHandler="org.apache.ibatis.type.ClobTypeHandler">
</resultMap>

3)如果你的Clob是文本信息,在java實體類中,可以直接使用String字符串去接收處理。

擴展

上面使用的是默認的mybatis提供的ClobTypeHandler,當然,你也可以自定義自己的handler進行處理,這樣會有更好的靈活性。這里演示blob與String轉換。

場景

數據庫中有一個blob字段,在java中用String接收。使用如下方式讀取:

<select id="find" resultType="com.example.bean.User">select id, name, experience, createTimefrom user
</select>

如果這里的experience字段為blob類型,那么取出來的數據就會亂碼。

解決方法是自定義一個TypeHandler,通過繼承BaseTypeHandler類實現。如下。

BlobToStringTypeHandler

先看xml應用:

<resultMap id="UserResultMap" type="com.example.bean.User"><id property="id" column="id"></id><result property="name" column="name"></result><result property="experience" column="experience" typeHandler="com.example.handler.BlobToStringTypeHandler"></result><result property="createTime" column="createTime"></result>
</resultMap><select id="find" resultMap="UserResultMap">select id, name, experience, createTimefrom user
</select>

再看BlobToStringTypeHandler代碼:

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;import java.sql.*;public class BlobToStringTypeHandler extends BaseTypeHandler<String> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, parameter);}@Overridepublic String getNullableResult(ResultSet rs, String columnName) throws SQLException {Blob blob = rs.getBlob(columnName);return new String(blob.getBytes(1, (int)blob.length()));}@Overridepublic String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {Blob blob = rs.getBlob(columnIndex);return new String(blob.getBytes(1, (int)blob.length()));}@Overridepublic String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {Blob blob = cs.getBlob(columnIndex);return new String(blob.getBytes(1, (int)blob.length()));}
}

以上,通過繼承BaseTypeHandler并實現其方法,將sql的blob類型字段與java的String類型互相轉換。

附錄

這里附上Mybatis JdbcType與Oracle、MySql數據類型對應列表

JdbcTypeOracleMySql
ARRAY
BIGINTBIGINT
BINARY
BITBIT
BLOBBLOBBLOB
BOOLEAN
CHARCHARCHAR
CLOBCLOB修改為TEXT
CURSOR
DATEDATEDATE
DECIMALDECIMALDECIMAL
DOUBLENUMBERDOUBLE
FLOATFLOATFLOAT
INTEGERINTEGERINTEGER
LONGVARBINARY
LONGVARCHARLONG VARCHAR
NCHARNCHAR
NCLOBNCLOB
NULL
NUMERICNUMERIC/NUMBERNUMERIC/
NVARCHAR
OTHER
REALREALREAL
SMALLINTSMALLINTSMALLINT
STRUCT
TIMETIME
TIMESTAMPTIMESTAMPTIMESTAMP/DATETIME
TINYINTTINYINT
UNDEFINED
VARBINARY
VARCHARVARCHARVARCHAR

如果表格中有遺漏,可以直接看https://www.panziye.com/java/7876.html

總結

以上就是MyBatis MapperXML如何處理CLOB和BLOB類型數據的全部內容,希望對你Java框架的學習有幫助!

推薦閱讀

MyBatis Plus如何解決百萬級大數據量查詢慢問題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43450.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43450.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43450.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python+django+mysql項目實踐四(信息修改+用戶登陸)

python項目實踐 環境說明: Pycharm 開發環境 Django 前端 MySQL 數據庫 Navicat 數據庫管理 用戶信息修改 修改用戶信息需要顯示原內容,進行修改 通過url傳遞編號 urls views 修改內容需要用數據庫的更新,用update進行更新,用filter進行選擇 輸入參數多nid,傳遞要修…

Flutter實現Service + UI 全面跨平臺

作者&#xff1a;Karl_wei 前言&#xff1a; Flutter作為跨平臺的UI框架&#xff0c;其可行性已經被市場所認可。UI跨端后&#xff0c;我們自然會希望一些運行在終端的小服務也能跨端&#xff0c;特別是當這個小服務還涉及到一些 UI 的展示。 我們希望Flutter能承擔這個角色&…

去除UI切圖邊緣上多余的線條

最近接到UI切圖&#xff0c;放進項目&#xff0c;顯示邊緣有多余線條&#xff0c;影響UI美觀。開始以為切圖沒切好&#xff0c;實則不是。如圖&#xff1a; ->解決&#xff1a; 將該圖片資源WrapMode改為Clamp

2021年03月 C/C++(三級)真題解析#中國電子學會#全國青少年軟件編程等級考試

第1題&#xff1a;找和為K的兩個元素 在一個長度為n(n < 1000)的整數序列中&#xff0c;判斷是否存在某兩個元素之和為k。 時間限制&#xff1a;1000 內存限制&#xff1a;65536 輸入 第一行輸入序列的長度n和k&#xff0c;用空格分開。 第二行輸入序列中的n個整數&#xff…

Rancher-RKE-install 部署k8s集群

一、為什么用Rancher-RKE-install 1.CNCF認證的k8s安裝程序。 2.有中文文檔。 二、安裝步驟 1.下載Rancher-Rke的二進制包-下面是項目的地址 GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distrib…

探索樹算法:C語言實現二叉樹與平衡樹

探索樹算法&#xff1a;C語言實現二叉樹與平衡樹 樹是計算機科學中一個重要且廣泛應用的數據結構&#xff0c;它在許多領域都有著重要作用。本篇博客將深入介紹兩種常見的樹算法&#xff1a;二叉樹遍歷和平衡二叉樹&#xff08;AVL樹&#xff09;&#xff0c;并提供在C語言中的…

Python學習筆記_基礎篇(五)_數據類型之字典

一.基本數據類型 整數&#xff1a;int 字符串&#xff1a;str(注&#xff1a;\t等于一個tab鍵) 布爾值&#xff1a; bool 列表&#xff1a;list 列表用[] 元祖&#xff1a;tuple 元祖用&#xff08;&#xff09; 字典&#xff1a;dict 注&#xff1a;所有的數據類型都存在想對…

Python Opencv實踐 - 圖像平移

import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#圖像平移 #cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) # M是仿射變換矩陣&#xff0c;對于平移來說M是一…

《Zookeeper》源碼分析(十五)之 選舉算法

FastLeaderElection FastLeaderElection實現了接口Election&#xff0c;選舉方法為lookForLeader()&#xff0c;選舉算法的核心邏輯也在該方法中。 數據結構 構造函數 start() 啟動選舉通信網絡 lookForLeader() 選舉核心算法 FastLeaderElection.logicalclock屬性用于標…

從零開發短視頻電商 自動化測試WebUI端到端測試-Playwright

文章目錄 Playwright是什么Playwright入門示例添加Maven依賴示例代碼啟動驗證 功能自動等待內置Web斷言可視化UI模式減慢操作截圖錄屏腳本錄制 高級識別驗證碼 Playwright是什么 https://playwright.dev/ https://playwright.dev/java/ Playwright為現代 Web 應用程序提供可…

linux 系統中vi 編輯器和庫的制作和使用

目錄 1 vim 1.1 vim簡單介紹 1.2 vim的三種模式 1.3 vim基本操作 1.3.1命令模式下的操作 1.3.2 切換到文本輸入模式 1.3.3 末行模式下的操作 2 gcc編譯器 2.1 gcc的工作流程 2.2 gcc常用參數 3 靜態庫和共享&#xff08;動態&#xff09;庫 3.1庫的介紹 3.2靜態…

實現Java異步調用的高效方法

文章目錄 為什么需要異步調用&#xff1f;Java中的異步編程方式1. 使用多線程2. 使用Java異步框架 異步調用的關鍵細節結論 &#x1f389;歡迎來到Java學習路線專欄~實現Java異步調用的高效方法 ☆* o(≧▽≦)o *☆嗨~我是IT陳寒&#x1f379;?博客主頁&#xff1a;IT陳寒的博…

Python 3 使用HBase 總結

HBase 簡介和安裝 請參考文章&#xff1a;HBase 一文讀懂 Python3 HBase API HBase 前期準備 1 安裝happybase庫操作hbase 安裝該庫 pip install happybase2 確保 Hadoop 和 Zookeeper 可用并開啟 確保Hadoop 正常運行 確保Zookeeper 正常運行3 開啟HBase thrift服務 使用命…

【EI復現】一種建筑集成光儲系統規劃運行綜合優化方法(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

目標檢測(Object Detection)

文章目錄 1. 目標檢測1.1 目標檢測簡要概述及名詞解釋1.2 IOU1.3 TP TN FP FN1.4 precision&#xff08;精確度&#xff09;和recall&#xff08;召回率&#xff09; 2. 邊框回歸Bounding-Box regression3. Faster R-CNN3.1 Faster-RCNN&#xff1a;conv layer3.2 Faster-RCNN&…

跨境電商平臺(例如阿里巴巴、蝦皮)的商品數據如何收集?

跨境電商是指通過互聯網&#xff0c;以跨越國家或地區邊界的方式進行電子商務交易的商業行為。傳統的電子商務通常是在同一國家或地區內進行&#xff0c;而跨境電商則側重于跨國貿易。跨境電商通過在線平臺&#xff08;如阿里巴巴、亞馬遜等&#xff09;或第三方服務商&#xf…

【數據結構】堆的實現,堆排序以及TOP-K問題

目錄 1.堆的概念及結構 2.堆的實現 2.1初始化堆 2.2銷毀堆 2.3取堆頂元素 2.4返回堆的大小 2.5判斷是否為空 2.6打印堆 2.7插入元素 2.8堆的向上調整 2.9彈出元素 2.10堆的向下調整 3. 建堆時間復雜度 4. 堆的應用 4.1 堆排序 4.2 TOP-K問題 1.堆的概念及結構 …

FFmpeg5.0源碼閱讀——VideoToobox硬件解碼

摘要&#xff1a;本文描述了FFmpeg中videotoobox解碼器如何進行解碼工作&#xff0c;如何將一個編碼的碼流解碼為最終的裸流。 ??關鍵字&#xff1a;videotoobox,decoder,ffmpeg ??VideoToolbox 是一個低級框架&#xff0c;提供對硬件編碼器和解碼器的直接訪問。 它提供視頻…

WebRTC音視頻通話-RTC直播本地視頻及相冊視頻文件

WebRTC音視頻通話-RTC直播本地視頻及相冊視頻文件 WebRTC音視頻通話-RTC直播本地視頻文件效果圖如下 WebRTC音視頻通話-RTC直播本地視頻文件時候&#xff0c;用到了AVPlayer、CADisplayLink。 一、通過AVPlayer播放本地視頻 AVPlayer是什么&#xff1f; AVPlayer是基于AV…

35_windows環境debug Nginx 源碼-CLion配置CMake和啟動

文章目錄 生成 CMakeLists.txt 組態檔35_windows環境debug Nginx 源碼-CLion配置CMake和啟動生成 CMakeLists.txt 組態檔 修改auto目錄configure文件,在 . auto/make 上邊增加 . auto/cmake, 大概在 106 行。在 auto 目錄下創建cmake 文件其內容如下: #!/usr/bin/env bash NG…