一、插件介绍【动态代理】

1、插件【动态代理】:mybatis 允许在已经映射的语句的执行过程的某个时机进行拦截增强的机制。

2、mybatis中的组件动态代理的运用:

MyBatis 在四大组件对象的创建过程中,都会有插件进行调用执行。

我们可以利用动态机制对目标对象实施拦截增强操作,也就是在目标对象执行目标方法之前进行拦截增强的效果。

  • Excutor(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • Parameter(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • RestultSetHandler(handleResultSets, handleOutputParameters)
  • StatementHandler(prepare, parameterize, batch, update, query)

3、插件开发步骤:

(1)编写插件实现Intercetor接口,并使用@Intercepts 注解完成插件签名

(2)在全局配置文件中使用 元素注册插件

//标注对哪个组件的哪个方法做拦截增强
//对组件ResultSetHandler中的handleResultSets(Statement st)方法进行拦截增强
@Intercepts({@Signature(
type= ResultSetHandler.class ,//
method = "handleResultSets",//
args = {Statement.class})})//
public class DemoIntercetor implements Interceptor{ //如何增强
@Override
public Object intercept(Invocation invocation) throws Throwable {
System.out.println("拦截增强啦");
return invocation.proceed();//放行
}
}
<!--全局配置文件-->
<!-- 注册拦截器 -->
<plugins>
<plugin interceptor="com.shan.mybatis.plugin.DemoIntercetor"></plugin>
</plugins>

二、MyBatis 分页插件-PageHelper

1、依赖:

  • jsqlparser.jar
  • pagehelper.jar

2、配置,在全局映射文件配置分页插件:

<!-- 全局映射文件 -->
<!-- 配置插件 -->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="helperDialect" value="mysql" />
</plugin>
</plugins>

■ 配置完成,只需要在映射文件书写查询结果集的元素,然后测试的时候添加上:PageHelper.startPage(3, 3); 就实现了分页效果

//mapper接口
public interface EmployeeMapper {
List<Employee> queryList();
} <!-- 映射文件 -->
<select id="queryList" resultType="Employee">
select id, name, sn, salary from employee
</select> //测试
@Test
public void testPagePlugin() throws Exception {
EmployeeMapper employeeMapper = MyBatisUtil.getMapper(EmployeeMapper.class);
PageHelper.startPage(3, 3);
List<Employee> emps = employeeMapper.queryList();
for (Employee employee : emps) {
System.out.println(employee);
}
System.out.println("============================================================");
//测试分页插件的接口PageInfo,好比是咱的PageResult
PageInfo pageInfo = new PageInfo(emps);
System.out.println(pageInfo.getTotal());
System.out.println(pageInfo.getList());
}

MyBatis加强(4)~mybatis 插件开发的更多相关文章

  1. 自己动手编写一个Mybatis插件:Mybatis脱敏插件

    1. 前言 在日常开发中,身份证号.手机号.卡号.客户号等个人信息都需要进行数据脱敏.否则容易造成个人隐私泄露,客户资料泄露,给不法分子可乘之机.但是数据脱敏不是把敏感信息隐藏起来,而是看起来像真的一 ...

  2. 【转】mybatis实战教程(mybatis in action),mybatis入门到精通

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis ...

  3. mybatis实战教程(mybatis in action)之九:mybatis 代码生成工具的使用

    mybatis 应用程序,需要大量的配置文件,对于一个成百上千的数据库表来说,完全手工配置,这是一个很恐怖的工作量. 所以mybatis 官方也推出了一个mybatis代码生成工具的jar包. 今天花 ...

  4. mybatis实战教程(mybatis in action),mybatis入门到精通

    转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加 ...

  5. mybatis实战教程(mybatis in action),mybatis入门到精通(转)

    转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加 ...

  6. mybatis实战教程(mybatis in action)之九:mybatis 代码生成工具的使用

    mybatis 应用程序,需要大量的配置文件,对于一个成百上千的数据库表来说,完全手工配置,这是一个很恐怖的工作量. 所以mybatis 官方也推出了一个mybatis代码生成工具的jar包. 今天花 ...

  7. mybatis0212 mybatis逆向工程 (MyBatis Generator)

    1mybatis逆向工程 (MyBatis Generator) .1什么是mybatis的逆向工程 mybatis官方为了提高开发效率,提高自动对单表生成sql,包括生成 :mapper.xml.m ...

  8. 《深入理解mybatis原理》 MyBatis事务管理机制

    MyBatis作为Java语言的数据库框架,对数据库的事务管理是其很重要的一个方面.本文将讲述MyBatis的事务管理的实现机制. 首先介绍MyBatis的事务Transaction的接口设计以及其不 ...

  9. 《深入理解mybatis原理》 Mybatis初始化机制具体解释

    对于不论什么框架而言.在使用前都要进行一系列的初始化,MyBatis也不例外. 本章将通过下面几点具体介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XM ...

  10. 《深入了解mybatis原则》 MyBatis架构设计和案例研究

    MyBatis这是现在很流行ORM框架,这是非常强大.事实上现却比較简单.优雅. 本文主要讲述MyBatis的架构设计思路,而且讨论MyBatis的几个核心部件.然后结合一个select查询实例.深入 ...

随机推荐

  1. 微信小程序配置域名的时候提示“校验文件验证失败”

    在微信小程序后台配置web-view的业务域名跟扫普通链接二维码打开小程序两项功能时, 一直提示"校验文件验证失败,请下载校验文件,上传到服务器指定的目录" 实际访问校验文件的路径 ...

  2. vue3知识点的自我总结

    1. 我们对ref的错误理解 ref 经常去监听基本数据类型. 同时也可以去监听[数组][对象]都是可以的. ref是深度的监听.并不是大家说的那样不能去监听复杂的数据类型. 只是根据我们推荐ref去 ...

  3. CAX软件资产管理

    CAX软件其实指的是计算机辅助设计软件统称,即CAD.CAM.CAE.CAPP.CAS.CAT.CAI等各项技术的综合叫法,因为这些技术的缩写基本都是以CA为起始,X则表示所有.也就是说,CAX实际上 ...

  4. .NET Core 自定义中间件 Middleware

    引言 很多看了上一章的朋友私信博主,问如何自定义,自己的中间件(Middleware),毕竟在实际的项目中,大家会有很多需求要用到中间件,比如防盗链.缓存.日志等等功能,于是博主这边就简单讲解一下框架 ...

  5. 探索新冠肺炎(COVID-19)对全球航班的影响

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 随着今天从欧洲到美国的旅行限制生效,以及为了减缓新冠病毒的传播更 ...

  6. dp问题解题思路

    [基本问题单元的定义]这取决于你所查看问题的角度,找到一个划分,推进问题的角度十分重要.作者找到的方式是dp[ i ][ j ],用来表示 substring( i , j),然后站在这个角度,假设s ...

  7. P3224 [HNOI2012]永无乡 题解

    P3224 [HNOI2012]永无乡 题解 题意概括 有若干集合,每个集合最初包含一个值,和一个编号1~n.两个操作:合并两个集合,查询包含值x的集合中第k大值最初的集合编号. 思路 维护集合之间关 ...

  8. Go 循环控制

    #### Go 循环控制昨天有工作要忙, 断更一天,不过学习的事情,还是每天要坚持; 我还有头发, 还能学习^_^.***倘若我心中的山水, 你眼中都看到***上一节学习完流程控制,总结一下switc ...

  9. 什么是VRRP?

    目录 一:什么是VRRP? 二:为什么需要VRRP 三:VRRP的工作原理 1.VRRP的三种状态 2.VRRP选举机制 3.VRRP工作原理 四:VRRP的详细工作过程如下: 五:VRRP应用场景 ...

  10. 『无为则无心』Python函数 — 40、Python自定义异常

    目录 1.使用 raise 语句来抛出异常 (1)抛出异常类 (2)抛出异常类的实例 2.自定义异常类 (1)简单实现 (2)完整实现 在Python中,抛出自定义异常的语法为 raise 异常类对象 ...