Mybatis存取Oracle Clob数据类型的方法

时间:2021-10-09
本文章向大家介绍Mybatis存取Oracle Clob数据类型的方法,主要包括Mybatis存取Oracle Clob数据类型的方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、实体类

package com.nthforsth;
public Bean{

  // 尽管要存储Clob类型数据,接收时用String类型接收
  private String text;
}

二、重写mybatis的sql执行器

  由于Oracle默认会把字符串先转换成varchar2类型,而varchar2类型最大长度为4000。
  为了解决保存数据字段超过4000 char 问题,所以重写mybatis的sql执行器,并在 Mapper.xml 文件中调用

package com.nthforsth;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import java.sql.*;


/**
 * 解决保存数据字段超过4000 char 问题
 * @author yuans
 * @create 2020-06-02-14:38
 */
public class OracleClobTypeHandler implements TypeHandler<Object> {

    @Override
    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        Clob clob = ps.getConnection().createClob();
        clob.setString(1, (String) parameter);
        ps.setClob(i, clob);
    }

    @Override
    public Object getResult(ResultSet rs, String columnName) throws SQLException {
        Clob clob =  rs.getClob(columnName);
        return (clob == null || clob.length() == 0) ? null : clob.getSubString((long) 1, (int) clob.length());
    }

    @Override
    public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
        return null;
    }

    @Override
    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return null;
    }
}

三、插入数据时

  Mapper.xml 文件中写 typeHandler 的全类名

<insert id="insertData" parameterType="com.nthforsth.Bean">
INSERT INTO 
    Table(TEXT)
    VALUES(#{text,typeHandler=com.nthforsth.OracleClobTypeHandler})
</insert>

四、保存数据时

 <resultMap id="BaseData" type="com.nthforsth.Bean">
        <result  column="text" property="text"  typeHandler="com.nthforsth.OracleClobTypeHandler"/>
 </resultMap>

 <select id="selectData"  resultMap="BaseData">
        select text from table
 </select>
作者:落花桂
         
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/nthforsth/p/15386931.html