自定义Mybatis类型处理器对参数和结果集进行自定义处理

来源:互联网 发布:医院自己签字 知乎 编辑:程序博客网 时间:2024/06/04 00:23

      业务需求是对字符串数据进行加密后入库,使用类型处理器会有一个短板,即此类型的所有数据都会被自定义的类型处理器进行处理,如果是只对几个特殊字段进行加密,则这种方法是行不通的,本人尝试过自定义类型,可String不能被继承,再者JavaBean要被其他项目引用,自定义类型毕竟不合适,我们这里只介绍一下类型处理器的使用

    1.自定义类型处理器实现TypeHandler接口,代码如下,这里的Strings是我自定义的字符串类型,不提倡如此使用

public class StringsTypeHandler implements TypeHandler<Strings> {    @Override    public void setParameter(PreparedStatement ps, int i, Strings parameter, JdbcType jdbcType) throws SQLException {        System.out.println(jdbcType);        if (parameter != null && StringUtils.isNotEmpty(parameter.toString())) {            //加密            String value = CodecUtil.encodeBASE64(parameter.toString());            ps.setString(i, value);        }    }    @Override    public Strings getResult(ResultSet rs, String columnName) throws SQLException {        String value = rs.getString(columnName);        if (StringUtils.isNotEmpty(value)) {            //解密            value = CodecUtil.decodeBASE64(value);        }        return new Strings(value);    }    @Override    public Strings getResult(ResultSet rs, int columnIndex) throws SQLException {        String value = rs.getString(columnIndex);        if (StringUtils.isNotEmpty(value)) {            //解密            value = CodecUtil.decodeBASE64(value);        }        return new Strings(value);    }    @Override    public Strings getResult(CallableStatement cs, int columnIndex) throws SQLException {        String value = cs.getString(columnIndex);        if (StringUtils.isNotEmpty(value)) {            //解密            value = CodecUtil.decodeBASE64(value);        }        return new Strings(value);    }}

2.在mybatis-config文件中配置

<typeHandlers><typeHandler javaType="com.jrq.core.encrypt.Strings" handler="com.jrq.core.encrypt.StringsTypeHandler"/></typeHandlers>
Strings对应Java类型,StringsTypeHandler对应类型处理器


现在JavaBean里所有的Strings类型都会被StringsTypeHandler处理


原创粉丝点击