Mybatis自定义typeHandler处理空数据

Mybatis自定义typeHandler处理空数据

Mybatis中支持自定义处理类对数据库返回为 null 的数据进行处理,记录如下

1.自定义一个数据处理类

  • 下面是一个处理字符串类型的数据处理类,将数据库中返回的 null 值转换为空字符串
package com.example;
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 java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * 将数据库返回的 null 值转为空字符串 ""
 * 继承BaseTypeHandler类,重写其中的方法
 * MappedTypes注解: 指定处理Java哪些种类的数据
 * MappedJdbcTypes注解: 指定处理数据库哪些种类的数据
 */
@MappedTypes({String.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MybatisStringHandler extends BaseTypeHandler<String> {
    /**
     * 处理入参
     * @param ps 预处理的SQL执行对象
     * @param i 字段下标
     * @param parameter 入参
     * @param jdbcType 字段在数据库中的类型
     */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter);
    }
    /**
     * 处理数据库中返回的可能为空的数据,转为空字符串
     * @param rs 结果集
     * @param columnName 数据库返回数据字段名
     */
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getString(columnName) == null ? "" : rs.getString(columnName);
    }
    /**
     * 处理数据库中返回的可能为空的数据,转为空字符串
     * @param rs 结果集
     * @param columnIndex 数据库返回数据字段下标
     */
    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return rs.getString(columnIndex) == null ? "" : rs.getString(columnIndex);
    }
    /**
     * 处理数据库中存储过程返回的可能为空的数据,转为空字符串
     * @param rs 结果集
     * @param columnIndex 数据库返回数据字段下标
     */
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getString(columnIndex) == null ? "" : cs.getString(columnIndex);
    }
}

2.在mapper文件中使用

在创建 resultMap 结果映射时在相应字段的 typeHandler 属性指定即可

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.DemoMapper">
    <resultMap id="BaseResultMap" type="com.example.Demo">
        <id column="id" jdbcType="INTEGER" property="id" />
        <!-- 使用 typeHandler 属性指定即可 -->
        <result column="demo" jdbcType="VARCHAR" property="demo" typeHandler="com.example.MybatisStringHandler"/>
    </resultMap>
<mapper>
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页