mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18:24 +08:00
51 lines
1.5 KiB
Markdown
51 lines
1.5 KiB
Markdown
# 字典回写
|
||
|
||
字典回写,指的是在一个实体类中,可能会有很多业务字段,当我们发现有某个数据库字段赋值后,主动去为业务赋值。
|
||
|
||
比如,在数据库存有一个字段为 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 1
|
||
@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` 还可以参考 [这里](./table.md)。
|