数据库字段值和实体类属性值转换器AttributeConverter的使用
通过AttributeConverter类可以轻松实现实体属性值和数据库字段值的转换,最常见的一个使用场景是对字段的加密和解密的统一处理。示例代码如下:
转换器类代码:
1 import javax.persistence.AttributeConverter; 2 import javax.persistence.Converter; 3 4 @Converter 5 public class EncryptConverter implements AttributeConverter<String, String> { 6 @Override 7 public String convertToDatabaseColumn(String s) { 8 if(StringUtils.isBlank(s)){ 9 return s; 10 } 11 try { 12 return Sm4Util.encrypt(s); 13 } catch (Exception e) { 14 throw new RuntimeException(e); 15 } 16 } 17 18 @Override 19 public String convertToEntityAttribute(String s) { 20 if(StringUtils.isBlank(s)){ 21 return s; 22 } 23 try { 24 return Sm4Util.decrypt(s); 25 } catch (Exception e) { 26 throw new RuntimeException(e); 27 } 28 } 29 }
实体类代码:
其中password已经被@Convert(converter = EncryptConverter.class)注解
1 @Data 2 @Accessors(chain = true) 3 @Entity 4 public class DbConfigInfo extends BaseEntity implements Serializable { 5 private static final long serialVersionUID = 461513158917003224L; 6 /** 7 * 编号 主键 8 */ 9 @Id 10 @GeneratedValue(strategy = GenerationType.IDENTITY) 11 private Integer id; 12 /** 13 * 用途 0 源数据库 1 目标数据库 14 */ 15 private Integer purpose; 16 /** 17 * 数据源名称 18 */ 19 private String name; 20 /** 21 * 数据库种类 0 关系型数据库 1 非关系型数据库 2 后关系型数据库 3 大数据组件 22 */ 23 private Integer dbKind; 24 /** 25 * 数据库类型 26 */ 27 private Integer dbType; 28 /** 29 * 数据库IP 30 */ 31 private String dbIp; 32 /** 33 * 数据库端口 34 */ 35 private Integer dbPort; 36 /** 37 * 数据库服务名,目前只有informix在用 38 */ 39 private String dbServerName; 40 /** 41 * 实例名、SID、数据库名 42 */ 43 private String dbExample; 44 /** 45 * 模式名称 46 */ 47 private String dbSchema; 48 /** 49 * 扩展字段,只有个别数据库有,如Oracle的数据库角色等 50 */ 51 private String extendField; 52 /** 53 * 用户名 54 */ 55 private String username; 56 /** 57 * 密码 58 */ 59 @Convert(converter = EncryptConverter.class) 60 private String password; 61 /** 62 * 编码 63 */ 64 private String encoded; 65 /** 66 * 描述 67 */ 68 private String description; 69 /** 70 * 审核状态 0 未审核 1 审核通过 2 审核不通过 71 */ 72 private Integer auditStatus; 73 /** 74 * 审核人ID 75 */ 76 private Integer auditUserId; 77 /** 78 * 是否已更新 0 新增 1 修改 2 删除 79 */ 80 @Column(insertable = false) 81 private Integer updateFlag; 82 /** 83 * 是否已删除 84 */ 85 private Integer isDelete; 86 87 }

浙公网安备 33010602011771号