From 016587d18f1684c1aa09fd5d2864ec8192729dd3 Mon Sep 17 00:00:00 2001 From: Suomm <1474983351@qq.com> Date: Thu, 15 Jun 2023 12:12:48 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=96=87=E6=A1=A3=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E6=84=8F=E4=BA=8B=E9=A1=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/core/data-permission.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/zh/core/data-permission.md b/docs/zh/core/data-permission.md index 8d1c452c..4579238d 100644 --- a/docs/zh/core/data-permission.md +++ b/docs/zh/core/data-permission.md @@ -16,26 +16,38 @@ 在自定义方言中,重写 `forSelectByQuery` 方法,这个方法是用于构建返回根据 `QueryWrapper` 查询的方法, 以下是示例代码: ```java -public class MyPermissionDialect extends CommonsDialectImpl{ +public class MyPermissionDialect extends CommonsDialectImpl { @Override public String forSelectByQuery(QueryWrapper queryWrapper) { - + //获取当前用户信息,为 queryWrapper 添加额外的条件 queryWrapper.and("..."); - + return supper.buildSelectSql(queryWrapper); } } ``` +特别的,如果您使用的是 `Oracle` 数据库,需要继承 `OracleDialect` 类,示例: + +```java +public class MyOraclePermissionDialect extends OracleDialect { + + // 这个构造器只有在 Oracle 12C 的版本下才需要添加。 + // public MyOraclePermissionDialect() { + // super(LimitOffsetProcessor.DERBY); + // } + +} +``` + 在项目启动时,通过 `DialectFactory` 注册 `MyPermissionDialect`: ```java -DialectFactory.registerDialect(DbType.MYSQL, new MyPermissionDialect()); +DialectFactory.registerDialect(DbType.MYSQL,new MyPermissionDialect()); ``` - **常见问题1:通过重写 `IDialect` 后,所有的查询都添加了条件,但是有些表不需要条件如何做?** >答:可以通过 CPI 获取 QueryWrapper 查询了哪些表,然后进行动态处理。例如 `List tables = CPI.getQueryTables(queryWrapper)`,然后进一步对