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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM