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>
作者:落花桂
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。