版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1053765496/article/details/120484312
import org.apache.commons.lang3.StringUtils;
import java.nio.charset.StandardCharsets;
import java.util.base64;
public class Encrypt {
public static String encrypt(String src) {
if (StringUtils.isBlank(src))
return null;
try {
return base64.getEncoder().encodeToString(src.getBytes(StandardCharsets.UTF_8));
} catch (Exception e) {
throw new RuntimeException("encrypt fail!", e);
}
}
public static String decrypt(String src) {
if (StringUtils.isBlank(src))
return null;
try {
byte[] asBytes = base64.getDecoder().decode(src);
return new String(asBytes, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException("decrypt fail!", e);
}
}
}
import org.apache.ibatis.type.baseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class EncryptHandler extends baseTypeHandler {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, Encrypt.encrypt((String) parameter));
}
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
String columnValue = rs.getString(columnName);
return Encrypt.decrypt(columnValue);
}
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String columnValue = rs.getString(columnIndex);
return Encrypt.decrypt(columnValue);
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
String columnValue = cs.getString(columnIndex);
return Encrypt.decrypt(columnValue);
}
}
加解密:
使用如下:
方式一:返回的是实体类
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(autoResultMap = true) // 和数据库映射的实体类需要加autoResultMap 这个属性,加解密才生效
public class SysUser {
@TableField(typeHandler = EncryptHandler.class)
private String mobile;
}
方式二:返回的是自定义对象 (xml的方式)
@Data
public class AmountVO implements Serializable {
private String payeeAccount;
private String payeeRealName;
}
方式三:返回的是自定义对象 (注解的方式)
@Data
public class AmountVO implements Serializable {
private String payeeAccount;
private String payeeRealName;
}
@Results({
@Result(column = "payee_account", property = "payeeAccount", typeHandler = EncryptHandler.class),
@Result(column = "payee_real_name", property = "payeeRealName", typeHandler = EncryptHandler.class)})
@Select("select * from Amount where userId = #{userId }")
List findPage(Long userId);
查询
// 使用Encrypt.encrypt把数据加密进行搜索 Long mobileCount = new LambdaQueryChainWrapper<>(sysUserMapper).eq(SysUser::getMobile, Encrypt.encrypt(dto.getMobile())).count();效果如下:



