目录- 1、编写handler
- 2、编写加解密util
- 3、实体及字段配置
- 4、自定义mapper语句
- 总结
1、编写handler
@MappedJdbcTypes(JdbcType.VARCHAR)
public class EncryptHandler extends BaseTypeHandler<String> {
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, String parameter, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, EncryptFieldUtil.encrypt(parameter));
}
@Override
public String getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
return EncryptFieldUtil.decrypt(resultSet.getString(columnName));
}
@Override
public String getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
return EncryptFieldUtil.decrypt(resultSet.getString(columnIndex));
}
@Override
public String getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
return EncryptFieldUtil.decrypt(callableStatement.getString(columnIndex));
}
}
2、编写加解密util
public class EncryptFieldUtil {
/**
* 数据库字段加密key
*/
private static final byte[] KEY = "sdfdfsdfdfghhhss".getBytes(StandardCharsets.UTF_8);
/**
* 加密字段
*/
public static String encrypt(String value) {
if (StrUtil.isBlank(value)) {
return value;
}
AES aes = SecureUtil.aes(KEY);
return aes.encryptHex(value);
}
/**
* 解密字段
*/
public static String decrypt(String value) {
if (null == value) {
return null;
}
try {
return SecureUtil.aes(KEY).decryptStr(value);
} catch (CryptoException e) {
return value;
}
}
}
3、实体及字段配置
@TableName(value = "表名", autoResultMap = true)
@TableField(typeHandler = EncryptHandler.class)
4、自定义mapper语句
<resultMap id="TitlePO" type="com.techhf.tenant.infrastruture.po.TitlePO">
<result column="title_name" property="titleName" typeHandler="com.techhf.common.mybatis.handler.EncryptHandler"/>
</resultMap>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。
您可能感兴趣的文章:- MyBatis-Plus解决字段不更新为null的六大解决方案
- mybatis-plus查询字段中含有关键词时异常的问题及解决方案
- MyBatis-plus与数据库字段的映射方式
- Mybatis-plus默认不能更新null字段的问题及解决过程
- Mybatis-Plus根据自定义注解实现自动加解密的示例代码
- 基于Mybatis-Plus拦截器实现MySQL数据加解密的示例代码
|