数据库字段值和实体类属性值转换器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 }

 

posted @ 2023-10-08 09:46  元飞贤彦  阅读(379)  评论(0)    收藏  举报