当前位置: 首页 > news >正文

基于Mybatis 数据过滤组件(二) - 使用文档

mybatis 数据过滤组件使用文档

基于Mybatis 数据过滤组件

使用我们的组件就可以不需要改动sql,自动的完成条件的添加。就像是现在很流行的pagehelper 分页插件一样的简单

maven 引入:

<dependency><groupId>mybatis</groupId><artifactId>mybatis-data-filter</artifactId><version>1.0</version>
</dependency>

配置

yml 配置示例
mybatis:data-filter:# where模板配置whereSqlFormat:  SYS_CODE IN (${SYS_CODE})#selectFormat: SELECT * FROM (${SQL}) t WHERE ${CONDITION}mod: WHEREadminMode: true

自定义 DataFilterValueHandle 实现该接口,以此扩展获取${SYS_CODE}模板替换值和是否是管理员


代码示例

TestDataFilterValue 继承DataFilterValueHandle 实现。通常这里模板的值来源于系统一个公共的拦截器,设置在公共的ThreadLocal(ApplicationContextUtil)中

@Bean
public class TestDataFilterValue implements DataFilterValueHandle {@Overridepublic Map<String, String> valueMap(PointParam pointParam) {List<UserSystemDetailDTO> userList = (List<UserSystemDetailDTO>) ApplicationContextUtil.getValue(ApplicationContextUtil.USER_SYS_CODE);String sysCodes = ZkSysCodeFactory.getUserListStr(userList);Map<String, String> map = new HashMap<>();map.put("SYS_CODE",sysCodes);return map;}@Overridepublic boolean isAdmin(PointParam pointParam) {Boolean isAdmin = ApplicationContextUtil.getIsAdmin();return isAdmin == null ? false : isAdmin;}
}
注解使用:

在service 或 mapper的接口上加 @DataFilter即可生效
代码示例:

@DataFilter
List<ZkInstanceResp> selectByPage();

做了上面的配置后组件就可以生效了。


配置优先级

@DataFilter -> DataFilterContextUtil -> MybatisDataFilterProperties

管理员配置

@DataFilter(adminMode=“true”)

设置adminMode开启管理员模式,如果是管理员则就不进行过滤.

mod模式讲解
  • WHERE :修改第一个where条件,根据whereSqlFormat 模板进行替换。

例如:

WHERE SYS_CODE IN (${SYS_CODE}) and aa = ${aa} 替换 SELECT A,B,C FROM TT WHERE SYS_CODE IN (1,2,3) and aa = aa

  • SELECT : 把查询作为子查询处理,根据selectFormat模板进行替换。

例如:SELECT * FROM (${SQL}) t where ${CONDITION} 替换SELECT * FROM (SELECT A,B,C FROM TT) t WHERE SYS_CODE IN (1,2,3) and aa = aa
该模式要求原select 字段中包含sys_code

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • web技术1——http详解(重要)
  • 兼容并蓄,高效集成:EasyCVR视频综合接入能力助力多元化项目需求
  • Fragment学习笔记
  • 数组前缀和算法技巧
  • html+css网页设计 淘宝首页
  • 数据处理二维数组转单数组
  • 免费商用字体下载指南!(哪里可以免费下载字体,哪里可以免费下载可商用字体)
  • C++ 模版进阶【非类型模板参数、模板特化等】
  • window搭建代理ip池:详细的搭建指南分享
  • Oracle 用户-表空间-表之间关系常用SQL
  • 【MySQL】SQL语句执行流程
  • 力扣题/图论/腐烂的橘子
  • VueX 使用
  • selenium 9222
  • ClickHouse集群的安装
  • 《深入 React 技术栈》
  • 【Leetcode】104. 二叉树的最大深度
  • Android优雅地处理按钮重复点击
  • eclipse(luna)创建web工程
  • eclipse的离线汉化
  • IDEA 插件开发入门教程
  • Javascript设计模式学习之Observer(观察者)模式
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • 闭包,sync使用细节
  • 高程读书笔记 第六章 面向对象程序设计
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 深度学习在携程攻略社区的应用
  • 手写一个CommonJS打包工具(一)
  • 算法-插入排序
  • 微信小程序开发问题汇总
  • 译米田引理
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Redis 入门到精通(七)-- redis 删除策略
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (7)svelte 教程: Props(属性)
  • (70min)字节暑假实习二面(已挂)
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (篇九)MySQL常用内置函数
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转) ns2/nam与nam实现相关的文件
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)socket Aio demo
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET NPOI导出Excel详解
  • .NET 材料检测系统崩溃分析
  • .NET 分布式技术比较
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET开发不可不知、不可不用的辅助类(一)