通过mybatis-plus进行数据库字段加解密方式
更新时间:2026年01月09日 08:37:00 作者:ronshi
文章主要介绍了在Java开发中,从编写处理程序(handler)到实现加解密工具(util),再到配置实体和字段,以及自定义MyBatis的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>总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
反射机制:getDeclaredField和getField的区别说明
这篇文章主要介绍了反射机制:getDeclaredField和getField的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06


最新评论