文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用mybatis的typeHandler对clob进行流读写

2023-06-26 05:15

关注

这篇文章主要介绍“如何使用mybatis的typeHandler对clob进行流读写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用mybatis的typeHandler对clob进行流读写”文章能帮助大家解决问题。

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> {@Overridepublic 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();} @Overridepublic 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();} @Overridepublic 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();} @Overridepublic 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&mdash;>settings&mdash;>typeAliases&mdash;>typeHandlers&mdash;>objectFactory&mdash;>objectWrapperFactory&mdash;>plugins&mdash;>environments&mdash;>databaseIdProvider&mdash;>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字段

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

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

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

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

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

附上Mapper处理:

修改Mapper.xml

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

sql

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

关于“如何使用mybatis的typeHandler对clob进行流读写”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯