mybatis拦截器

来源:互联网 发布:淘宝客服兼职可信吗 编辑:程序博客网 时间:2024/06/06 03:03


一、MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用

默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:(摘自官网http://mybatis.github.io/mybatis-3/zh/configuration.html)

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

  二、当执行查询时

调用过程:SqlSession.selectList -- >> Executor.query -->> StatementHandler.query 返回结果,那么参数的设置是在哪呢?

StatementHandler有3个子类:SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler,

分别对应java.sql的Statement, PreparedStatement,CallableStatement。

在执行Executor.query时,创建Statement(StatementHandler.prepare)后会执行StatementHandler的parameterize,也就是参数化设置。查看源码发现调用的时ParameterHandler 的setParameters方法,在该方法中会设置对应的参数。

三、在查询过程中想要做一些额外的工作。例如:分页等

则可以通过mybatis的拦截器,拦截查询方法:

1、拦截Executor的query方法。拦截多个参数的方法。如果拦截参数少的那个方法,则可以在拦截器中参数源码自定义调用。

2、StatementHandler 的query方法

3、ResultSetHandler 的handleResultSets或handleOutputParameters,直接对结果进行处理

在拦截器中可以修改SQL,设置参数等一系列自定义功能。


0 0
原创粉丝点击