使用mybatis的typeHandler对clob进行流读写

分为三步:

第一步:编写typehandler文件:

package com.dcits.edps.common.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.springframework.util.FileCopyUtils;

/** 
 * 

标题:处理Clob字段

*

描述:使用流对Clob字段进行读写

*

编译者:zt

*

版本:1.0

*/ @MappedTypes({String.class}) @MappedJdbcTypes({JdbcType.CLOB}) public class OscarClobTypeHandler extends BaseTypeHandler { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { final StringReader sr = new StringReader(parameter); final int length = parameter.getBytes().length; ps.setCharacterStream(i, sr, length); sr.close(); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { final OutputStream outPutStream = new ByteArrayOutputStream(); final Writer writer = new OutputStreamWriter(outPutStream); try { Reader reader = rs.getCharacterStream(columnName); if(null == reader){ return null; }else { FileCopyUtils.copy(reader, writer); } } catch (IOException e) { e.printStackTrace(); } return outPutStream.toString(); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { final OutputStream outPutStream = new ByteArrayOutputStream(); final Writer writer = new OutputStreamWriter(outPutStream); try { Reader reader = rs.getCharacterStream(columnIndex); if(null == reader){ return null; }else { FileCopyUtils.copy(reader, writer); } }catch (IOException e) { e.printStackTrace(); } return outPutStream.toString(); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { final OutputStream outPutStream = new ByteArrayOutputStream(); final Writer writer = new OutputStreamWriter(outPutStream); try { Reader reader = cs.getCharacterStream(columnIndex); if(null == reader){ return null; }else { FileCopyUtils.copy(reader, writer); } } catch (IOException e) { e.printStackTrace(); } return outPutStream.toString(); } }

第二步:在mybatis的配置文件中添加节点。需要注意的是,mybatisd的配置文件中的节点中的子节点需要有顺序,顺序为:properties—>settings—>typeAliases—>typeHandlers—>objectFactory—>objectWrapperFactory—>plugins—>environments—>databaseIdProvider—>mappers。

           
                    
         
第三步:

               ①在resultMap中需要添加jdbcType,这是在读取时使用了流,如下所示

        
                   
        
             ② 在写入数据的时候使用:

          

        fsfh=#{fsfh,jdbcType=CLOB}


 

你可能感兴趣的:(使用mybatis的typeHandler对clob进行流读写)