Skip to content

字典回写

字典回写,指的是在一个实体类中,可能会有很多业务字段,当我们发现有某个数据库字段赋值后,主动去为业务赋值。

比如,在数据库存有一个字段为 sex,类型为 int,用于保存用户的性别,0 :女,1 :男,2 :未知。 同时,在 entity 实体类中,还存在一个业务属性 sexString,用于在前台显示,那么我们使用如下的解决方案。

step 1: 为实体类编写一个 set 监听器(SetListener

java
public class AccountOnSetListener implements SetListener {
    @Override
    public Object onSet(Object entity, String property, Object value) {
        Account account = (Account) entity;
        if (property.equals("sex") && value != null){
            switch (value){
                case 0:
                    account.setSexString('女');
                    break;
                case 1:
                    account.setSexString('男');
                    break;
                default:
                    account.setSexString('未知');
            }
        }
        return value;
    }
}

step 2: 为实体类配置 onSet 监听

java
@Table(value = "tb_account", onSet = AccountOnSetListener.class)
public class Account {

    @Id(keyType = KeyType.Auto)
    private Long id;

    private int sex;
    
    @Column(ignore = true) //非数据库字段,需配置忽略该属性
    private String sexString;
    
    //getter setter
}

更多的 onSet 还可以参考 这里