首页
学习
活动
专区
工具
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 第四步:测试结果.

1.2K30

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

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

1.9K30

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...,实现只是每次被请求时打开和关闭连接。

51720

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 语句。

83920

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、缓存信息等等,我们在下一篇文章中再进行梳理讨论

96900

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

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

2.5K20

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缓存(这里要注意是如果

8K10

MyBatis 如何实现流式查询?

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

1K10

MyBatis流式查询,如此强大!

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

1.1K10

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

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

1.9K30

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 配置映射,可以通过在映射 部分配置 fetchSize="-2147483648"(Integer.MIN_VALUE) 来流式读取结果。...> 而使用代码配置映射,则可以使用 @Options(fetchSize = Integer.MIN_VALUE) 并返回 Cursor 从而让 SQL 结果能被流式读取。

2.2K30

MyBatis-1.XML映射

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

56820

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

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

30110

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

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

80600

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

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

74600

试试MyBatis 流式查询吧,好用

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

27220

MySQL中流式查询使用

其实在 MySQL 中提供了流式查询,这允许把符合条件数据一部分一部分加载到内存,本 Chat 就来具体讲解如何在 MySQL中使用流式查询: 使用流式查询前,我们是如何在 MySQL 中进行查询数据...如何使用 JDBC 编程方式在 MySQL 中使用流式查询? 二、普通查询 ?...mysql驱动接受到请求后会向MySQL服务器发起TCP请求,服务器端根据条件查询出匹配数据,然后通过TCP链接发送到MySQL驱动 MySQL驱动内则会把符合条件数据缓存到驱动内,等服务器返回了所有符合条件数据后...四、最后 上面我们讲解了JDBC中流式查询使用,那么如下在Mybatis使用那? 如何Mybatis使用 MyBatisCursorItemReader 进行流式查询?...如何Mybatis使用 ResultHandler 进行流式查询? 什么是客户端流式查询和服务器端流式查询?

1.5K20

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.3K20
领券