update docs

This commit is contained in:
开源海哥 2023-04-04 17:44:39 +08:00
parent 23b7e8e445
commit a75d6d3e42
6 changed files with 152 additions and 3 deletions

View File

@ -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
View 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)。

View 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)。

View 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)。

View File

@ -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字段脱敏出字段内容进行脱敏处理
示例代码如下:

View File

@ -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;
}