MyBatis拦截器可以拦截以下四种类型的接口方法调用:
Executor (执行器): 拦截org.apache.ibatis.executor.Executor接口的方法,主要用于处理SQL语句的执行过程,包括查询、更新、插入和删除等操作。 例如,它可以用来控制事务的边界、记录日志或者进行额外的数据验证。
ParameterHandler (参数处理器): 拦截org.apache.ibatis.mapping.ParameterHandler接口的方法,负责设置SQL预编译语句中的参数值。 拦截此类方法可以对传入的参数做进一步的处理,如加密、解密、类型转换等。
StatementHandler (SQL处理器): 拦截org.apache.ibatis.mapping.StatementHandler接口的方法,用于处理SQL语法构建相关的工作。 如动态SQL的解析与拼接、添加额外的查询条件等。
ResultSetHandler (结果集处理器): 拦截org.apache.ibatis.resultset.ResultSetHandler接口的方法,用于处理数据库返回的结果集,将结果集中的数据映射到Java对象上。 在拦截这个阶段时,可以对结果进行后处理、自定义结果映射规则或增加缓存逻辑等。
拦截器的执行顺序是按照Executor
-> ParameterHandler
-> StatementHandler
-> ResultSetHandler
的顺序进行.
如果有多个相同类型的拦截器,则按照添加到SqlSessionFactory
中的逆序来执行。