首页 > 编程语言 > Mybatis -如何处理clob类型数据
2021
09-13

Mybatis -如何处理clob类型数据

Mybatis 处理clob类型数据

当执行sql语句,返回的是map类型时, 比如

public List<Map<String, Object>> query(@Param("sql") String sql)

得到的数据是List<Map>类型数据,此时,如果有返回的有clob字段时,数据是这样的oracle.sql.CLOB@63636de0 ,显然,这不是我想要的,我需要的是字符串数据

那么怎么来处理clob字段呢,很简单

就是定义类型处理器,来专门处理Clob字段,将Clob数据转换为字符串数据返回

@MappedJdbcTypes(JdbcType.CLOB)
public class ClobTypeHandle extends BaseTypeHandler<Object> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)
            throws SQLException {
        ps.setObject(i, parameter);
    }
    @Override
    public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getString(columnName);
    }
    @Override
    public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return rs.getString(columnIndex);
    }
    @Override
    public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getString(columnIndex);
    }
}

Mybatis 大字段clob处理

1. 实体类View

package com.ttt.sysManager.po;
public class View {
 private String VIEW_NAME;
 private String TEXT_LENGTH;
 private String TEXT;<span style="white-space:pre"> </span>// clob大字段
 private String EDITIONING_VIEW;
 private String READ_ONLY;
        // ...(get、set方法)
}

2. Dao

List<View> getViewByPage(Map<String, Object> map);

3. XML

<resultMap id="viewResultMap" type="com.ttt.sysManager.po.View">     
        <result property="VIEW_NAME" column="VIEW_NAME"/>
        <result property="TEXT_LENGTH" column="TEXT_LENGTH"/>  
        <result property="TEXT" column="TEXT" javaType="String" jdbcType="VARBINARY"/>  
        <result property="EDITIONING_VIEW" column="EDITIONING_VIEW" />  
        <result property="READ_ONLY" column="READ_ONLY" />  
</resultMap>  
 
<select id="getViewByPage" parameterType="map" resultMap="viewResultMap" >
 SELECT VIEW_NAME,TEXT_LENGTH,TEXT,EDITIONING_VIEW,READ_ONLY FROM (
  SELECT A.*,  ROWNUM RN
    FROM (SELECT * FROM user_views) A
    WHERE ROWNUM <![CDATA[<=]]> #{endRow}
  ) WHERE RN <![CDATA[>]]> #{startRow}
</select>

4. 写入

写入大字段与普通写入无区别,但是数据库字段类型需为clob,如为blob会报错,暂不解决。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自学编程网。

编程技巧