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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ab7253957/article/details/78870084

      业务需求是对字符串数据进行加密后入库,使用类型处理器会有一个短板,即此类型的所有数据都会被自定义的类型处理器进行处理,如果是只对几个特殊字段进行加密,则这种方法是行不通的,本人尝试过自定义类型,可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处理


猜你喜欢

转载自blog.csdn.net/ab7253957/article/details/78870084
今日推荐