mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
update docs
This commit is contained in:
parent
23b7e8e445
commit
a75d6d3e42
@ -54,6 +54,9 @@ export default defineConfig({
|
||||
{ text: 'SQL 审计', link: '/zh/audit' },
|
||||
{ text: '多数据源', link: '/zh/multi-datasource' },
|
||||
{ text: '事务管理', link: '/zh/tx' },
|
||||
{ text: '字段权限', link: '/zh/columns_permission' },
|
||||
{ text: '字段加密', link: '/zh/columns_encrypt' },
|
||||
{ text: '字典回显', link: '/zh/columns_dict' },
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
50
docs/zh/columns_dict.md
Normal file
50
docs/zh/columns_dict.md
Normal file
@ -0,0 +1,50 @@
|
||||
# 字典回写
|
||||
|
||||
字典回写,指的是在一个实体类中,可能会有很多业务字段,当我们发现有某个数据库字段赋值后,主动去为业务赋值。
|
||||
|
||||
比如,在数据库存有一个字段为 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)。
|
||||
41
docs/zh/columns_encrypt.md
Normal file
41
docs/zh/columns_encrypt.md
Normal file
@ -0,0 +1,41 @@
|
||||
# 字段加密
|
||||
|
||||
字段加密,指的是数据库在存入了明文内容,但是当我们进行查询时,返回的内容为加密内容,而非明文内容。
|
||||
|
||||
以下是 MyBatis-Flex 字段加密示例:
|
||||
|
||||
**step 1:** 为实体类编写一个 set 监听器(`SetListener`)
|
||||
|
||||
```java
|
||||
public class AccountOnSetListener implements SetListener {
|
||||
@Override
|
||||
public Object onSet(Object entity, String property, Object value) {
|
||||
|
||||
if (value != null){
|
||||
//对字段内容进行加密
|
||||
value = encrypt(value);
|
||||
}
|
||||
|
||||
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 String userName;
|
||||
|
||||
private String password;
|
||||
|
||||
//getter setter
|
||||
}
|
||||
```
|
||||
|
||||
更多的 `onSet` 还可以参考 [这里](./table.md)。
|
||||
51
docs/zh/columns_permission.md
Normal file
51
docs/zh/columns_permission.md
Normal file
@ -0,0 +1,51 @@
|
||||
# 字段权限
|
||||
|
||||
字段权限,指的是在一张表中设计了许多字段,但是不同的用户(或者角色)查询,返回的字段结果是不一致的。
|
||||
比如说:tb_account 表中,有 user_name 和 password 字段,但是 password 字段只允许用户本人查询,
|
||||
或者超级管理员查询,这种场景下,我们会用到 字段权限 的功能。
|
||||
|
||||
在 `@Table()` 注解中,有一个配置名为 `onSet`,用于设置这张表的 `设置` 监听,这里的 `设置` 监听指的是:
|
||||
当我们使用 sql 、调用某个方法去查询数据,得到的数据内容映射到 entity 实体,mybatis 通过 setter 方法去设置 entity 的值时的监听。
|
||||
|
||||
|
||||
以下是示例:
|
||||
|
||||
**step 1:** 为实体类编写一个 set 监听器(`SetListener`)
|
||||
|
||||
```java
|
||||
public class AccountOnSetListener implements SetListener {
|
||||
@Override
|
||||
public Object onSet(Object entity, String property, Object value) {
|
||||
if (property.equals("password")){
|
||||
|
||||
//去查询当前用户的权限
|
||||
boolean hasPasswordPermission = getPermission();
|
||||
|
||||
//若没有权限,则把数据库查询到的 password 内容修改为 null
|
||||
if (!hasPasswordPermission){
|
||||
value = null;
|
||||
}
|
||||
}
|
||||
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 String userName;
|
||||
|
||||
private String password;
|
||||
|
||||
//getter setter
|
||||
}
|
||||
```
|
||||
|
||||
更多的 `onSet` 还可以参考 [这里](./table.md)。
|
||||
@ -109,8 +109,13 @@ public class MyInsertListener implements InsertListener {
|
||||
|
||||
## onSet
|
||||
|
||||
onSet 可以用于配置:查询数据 entity (或者 entity 列表、分页等)时,对 entity 的属性设置的监听,这种场景
|
||||
可以用于一些数据转换,业务字段赋值、字段权限等场景。
|
||||
onSet 可以用于配置:查询数据 entity (或者 entity 列表、分页等)时,对 entity 的属性设置的监听,可以用于如下的差场景。
|
||||
|
||||
- 场景1:字段权限,不同的用户或者角色可以查询不同的字段内容。
|
||||
- 场景2:字典回显,entity 中定义许多业务字段,当数据库字段赋值时,主动去设置业务字段。
|
||||
- 场景3:一对多,一对一查询,entity 中定义关联实体,在监听到字段赋值时,主动去查询关联表赋值。
|
||||
- 场景4:字段加密,监听到内容被赋值时,对内容进行加密处理。
|
||||
- 场景5:字段脱敏,出字段内容进行脱敏处理
|
||||
|
||||
示例代码如下:
|
||||
|
||||
|
||||
@ -5,7 +5,6 @@ import com.mybatisflex.annotation.SetListener;
|
||||
public class AccountOnSetListener implements SetListener {
|
||||
@Override
|
||||
public Object onSet(Object entity, String property, Object value) {
|
||||
// System.out.println(">>>>>>> entity: " + entity);
|
||||
System.out.println(">>>>>>> property: " + property +" value:" + value);
|
||||
return value;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user