首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用MyBatis BlobInputStreamTypeHandler / ClobReaderTypeHandler流式传输select请求的内容?

MyBatis是一个开源的持久层框架,它提供了许多类型处理器(TypeHandler)来处理数据库字段与Java对象之间的映射关系。其中,BlobInputStreamTypeHandler和ClobReaderTypeHandler是用于处理数据库中的BLOB和CLOB类型字段的流式传输。

在使用MyBatis进行select请求时,如果查询结果中包含BLOB或CLOB类型的字段,可以通过使用BlobInputStreamTypeHandler或ClobReaderTypeHandler来实现流式传输,以避免一次性加载整个字段内容,从而提高性能和减少内存占用。

具体使用方法如下:

  1. 配置TypeHandler 在MyBatis的配置文件中,可以通过typeHandlers元素配置自定义的TypeHandler。例如:
代码语言:txt
复制
<typeHandlers>
  <typeHandler handler="com.example.BlobInputStreamTypeHandler" javaType="java.io.InputStream"/>
  <typeHandler handler="com.example.ClobReaderTypeHandler" javaType="java.io.Reader"/>
</typeHandlers>

其中,com.example.BlobInputStreamTypeHandler和com.example.ClobReaderTypeHandler是自定义的TypeHandler类,分别用于处理BLOB和CLOB类型字段。

  1. 定义查询语句 在Mapper XML文件中,定义select语句,并在结果映射中指定使用BlobInputStreamTypeHandler或ClobReaderTypeHandler。例如:
代码语言:txt
复制
<select id="selectData" resultType="com.example.Data">
  SELECT id, content
  FROM my_table
</select>

在结果映射中,将content字段指定为使用BlobInputStreamTypeHandler或ClobReaderTypeHandler。例如:

代码语言:txt
复制
<resultMap id="dataResultMap" type="com.example.Data">
  <id property="id" column="id"/>
  <result property="content" column="content" typeHandler="com.example.BlobInputStreamTypeHandler"/>
</resultMap>
  1. 获取流式数据 在Java代码中,使用MyBatis的SqlSession对象执行查询语句,并获取流式数据。例如:
代码语言:txt
复制
try (SqlSession session = sqlSessionFactory.openSession()) {
  DataMapper mapper = session.getMapper(DataMapper.class);
  Data data = mapper.selectData();
  
  try (InputStream inputStream = data.getContent()) {
    // 使用流式数据进行处理
  }
}

在以上代码中,data.getContent()方法返回一个InputStream对象,通过该对象可以获取流式的BLOB数据。

总结: 使用MyBatis的BlobInputStreamTypeHandler和ClobReaderTypeHandler可以实现对BLOB和CLOB类型字段的流式传输。通过配置TypeHandler和定义查询语句,可以在Java代码中获取流式数据,并进行相应的处理。

腾讯云相关产品推荐:

  • 腾讯云对象存储(COS):用于存储和管理海量文件数据,支持流式上传和下载。详情请参考:腾讯云对象存储(COS)
  • 腾讯云数据库(TencentDB):提供多种数据库类型,支持BLOB和CLOB类型字段的存储和查询。详情请参考:腾讯云数据库(TencentDB)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

面试Mybatis之类型处理器​(typeHandlers)

Mybatis之类型处理器 无论是MyBatis在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java...StringTypeHandler java.lang.String CHAR, VARCHAR ClobReaderTypeHandler java.io.Reader - ClobTypeHandler...注意:使用上述的类型处理器将会覆盖已经存在的处理 Java 的 Boolean 类型属性和 NUMERIC 参数及结果的类型处理器。...要注意 MyBatis 不会通过窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 NUMERIC 类型的字段, 以使其能够绑定到正确的类型处理器上。...id="find" resultMap="studentMap"> SELECT * FROM Student select> 第四步:测试结果.

1.3K30

0基础学习Mybatis系列数据库操作框架——自定义类型处理器

这个字段我们一般使用字符串存储,格式是个Json。这样后续就可以很方便进行序列化和反序列化。 本文主要讲解如何自定义类型处理器,让Mybatis自动帮我们做序列化和反序列化。...这样Mybatis在处理info_ltext字段时,就会使用自定义类型处理器JsonListHandler来处理。...语句,我们可以使用《0基础学习Mybatis系列数据库操作框架——字段映射》中的方法,在映射表中定义。...数据库兼容的 NUMERIC 或 DECIMAL StringTypeHandler java.lang.String CHAR, VARCHAR ClobReaderTypeHandler java.io.Reader...Select类型的SQL,除了直接在字段上标明类型处理器,还可以在resultMap上指定。

15400
  • MyBatis 实战:增删改查入门

    在MyBatis中需要频繁用到类的全限定名称,为了方便使用,我们配置了 com.ivandu.mybatis.model包,这样配置后,在使用类的时候不需要写包名的部分,只使用Country即可。...-- 使用 resultType 时,一定要保证,你属性名与字段名相同;如果不相同,就使用 resultMap --> select id="selectUserById" parameterType...日志的最低级别是 TRACE,在这个日志级别下,MyBatis会输出执行 SQL 过程中的详细信息,这个级别适合在开发时使用。...例如在上节的基础上在目录 src/resources 下建立了 Java 属性文件 config.properties ,用于配置一些数据库的信息,内容如下: driver=com.mysql.cj.jdbc.Driver...,实现的只是每次被请求时打开和关闭连接。

    55920

    面试官:从 MySQL 数据库里读取 500w 数据行进行处理,应该怎么做更效益化?

    但是 普通查询等待时间与游标查询等待时间原理上是不一致的,前者是一致在读取网络缓冲区的数据,没有响应到业务层面;后者是 MySQL 在准备临时数据空间,没有响应到 JDBC 数据准备完成后,进行到传输数据阶段...,所以没有进行生产、测试多环境验证,小伙伴感兴趣可以自行测试 3 MyBatis 如何使用流式查询 上文都是在描述如何使用 JDBC 原生 API 进行查询,ORM 框架 Mybatis 也针对流式查询进行了封装...> handler); } Mybatis 流式查询调用时间消耗:≈ 18s JDBC 流式与 MyBatis 封装的流式读取对比 MyBatis 相对于原生的流式还是慢上了不少,但是考虑到底层的封装的特性...,这点性能还是可以接受的 从内存占比而言,两者波动相差无几 MyBatis 相对于原生 JDBC 更为的方便,因为封装了回调函数以及序列化对象等特性 两者具体的使用,可以针对项目实际情况而定,没有最好的...但是这两种方式会占用数据库连接,使用中不会释放,所以线上针对大数据量业务用到游标和流式操作,一定要进行并发控制 另外针对 JDBC 原生流式查询,Mybatis 中也进行了封装,虽然会慢一些,但是 功能以及代码的整洁程度会好上不少

    2.2K30

    Mybatis 详解

    如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能支持但仍可正常工作 true、 false false autoMappingBehavior 指定 MyBatis 应如何自动映射列到字段或属性...这是 MyBatis 的基本原则之一,也是将焦点和努力放在查询和结果映射的原因。简单查询的 select 元素是非常简单的。...将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true timeout 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。...和 delete 语句) timeout 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。...1.3.4 SqlSession 的使用   执行语句方法被用来执行定义在 SQL 映射的 XML 文件中的 SELECT、INSERT、UPDATE 和 DELETE 语句。

    86320

    Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    - 支持 true | false - 默认 false 属性 autoMappingBehavior - 指定 MyBatis 应如何自动映射列到字段或属性。...select 语句强制使用 resultMap 来代替 resultType。...有三种内建的数据源类型(也就是 type="UNPOOLED|POOLED|JNDI"): UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。...默认值:3(新增于 3.4.5) poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。...对于 Mapper 具体的映射配置文件,是 Mybatis 最复杂、最核心的组件,其中的标签内容体系也是特别详实,包括它的参数类型、动态SQL、定义SQL、缓存信息等等,我们在下一篇文章中再进行梳理讨论

    1.1K00

    直播修仙:使用.NET 的 WebView2 如何获取请求的响应内容,以微信直播的互动直播为例

    视频号直播截图 今天我们只聊技术,互动直播平台没有提供相关的 API 如何通过观众的评论来互动的?...这里我们 通过 WebView2 来获取请求评论的响应内容来实现。...此事件可以获取到所有请求的内容,这里只需要获取/mmfinderassistant-bin/live/msg的链接请求即可,然后获取请求返回的内容。...,点赞和礼物的消息,可以通过类似的方式审查请求获取到对应的内容。...本文虽以互动直播为例,但主要为介绍如何使用.NET 的 WebView2 获取请求的响应内容。如果你对这种互动直播感兴趣可以通过 .NET 技术自己开发一个新的互动直播模式。

    2.7K20

    MyBatis中使用流式查询避免数据量过大导致OOM

    一、前言 前面介绍了裸露JDBC 方式使用流式编程,下面介绍下MYbatis中如何使用 二、Mybaits中MyBatisCursorItemReader的使用 2.1 配置 MyBatisCursorItemReader...三、Mybatis中ResultHandler的使用 3.1 配置 Mapper.xml设置 ?...JDBC编程最简单,灵活,但是sql语句需要分散写到需要调用数据库操作的地方,不便于维护,Mybatis底层还是使用裸露JDBC编程API实现的,并且使用xml文件统一管理sql语句,虽然解析执行时候会有点开销...对于同等条件下搜索结果为600万条记录的时候使用游标与不使用时候内存占用对比: 非流式 ? image.png 流式 ?...这里在总结下:client发送select请求给Server后,Server根据条件筛选符合条件的记录,然后就会把记录发送到自己的发送buffer,等buffer满了就flush缓存(这里要注意的是如果

    8.2K10

    MyBatis 如何实现流式查询?

    导读:本文主要围绕MyBatis流式查询方式进行总结,通过里流式查降低内存使用。总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发 。...流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。 流式查询的好处是能够降低内存使用。...一、MyBatis 流式查询接口 ---- MyBatis 提供了一个叫 org.apache.ibatis.cursor.Cursor 的接口类用于流式查询,这个接口继承了 java.io.Closeable...,本文假设读者对 Spring 数据库事务的使用比较熟悉了),2 处执行数据库事务,而数据库事务的内容则是调用 Mapper 对象的流式查询。...这个方案看上去最简洁,但请注意 Spring 框架当中注解使用的坑:只在外部调用时生效。在当前类中调用这个方法,依旧会报错。 以上是三种实现 MyBatis 流式查询的方法。 - END -

    1.1K10

    MyBatis-1.XML映射

    true|false False autoMappingBehavior 指定 MyBatis 应如何自动映射列到字段或属性。...Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。...有三种内建的数据源类型(也就type=”[UNPOOLED|POOLED|JNDI]”): UNPOOLED – 这个数据源的实现只是每次被请求时打开和关闭连接。...POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。...默认值:3 (新增于 3.4.5) poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。

    59020

    MyBatis流式查询,如此强大!

    流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。 流式查询的好处是能够降低内存使用。...MyBatis 流式查询接口 MyBatis 提供了一个叫 org.apache.ibatis.cursor.Cursor 的接口类用于流式查询,这个接口继承了 java.io.Closeable 和...但构建 Cursor 的过程不简单。 如何构建 Cursor 我们举个实际例子。...,本文假设读者对 Spring 数据库事务的使用比较熟悉了),2 处执行数据库事务,而数据库事务的内容则是调用 Mapper 对象的流式查询。...这个方案看上去最简洁,但请注意 Spring 框架当中注解使用的坑:只在外部调用时生效。在当前类中调用这个方法,依旧会报错。 以上是三种实现 MyBatis 流式查询的方法。

    1.1K10

    TiDB 最佳实践系列(五)Java 数据库应用开发指南

    1.1 Mapper 参数 MyBatis 的 Mapper 中支持两种参数: select 1 from t where id = #{param1} 会作为 prepare 语句转换为 select...1.3 Streaming 结果 前面介绍了在 JDBC 中如何使用流式读取结果,除了 JDBC 相应的配置外,在 MyBatis 中如果希望读取超大结果集合也需要注意: 可以通过在 mapper 配置中对单独一条...可以使用带 ResultHandler 的查询接口来避免一次获取整个结果集。 可以使用 Cursor 类来进行流式读取。...对于使用 xml 配置映射,可以通过在映射 select> 部分配置 fetchSize="-2147483648"(Integer.MIN_VALUE) 来流式读取结果。...> 而使用代码配置映射,则可以使用 @Options(fetchSize = Integer.MIN_VALUE) 并返回 Cursor 从而让 SQL 结果能被流式读取。

    2.3K30

    怎样让 API 快速且轻松地提取所有数据?

    高效地流式传输数据 过去,大多数 Web 工程师会很快否定用一个 API 端点流式输出无限数量行的这种想法。HTTP 请求是应该尽快处理的!...处理请求所花费的时间但凡超过几秒钟都是一个危险信号,这表明我们应该重新考虑某些事情才是。 Web 堆栈中的几乎所有内容都针对快速处理小请求进行了优化。...实现说明 实现这种模式时需要注意的关键是内存使用:如果你的服务器在需要为一个导出请求提供服务时都需要缓冲 100MB 以上的数据,你就会遇到麻烦。 某些导出格式比其他格式更适合流式传输。...然后对于后续页面,取第 20 个 id 值并要求大于该值的内容: select * from items where id > 20 limit 21 这些查询都可以快速响应(因为它针对有序索引)并使用了可预测的固定内存量...挑战:如何返回错误 如果你正在流式传输一个响应,你会从一个 HTTP 200 代码开始……但是如果中途发生错误,可能是在通过数据库分页时发生错误会怎样?

    2K30

    图文并茂解析Mybatis配置加载过程!

    ; 今天我们就介绍以下第一个阶段中,Mybatis是如何读取配置的 二、配置加载的核心类 建造器三个核心类 在 MyBatis 中负责加载配置文件的核心类有三个,类图如下: MyBatis加载配置文件核心类...,但是没有使用建造者模式 的“肉体”(流式编程风格),只用了灵魂(屏蔽复杂对象的创建过程),把建造者模式演绎 成了工厂模式;后面还会对这三个类源码进行分析; 居然这三个对象使用的是建造者模式,那么我们稍后介绍下什么是建造者模式...建造者模式是实现流式编程风格的一种方式; 与工厂模式区别 建造者模式应用场景如下: 需要生成的对象具有复杂的内部结构,实例化对象时要屏蔽掉对象代码与复杂对象的实例化过程解耦,可以使用建造者模式;简而言之...建造者模式 生产定制版 建造的对象更加复杂,是一个复合产品,它由各个部件复合而成,部件不同产品对象不同,生成的产品粒度细; 客户端参与了产品的创建,决定了产品的类型和内容,参与度高;适合实例化对象时属性变化频繁的场景...文件中的 resultMap 节点,使用 ResultMapping 来封装id,result 等子元素; MappedStatement:用于存储 mapper.xml 文件中的 select、insert

    40510

    试试 MyBatis 流式查询,这个你知道吗?

    基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。...先分享一个MyBatis知识点思维导图给大家 Mybatis知识总结.jpg MyBatis 流式查询接口 MyBatis提供了一个叫org.apache.ibatis.cursor.Cursor的接口类用于流式查询...通过指定 Mapper 方法的返回值为 Cursor 类型,MyBatis就知道这个查询方法一个流式查询。...,本文假设读者对 Spring 数据库事务的使用比较熟悉了),2 处执行数据库事务,而数据库事务的内容则是调用 Mapper 对象的流式查询。...这个方案看上去最简洁,但请注意 Spring 框架当中注解使用的坑:只在外部调用时生效。在当前类中调用这个方法,依旧会报错。 以上是三种实现 MyBatis 流式查询的方法。

    85100

    试试MyBatis 流式查询吧,好用

    基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。...MyBatis 流式查询接口 MyBatis 提供了一个叫 org.apache.ibatis.cursor.Cursor 的接口类用于流式查询,这个接口继承了 java.io.Closeable 和...通过指定 Mapper 方法的返回值为 Cursor 类型,MyBatis 就知道这个查询方法一个流式查询。...,本文假设读者对 Spring 数据库事务的使用比较熟悉了),2 处执行数据库事务,而数据库事务的内容则是调用 Mapper 对象的流式查询。...这个方案看上去最简洁,但请注意 Spring 框架当中注解使用的坑:只在外部调用时生效。在当前类中调用这个方法,依旧会报错。 以上是三种实现 MyBatis 流式查询的方法。

    28520

    强大:MyBatis ,三种流式查询方法

    关于MyBatis的知识点总结了个思维导图分享给大家 基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。...MyBatis 流式查询接口 MyBatis 提供了一个叫 org.apache.ibatis.cursor.Cursor 的接口类用于流式查询,这个接口继承了 java.io.Closeable 和 ...通过指定 Mapper 方法的返回值为 Cursor 类型,MyBatis 就知道这个查询方法一个流式查询。...,本文假设读者对 Spring 数据库事务的使用比较熟悉了),2 处执行数据库事务,而数据库事务的内容则是调用 Mapper 对象的流式查询。...这个方案看上去最简洁,但请注意 Spring 框架当中注解使用的坑:只在外部调用时生效。在当前类中调用这个方法,依旧会报错。 以上是三种实现 MyBatis 流式查询的方法。

    88400

    JAVA面试中的SSM框架基础面试题

    request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用的是jstl...Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。 3、什么情况用注解,什么情况用xml绑定?...注解使用情况:Sql语句简单时 xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件) 4、Mybatis在核心处理类叫什么?..." /> property:属性名 column:共同列 ofType:集合中元素的类型 select:要连接的查询 8、Mybatis配置一对一?...select last _insert_id() 11、Mybatis如何分页,分页原理? RowBounds对象分页 在Sql内直接书写,带有物理分页 12、Mybatis工作原理?

    1.4K20

    Java SSM框架常见面试题,良心整理,

    request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用的是jstl...Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。 3、什么情况用注解,什么情况用xml绑定?...注解使用情况:Sql语句简单时 xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件) 4、Mybatis在核心处理类叫什么?..." /> property:属性名 column:共同列 ofType:集合中元素的类型 select:要连接的查询 8、Mybatis配置一对一?...select last _insert_id() 11、Mybatis如何分页,分页原理? RowBounds对象分页 在Sql内直接书写,带有物理分页 12、Mybatis工作原理? ?

    1.8K50
    领券