1. 程式人生 > 其它 >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/     本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。