看一篇文章掌握五个技能,还不赶紧进来学!!!
本篇文章包括五个知识点,分为创建自定义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 条评论) “” |