zoukankan      html  css  js  c++  java
  • 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>
    
    作者:落花桂
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    MySQL之架构与历史(二)
    MySQL之架构与历史(一)
    MySQL之体系结构与存储实例
    Redis实现之复制(二)
    Redis实现之复制(一)
    选项卡
    滑动效果
    选择器
    下拉列表
    1.__tostring()这个方法在类里可以直接输出对象。2.克隆对象的运用
  • 原文地址:https://www.cnblogs.com/nthforsth/p/15386931.html
Copyright © 2011-2022 走看看