# sql-preprocess **Repository Path**: jiang-tianjun/sql-preprocess ## Basic Information - **Project Name**: sql-preprocess - **Description**: SQL前置处理模块,对SQL的指定表启用条件增强,支持白名单和黑名单两种方式,专为业务定制 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-10-07 - **Last Updated**: 2024-01-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, SQL ## README # sql-preprocess #### 介绍 SQL前置处理模块,对SQL的指定表启用条件增强,支持白名单和黑名单两种方式,业务定制,不具备移植性和通用性,但是可以参考 #### 软件设计 为了分析SQL语义,找到SQL操作的表,需要把一条SQL设计为一个**对象**,SQL中嵌套的子查询设计为SQL对象列表 使用括号匹配拆解子查询并验证是否是子查询(SQL的括号中不一定是子查询,也有IN的条件等等) 采用**关键字分割**的方式把一条SQL拆分成几个部分,构建一个**SQL对象**,通过关键字智能匹配添加条件的方式 在**where**后面加用**and**,没有条件要先加**where**然后在后面加条件。如果是表连接,是在ON后面加条件 为了在字符串操作的时候精确定位,设计了一些**值对象**来记录SQL被转换成对象之后每部分在SQL的哪些位置 #### 使用说明 1. 把源代码拷贝到service、controller同级目录下,独立放置一个文件夹 2. 根据**SqlEnhanceConfigurationProperty**的文件内容在application.yml下添加相应的配置 3. 在**mybatis**编写插件的位置注入一个SqlEnhancerProvider类型的对象,通过改对象获取SQL预处理对象 4. 调用SQL预处理对象对SQL进行前置处理 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request