MyBatis(四) MyBatis的枚举处理器

       有些数据表可能会有状态status这个字段,可能有多个值,如:0-正常、1-历史、-1-删除,我们可以在查询出来手动校验状态值是否符合要求,但是,有更多值得情况就相对麻烦了点,这时可以考虑使用MyBatis提供的枚举处理器来实现。

       1. 在t_user表新增一个status字段:

       MyBatis(四) MyBatis的枚举处理器_第1张图片

       2. 新增一个状态的枚举类:

           MyBatis(四) MyBatis的枚举处理器_第2张图片

           对应修改User类:

           MyBatis(四) MyBatis的枚举处理器_第3张图片

       3. 创建自定义的类型处理器

           也可以使用默认的org.apache.ibatis.type.EnumOrdinalTypeHandler处理器,但是它对于的默认的枚举索引是从0开始,对于我们自己定义枚举值的就不行了,因此,我们实现接口自己处理。

package cn.linjk.mybatistest.handler;

import cn.linjk.mybatistest.type.TypeStatus;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class TypeStatusHandler implements TypeHandler {
    private final Map typeStatusMap = new HashMap<>();

    public TypeStatusHandler() {
        for (TypeStatus typeStatus : TypeStatus.values()) {
            typeStatusMap.put(typeStatus.getValue(), typeStatus);
        }
    }

    @Override
    public void setParameter(PreparedStatement ps, int i, TypeStatus parameter, JdbcType jdbcType)
            throws SQLException {
        ps.setInt(i, parameter.getValue());
    }

    @Override
    public TypeStatus getResult(ResultSet rs, String columnName) throws SQLException {
        Integer value = rs.getInt(columnName);
        return typeStatusMap.get(value);
    }

    @Override
    public TypeStatus getResult(ResultSet rs, int columnIndex) throws SQLException {
        Integer value = rs.getInt(columnIndex);
        return typeStatusMap.get(value);
    }

    @Override
    public TypeStatus getResult(CallableStatement cs, int columnIndex) throws SQLException {
        Integer value = cs.getInt(columnIndex);
        return typeStatusMap.get(value);
    }
}

       4. 修改mybatis-config.xml文件,增加类型处理器配置

MyBatis(四) MyBatis的枚举处理器_第4张图片

       5. 测试

MyBatis(四) MyBatis的枚举处理器_第5张图片

       达到预期结果,MyBatis在处理Java类型和数据库类型时,使用TypeHandler类型处理器对其进行转换,MyBatis在启动时会加载所有的JDBC对应的类型处理器。

你可能感兴趣的:(JAVA,MyBatis从零开始)