返回顶部
首页 > 资讯 > 后端开发 > Python >使用mybatis的typeHandler对clob进行流读写方式
  • 289
分享到

使用mybatis的typeHandler对clob进行流读写方式

2024-04-02 19:04:59 289人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录typeHandler对clob进行流读写第一步:编写typehandler文件第二步:在mybatis的配置文件中添加<typeHandlers>节点第三步myba

typeHandler对clob进行流读写

分为三步:

第一步:编写typehandler文件

package com.dcits.edps.common.utils; 
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.springframework.util.FileCopyUtils;
 

 @MappedTypes({String.class})
 @MappedJdbcTypes({JdbcType.CLOB})
 public class OscarClobTypeHandler extends BaseTypeHandler<String> {
	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType)
			throws SQLException {
		final StringReader sr = new StringReader(parameter);
		final int length = parameter.getBytes().length;
		ps.setCharacterStream(i, sr, length);
		sr.close();		
	}
 
	@Override
	public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
		final OutputStream outPutStream = new ByteArrayOutputStream();
		final Writer writer = new OutputStreamWriter(outPutStream);
		try {
			Reader reader = rs.getCharacterStream(columnName);
			if(null == reader){
				return null;
			}else {
				FileCopyUtils.copy(reader, writer);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return outPutStream.toString();
	}
 
	@Override
	public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		final OutputStream outPutStream = new ByteArrayOutputStream();
		final Writer writer = new OutputStreamWriter(outPutStream);
		try {
			Reader reader = rs.getCharacterStream(columnIndex);
			if(null == reader){
				return null;
			}else {
				FileCopyUtils.copy(reader, writer);
			} 
		}catch (IOException e) {
			e.printStackTrace();
		}
		return outPutStream.toString();
	}
 
	@Override
	public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		final OutputStream outPutStream = new ByteArrayOutputStream();
		final Writer writer = new OutputStreamWriter(outPutStream);
		try {
			Reader reader = cs.getCharacterStream(columnIndex);
			if(null == reader){
				return null;
			}else {
				FileCopyUtils.copy(reader, writer);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return outPutStream.toString();
	} 
 }
 

第二步:在mybatis的配置文件中添加<typeHandlers>节点

需要注意的是,mybatisd的配置文件中的<configuration>节点中的子节点需要有顺序

顺序为:properties—>settings—>typeAliases—>typeHandlers—>objectFactory—>objectWrapperFactory—>plugins—>environments—>databaseIdProvider—>mappers。

<typeHandlers> 
   <typeHandler handler="com.dcits.edps.common.utils.OscarClobTypeHandler"/> 
</typeHandlers>

第三步

①在resultMap中需要添加jdbcType,这是在读取时使用了流,如下所示

 <resultMap type="com.dcits.edps.swgl.common.bean.SwMain" id="swmain">
      <result property="fsfh" column="fsfh" jdbcType="CLOB"/>
  </resultMap>

② 在写入数据的时候使用:

fsfh=#{fsfh,jdbcType=CLOB}

mybatis处理clob字段

1.由于数据库中 ggnr 字段是clob 类型(可以存储流对象),所以后台对前台传递的长文本进行处理。

2.经过一番查找,找到mybatis处理clob字段的方法,对clob 进行了尝试处理,发现存的数据长度超过一两百,数据库该字段就为空,存的短可以。

3.经过查阅跟公司同事沟通,总结两种方案:(1).直接获取数据库连接,操作预编译对象(老方法,高并发数据库容易卡死,不符)。(2).sql使用 begin end 方法(经测试可以存储字节4000以内的数据,要求不符)

4.好吧再次查阅jdbc官方文档,上边提到ojdbc 存在数据限制情况,建议高版本,然后就换了ojdbc6 问题解决。

换了之后,ok。如果有懒加载,添加上这个 cglib-nodep-3.2.4.jar

附上Mapper处理:

1.修改Mapper.xml

  <result column="GGNR" property="ggnr"  javaType="java.lang.String" jdbcType="CLOB" typeHandler="org.apache.ibatis.type.ClobTypeHandler"/>

2.sql

    insert into CQGG(ggnr) values(#{ggnr,jdbcType=CLOB})

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用mybatis的typeHandler对clob进行流读写方式

本文链接: https://lsjlt.com/news/162419.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用mybatis的typeHandler对clob进行流读写方式
    目录typeHandler对clob进行流读写第一步:编写typehandler文件第二步:在mybatis的配置文件中添加<typeHandlers>节点第三步myba...
    99+
    2024-04-02
  • 如何使用mybatis的typeHandler对clob进行流读写
    这篇文章主要介绍“如何使用mybatis的typeHandler对clob进行流读写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用mybatis的typeHandler对clob进行流读写”...
    99+
    2023-06-26
  • C#使用NPOI对word进行读写
    目录一、简介操作Word的类库:二、简单使用1、XWPFDocument类的实例化2、设置页面的大小3、段落处理4、表格处理5、页眉页脚处理三、综合示例四、参考一、简介 操作Word...
    99+
    2024-04-02
  • 使用Python对Excel进行读写操作
    学习Python的过程中,我们会遇到Excel的读写问题。这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据。下面我们介绍如何实现使用Python对Excel进...
    99+
    2022-06-04
    操作 Python Excel
  • Java操作IO对象流进行数据的读写
    对象的读写 使用ObjectInputStream和ObjectOutputStream读写对象(序列化与反序列化)。 只有字节流没有字符流 .类必须实现Serializa...
    99+
    2024-04-02
  • java利用缓冲区及流式对大文件进行高效读写
    当处理大文件时,使用适当的技术和方法可以提高读写性能和效率。下面是一些针对大文件读写的示例说明: 字符流缓冲区及分块读写  BufferedInputStream 和 BufferedOutputStream 大文件读取: try (F...
    99+
    2023-09-14
    java 数学建模 开发语言
  • 在spring中使用mybatis实现对mysql数据库进行读写分离
    这期内容当中小编将会给大家带来有关在spring中使用mybatis实现对mysql数据库进行读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言    &n...
    99+
    2023-05-31
    spring mybatis mysql
  • C#如何使用NPOI对word进行读写
    这篇文章主要介绍了C#如何使用NPOI对word进行读写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#如何使用NPOI对word进行读写文章都会有所收获,下面我们一起来看看吧。一、简介操作Word的类库:N...
    99+
    2023-07-02
  • 使用R语言怎么对二进制文件进行读写
    这篇文章将为大家详细讲解有关使用R语言怎么对二进制文件进行读写,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。二进制文件是一个文件,其中包含仅以位和字节形式存储的信息(0和1),它们是不可读的...
    99+
    2023-06-08
  • 使用R语言怎么对CSV文件进行读写
    这期内容当中小编将会给大家带来有关使用R语言怎么对CSV文件进行读写,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在R中,我们可以从存储在R环境外部的文件读取数据,还可以将数据写入由操作系统存储和访问的文...
    99+
    2023-06-08
  • Python实现按特定格式对文件进行读写的方法示例
    本文实例讲述了Python实现按特定格式对文件进行读写的方法。分享给大家供大家参考,具体如下: #! /usr/bin/env python #coding=utf-8 class ResultFile...
    99+
    2022-06-04
    示例 格式 文件
  • Linux下如何使用Octave对文件进行读写操作
    小编给大家分享一下Linux下如何使用Octave对文件进行读写操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Octave 是一个 Linux 上类似于 Ma...
    99+
    2023-06-27
  • 使用MyBatis进行简单的更新与查询方式
    目录MyBatis增删改查的用法sql映射文件myBatis框架的缓存myBatis框架的新增myBatis框架的更新     myBatis...
    99+
    2022-11-13
    MyBatis更新 MyBatis查询 MyBatis更新与查询
  • 怎么使用MyBatis的注解方式进行SQL映射
    使用MyBatis的注解方式进行SQL映射可以简化代码,不需要编写XML文件。以下是使用MyBatis的注解方式进行SQL映射的步骤...
    99+
    2024-04-09
    MyBatis
  • 怎么在python中使用Pandas对MySQL数据库进行读写
    本篇文章给大家分享的是有关怎么在python中使用Pandas对MySQL数据库进行读写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、read_sql_query 读取 m...
    99+
    2023-06-14
  • 使用Python进行二进制文件读写的简单方法(推荐)
    总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块。 python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也...
    99+
    2022-06-04
    简单 二进制文件 方法
  • jdbc和mybatis的流式查询使用方法
    目录导语: jdbc流式查询: mybatis流式查询: 导语: 有些时候我们所需要查询的数据量比较大,但是jvm内存又是有限制的,数据量过大会导致内存溢出。这个时候就可以使用流式...
    99+
    2024-04-02
  • C#中如何使用文件IO和流操作进行数据读写
    C#中如何使用文件IO和流操作进行数据读写,需要具体代码示例在C#编程中,文件IO和流操作是常用的技术,用于读取和写入文件的数据。无论是处理文本文件、二进制文件,还是读取网络流数据,我们都可以通过文件IO和流操作来实现。文件IO和流操作提供...
    99+
    2023-10-22
    C#文件IO操作 C#流操作 数据读写技术
  • linux中如何使用Octave对音频文件进行读写操作
    这篇文章主要介绍了linux中如何使用Octave对音频文件进行读写操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Octave 是一个 Linux 上类似于 Matlab...
    99+
    2023-06-16
  • Java使用Collections.sort对中文进行排序方式
    目录使用Collections.sort对中文进行排序Collections.sort 排序 注解使用Collections.sort对中文进行排序 使用collections.so...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作