当前位置: 首页 > news >正文

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如何解决百万级大数据量查询慢问题

相关文章:

MyBatis XML映射处理CLOB和BLOB类型

Mybatis的MapperXML映射文件应该处理数据库字段类型为CLOB和BLOB类型的数据呢&#xff1f;首先我们先看下CLOB和BLOB这两种数据类型的介绍。 介绍 使用Mybatis时涉及到两种特殊类型的处理&#xff0c;分别是Blob&#xff08;Binary Large Object&#xff09;和Clob&#xff0…...

FPGA_学习_14_第一个自写模块的感悟和ila在线调试教程与技巧(寻找APD的击穿偏压)

前一篇博客我们提到了&#xff0c;如果要使用算法找到Vbr&#xff0c;通过寻找APD采集信号的噪声方差的剧变点去寻找Vbr是一个不错的方式。此功能的第一步是在FPGA中实现方差的计算&#xff0c;这个我们已经在上一篇博客中实现了。 继上一篇博客之后&#xff0c;感觉过了很久了…...

【2023新教程】树莓派定时自动拍照并上传腾讯云对象存储COS

1 换源 仅适用于Release date: May 3rd 2023、Debian version: 11 (bullseye)这个树莓派OS版本&#xff0c;其他版本不保证有效。 首先使用如下命令&#xff0c;查看自己树莓派的架构。 uname -a结果如下&#xff1a; 如果红圈处显示为aarch64&#xff0c;使用命令sudo na…...

校企合作谋发展 合作共赢谱新篇|云畅科技与湖南民族职业学院签订校企合作协议

产业是经济发展的重要引擎&#xff0c;人才是产业发展的重要资源。为积极探索软件人才培育新路径&#xff0c;共商政产学研协同新机制&#xff0c;8月8日&#xff0c;云畅科技与湖南省民族职业学院教育技术学院软件技术专业签订校企合作协议。 会上&#xff0c;学院副校长王志平…...

vue技术学习

vue快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vue快速入门</title> </head> <body> <!--老师解读 1. div元素不是必须的&#xff0c;也可以是其它元素&#xff0…...

基于空间的图卷积神经网络:GNN

目录 欧氏空间中神经网络发挥巨大最作用&#xff0c;DNA&#xff0c;知识图谱三维或者多维空间不行 邻接矩阵实现图结构的矩阵化表示&#xff1a;造梦师 局和操作实现层内消息传递&#xff1a;带线的连接机传递消息 GCN通过邻域聚合实现特征提取 SVM支持向量机 ​编辑 硬分…...

.net core发布到IIS上出现 HTTP 错误 500.19

1.检查.net core 环境运行环境是否安装完成&#xff0c;类似如下环境 2.IIS是否安装全 本次原因就是IIS未安装全导致的 按照网上说的手动重启iis&#xff08;iisreset&#xff09;也不行...

01_Redis单线程与多线程

01——Redis单线程与多线程 一、Redis是单线程还是多线程 在谈Redis的单线程或多线程时&#xff0c;需要根据版本来区分。 在redis 3.x之前&#xff0c;redis是单线程的从redis 4.x开始&#xff0c;redis引入多线程。处理客户端请求时&#xff0c;使用单线程&#xff1b;在异…...

机器学习——随机森林【手动代码】

随机森林这个内容&#xff0c;是目前来说。。。最最最简单&#xff0c;最好理解&#xff0c;应该也是最好实现的了&#xff01;&#xff01;&#xff01; 先挖坑&#xff0c;慢慢填 随机森林&#xff0c;这个名字取得&#xff0c;果然深得该算法的核心精髓&#xff0c;既随机&a…...

Vue 2 处理边界情况

访问元素和组件 通过Vue 2 组件基础一文的学习&#xff0c;我们知道组件之间可以通过传递props或事件来进行通信。 但在一些情况下&#xff0c;我们使用下面的方法将更有用。 1.访问根实例 根实例可通过this.$root获取。 我们在所有子组件中都可以像上面那样访问根实例&…...

写一个mysql 正则表达式,每三个img标签图片后面添加<hr>

你可以使用MySQL的REGEXP_REPLACE函数来实现这个需求。下面是一个示例的正则表达式和SQL语句&#xff1a; sql UPDATE your_table SET your_column REGEXP_REPLACE(your_column, (<img[^>]*>){3}, $0<hr>) WHERE your_column REGEXP (<img[^>]*>){3}…...

Spring MVC异常处理

Spring MVC异常处理 Spring MVC异常处理机制HandlerExceptionResolver的实现类DefaultHandlerExceptionResolver实现类DefaultHandlerExceptionResolver 在Controller的请求处理方法中手动使用try…catch块捕捉异常&#xff0c;当捕捉到指定的异常时&#xff0c;系统返回对应的…...

Centos7安装docker后默认开启docker0的网卡|卸载默认网卡

docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升…...

04_Redis与mysql数据双写一致性案例

04——redis与mysql数据双写一致性 一、canal 是什么 canal[ka’nel,中文翻译为水道/管道/沟渠/运河&#xff0c;主要用途是用于MySQL数据库增量日志数据的订阅、消费和解析&#xff0c;是阿里巴巴开发并开源的,采用Java语言开发&#xff1b; 历史背景是早期阿里巴巴因为杭州和…...

vue的开发者工具下载『保姆级别』

1.先进官网 极简插件_Chrome扩展插件商店_优质crx应用下载 (zzzmh.cn) 2.搜索vue devtools&#xff0c;点击进去 3.下载插件 4.下载到文件下你自己的文件下&#xff1a;我的是下载到E盘下。 5.压缩到当前目录下 6.电脑进入拓展程序&#xff08;不同的浏览器操作不同&#xff…...

vue的scrollTop手机环境设置值失效,本地正常可以赋值

获取div盒子ref或者document获取都行 监听方法 一定要加this.$nexttick,在本地测试只用nexttick是没有问题的&#xff0c;但是到手机测试就不行了&#xff0c;原因是因为手机渲染比本地更快&#xff0c;所以结合setTimeout使用 如果有更好的处理方法&#xff0c;恳请大佬指点一…...

[前端系列第7弹]Vue:一个渐进式的 JavaScript 框架

Vue 是一个用于构建用户界面的 JavaScript 框架&#xff0c;它具有以下特点&#xff1a; 渐进式&#xff1a;Vue 可以根据不同的使用场景&#xff0c;灵活地选择使用库或者框架的方式&#xff0c;从而实现渐进式的开发。响应式&#xff1a;Vue 通过数据绑定和虚拟 DOM 技术&am…...

C#键盘按键对应Keys类大全

...

SpringBoot 学习(03): 弱语言的注解和SpringBoot注解的异同

弱语言代表&#xff1a;Hyperf&#xff0c;一个基于 PHP Swoole 扩展的常驻内存框架 注解概念的举例说明&#xff1b; 说白了就是&#xff0c;你当领导&#xff0c;破烂事让秘书帮你去安排&#xff0c;你只需要批注一下&#xff0c;例如下周要举办一场活动&#xff0c;秘书将方…...

CloudQuery:更好地管理你的 OceanBase 数据库

前言&#xff1a;作为 OceanBase 的生态合作伙伴&#xff0c;CloudQuery&#xff08;简称“CQ”&#xff09; 最新发布的社区版 2.2.0 新增了 OceanBase 数据库&#xff0c;为企业使用 OceanBase 数据库提供全面的支持。包括连接与认证、查询与分析、数据安全与权限管理&#x…...

OpenClaw多模态实践:Qwen3-VL:30B图片识别与飞书集成

OpenClaw多模态实践&#xff1a;Qwen3-VL:30B图片识别与飞书集成 1. 为什么需要多模态办公助手 上周三凌晨两点&#xff0c;我还在手动整理飞书群里堆积的237张会议纪要截图。这些图片里有手写白板、Excel数据透视表、产品原型草图&#xff0c;还有十几页的PDF转图片。当我意…...

ESP8266红外TCP服务框架:轻量级协议网关设计

1. 项目概述IrServiceBase是专为 ESP8266 系列微控制器&#xff08;包括 ESP-01、NodeMCU、Wemos D1 Mini 等&#xff09;设计的 Arduino C 库&#xff0c;其核心定位并非直接驱动红外发射/接收硬件&#xff0c;而是构建一个可复用、可扩展的 TCP/IP 红外服务框架。该库不实现底…...

如何使用Aimeos构建高效产品目录:从基础商品到复杂配置型产品的完整指南

如何使用Aimeos构建高效产品目录&#xff1a;从基础商品到复杂配置型产品的完整指南 【免费下载链接】aimeos Integrated online shop based on Laravel 10 and the Aimeos e-commerce framework for ultra-fast online shops, scalable marketplaces, complex B2B application…...

Raspotify多用户环境配置终极指南:在家庭网络中共享Spotify音乐服务

Raspotify多用户环境配置终极指南&#xff1a;在家庭网络中共享Spotify音乐服务 【免费下载链接】raspotify A Spotify Connect client that mostly Just Works™ 项目地址: https://gitcode.com/gh_mirrors/ra/raspotify 想要在家庭网络中打造一个完美的音乐共享系统吗…...

LongCat-Image-Editn效果展示:建筑效果图‘添加中文标牌+调整光照’案例

LongCat-Image-Edit效果展示&#xff1a;建筑效果图‘添加中文标牌调整光照’案例 1. 开篇&#xff1a;当AI学会“装修”建筑效果图 想象一下&#xff0c;你手里有一张刚出炉的建筑效果图&#xff0c;客户突然提出两个新需求&#xff1a;“能不能给大楼加上我们公司的中文招牌…...

量子力学的抽象地位与c语言等价

多种量子/粒子的各种表象&#xff0c;就像 cpu 的微架构指令集&#xff0c;量子力学的状态矢量表示和密度矩阵表示就像c语言。 中间从状态矢量到具体粒子的具体表象的转换&#xff0c;就像是一个编译器的工作。量子力学表象与编译器架构的深刻类比这个类比非常精妙且深刻&#…...

DanKoe 视频笔记:重塑自我:如何摆脱糟糕的生活状态

在本教程中&#xff0c;我们将探讨为何生活可能陷入困境&#xff0c;并学习如何通过一系列有意识的微小选择、提升个人标准以及利用互联网的力量来重塑自我&#xff0c;最终走上价值创造者的道路。我们将分析问题的根源&#xff0c;并提供具体的行动步骤。 微小的选择&#xf…...

掌控散热:OmenSuperHub开源风扇控制与性能优化工具深度解析

掌控散热&#xff1a;OmenSuperHub开源风扇控制与性能优化工具深度解析 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普暗影精灵系列游戏本打造的开源控制软件&#xff0c;提供完全离线的硬件监控…...

利用Timeshift在Linux系统中实现高效系统快照与灾难恢复

1. 为什么你需要Timeshift来保护你的Linux系统 作为一个用了十几年Linux的老用户&#xff0c;我见过太多因为系统崩溃而抓狂的场景。记得有一次在更新内核时突然断电&#xff0c;结果系统直接罢工&#xff0c;那天我花了整整8小时才把环境重新配置好。如果你也遇到过类似情况&a…...

duilib应用部署实战:基于NSIS的轻量化安装包制作

1. 为什么选择NSIS打包duilib应用 当你用duilib完成了一个漂亮的Windows桌面应用&#xff0c;接下来最头疼的问题就是&#xff1a;怎么让用户能像安装QQ那样一键安装你的程序&#xff1f;这就是我们今天要解决的"最后一公里"问题。 我经历过用zip压缩包发给客户&am…...