超全又实用的一般wb项目使用方法,轻轻松松拿下知识点

看一篇文章掌握五个技能,还不赶紧进来学!!!

本篇文章包括五个知识点,分为创建自定义java类型、自定义类的转换处理器、配置自定义类型和类型转换器、以及查询使用和新增修改项目。

创建自定义Java类型

创建一个空白类,在mapper.xml文件查询和新增修改时标注说明,表示需要mybatis进行相关类型转换。

@Alias("SecretField")
public class SecretField {
}

自定义类的转换处理器

这里使用国密SM4进行加解密,当然算法可自由选择别的如AES等。

@MappedTypes(SecretField.class)
public class SecretFieldTypeHandler extends BaseTypeHandler {

    private static final Logger log = LoggerFactory.getLogger(SecretFieldTypeHandler.class);

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        try {
            if (StringUtils.hasText(parameter)) {
                String encryptStr = Sm4Util.encryptData_ECB(parameter);
                ps.setString(i, encryptStr);
            }
        } catch (Exception e) {
            ps.setString(i, parameter);
            log.error("mybatis加密参数异常,i:{},parameter:{}", i, parameter);
        }
    }

    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String columnValue = rs.getString(columnName);
        try {
            if (StringUtils.hasText(columnValue)) {
                columnValue = Sm4Util.decryptData_ECB(columnValue);
            }
        } catch (Exception e) {
            log.error("mybatis解密参数异常,columnName:{}, columnValue:{}", columnName, columnValue);
        }
        return columnValue;
    }

    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return null;
    }

    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return null;
    }
}

配置自定义类型和类型转换器

这一步也可使用相关注解完成。

配置文件为mybatis的配置文件,如mybatis-config.xml。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>


    
    

    
            
    
    
        
    

查询使用

查询返回需通过resultMap映射,在加密字段进行javaType指明需要的类型转换器

另外如果旧代码中结果集大量直接使用map返回,时间紧张的情况下,则可考虑写一个工具类,在service里调用进行手动解密。

    
        
    

新增修改使用

在设置相关参数值时,也就是在#{}里,使用javaType指明需要的类型转换器

   insert into ... values(...
    
        #{sfz,jdbcType=VARCHAR,javaType=SecretField},
    
   )
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章