diff --git a/docs/zh/base/service.md b/docs/zh/base/service.md index 9bc53564..df45f003 100644 --- a/docs/zh/base/service.md +++ b/docs/zh/base/service.md @@ -2,11 +2,8 @@ MyBatis-Flex 提供了一个名为 `IService` 的接口,及其默认实现类 `ServiceImpl` ,用于简化在 「Service」 层重复定义 「Mapper」 层的方法。 -> `IService` 接口只是提供了简单且常用的 “增删改查” 方法,更多细节以及复杂的业务,还是需要使用 `BaseMapper` 进行处理。 +> `IService` 接口只是提供了简单且常用的 “增删改查” 方法,更多细节以及复杂的业务,还是需要使用 `Mapper` 进行处理。 -::: tip 注意 -`IService` 目前只在 Spring 扩展包中提供使用。 -::: ## 示例代码 @@ -100,4 +97,4 @@ public class AccountServiceImpl implements IAccountService ## 其他方法 -- **getBaseMapper()**:获取对应的 `BaseMapper` 接口。 \ No newline at end of file +- **getMapper()**:获取对应的 `BaseMapper` 接口。 \ No newline at end of file diff --git a/docs/zh/core/data-permission.md b/docs/zh/core/data-permission.md index 2d8f6ee3..0ddf059f 100644 --- a/docs/zh/core/data-permission.md +++ b/docs/zh/core/data-permission.md @@ -9,9 +9,11 @@ - 获取某个地区的数据 - 等等 -这一些,都是通过当前的用户的信息(部门、角色、权限等),查询时,添加特定的条件。在 MyBatis-Flex 中,我们可以使用自定义数据方言 `IDialect` 的方式来实现这一种需求。 +这一些,都是通过当前的用户的信息(部门、角色、权限等),查询时,添加特定的条件。在 MyBatis-Flex 中,我们可以通过 2 种方式来实现这一种需求。 -以下是示例代码: +## 方式1:使用自定义数据方言 `IDialect` + +在自定义方言中,重写 `forSelectByQuery` 方法,这个方法是用于构建返回根据 `QueryWrapper` 查询的方法, 以下是示例代码: ```java public class MyPermissionDialect extends CommonsDialectImpl{ @@ -31,4 +33,37 @@ public class MyPermissionDialect extends CommonsDialectImpl{ ```java DialectFactory.registerDialect(DbType.MYSQL, new MyPermissionDialect()); -``` \ No newline at end of file +``` + + +**常见问题1:通过重写 `IDialect` 后,所有的查询都添加了条件,但是有些表不需要条件如何做?** + +>答:可以通过 CPI 获取 QueryWrapper 查询了哪些表,然后进行动态处理。例如 `List tables = CPI.getQueryTables(queryWrapper)`,然后进一步对 +> `tables` 进行验证是否需要添加数据权限。 + +## 方式2:重写 IService 的查询方法 + +在一般的应用中,查询是通过 Service 进行的,MyBatis-Flex 提供了 `IService` 接口及其默认的 `ServiceImpl` 实现类。 + +我们可以通过构建自己的 `IServiceImpl` 来实现这一种需求,例如: + +```java +public class MyServiceImpl, T> implements IService { + + @Autowired + protected M mapper; + + @Override + public BaseMapper getMapper() { + return mapper; + } + + + @Override + public List list(QueryWrapper query) { + //获取当前用户信息,为 queryWrapper 添加额外的条件 + return IService.super.list(query); + } +} +``` +当然,在 `IService` 中,除了 `list` 方法以外,还有其他的查询方法,可能也需要复写一下。 diff --git a/docs/zh/intro/comparison.md b/docs/zh/intro/comparison.md index e870a541..2e957221 100644 --- a/docs/zh/intro/comparison.md +++ b/docs/zh/intro/comparison.md @@ -49,7 +49,6 @@ MyBatis-Flex 主要是和 `MyBatis-Plus` 与 `Fluent-Mybatis` 对比,内容来 **MyBatis-Flex:** -一般方式: ````java QueryWrapper query = QueryWrapper.create() .where(EMPLOYEE.LAST_NAME.like(searchWord)) //条件为null时自动忽略 @@ -57,21 +56,6 @@ QueryWrapper query = QueryWrapper.create() .and(EMPLOYEE.AGE.gt(24)); List employees = employeeMapper.selectListByQuery(query); ```` -更简单一点: -````java -QueryWrapper query = select() - .where(EMPLOYEE.LAST_NAME.like(searchWord)) - .and(EMPLOYEE.GENDER.eq(1)) - .and(EMPLOYEE.AGE.gt(24)); -List employees = employeeMapper.selectListByQuery(query); -```` -换一种方式: -````java -QueryCondition condition = EMPLOYEE.LAST_NAME.like(searchWord) - .and(EMPLOYEE.GENDER.eq(1)) - .and(EMPLOYEE.AGE.gt(24)); -List employees = employeeMapper.selectListByCondition(condition); -```` **MyBatis-Plus:** @@ -82,7 +66,7 @@ QueryWrapper queryWrapper = Wrappers.query() .gt("age", 24); List employees = employeeMapper.selectList(queryWrapper); ```` -或者 MyBatis-Plus 的lambda写法: +或者 MyBatis-Plus 的 lambda 写法: ```java LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery()