1、 定义TypeHandler
public class EncryptTypeHandler extends BaseTypeHandler<String> {
private static final String KEY = "9a4601004c1111ec9444b7a8a6f90000";
private static final AES AES = SecureUtil.aes(SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), KEY.getBytes()).getEncoded());
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setString(i, null);
return;
}
ps.setString(i, AES.encryptHex(parameter));
}
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
return AES.decryptStr(rs.getString(columnName));
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return AES.decryptStr(rs.getString(columnIndex));
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return AES.decryptStr(cs.getString(columnIndex));
}
}
至于加解密可以自己定义,我这里使用的是hutool
工具类,依赖如下
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.22</version>
</dependency>
2、使用
@TableName(value = "sys_user", autoResultMap = true)
public class SysUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String userName;
private Long groupId;
@TableField(typeHandler = EncryptTypeHandler.class)
private String password;
@TableField(typeHandler = EncryptTypeHandler.class)
private String phoneNumber;
private LocalDateTime cTime;
private LocalDateTime uTime;
//省略 getter、setter方法
}
重点
@TableField(typeHandler = EncryptTypeHandler.class)
@TableName(value = "sys_user", autoResultMap = true)
然后就可以使用mybatis-plus自带的BaseMapper进行CRUD,可以自动执行TypeHandler