Mybatis存取Oracle Clob資料型別的方法
阿新 • • 發佈:2021-10-09
目錄
一、實體類
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>
四、儲存資料時
作者:落花桂 出處:https://www.cnblogs.com/nthforsth/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。<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>