一、拦截对象和接口实现示例
MyBatis拦截器的作用是在于Dao到DB中间进行额外的处理。大部分情况下通过mybatis的xml配置sql都可以达到想要的DB操作效果,然而存在一些类似或者相同的查询条件或者查询要求,这些可以通过拦截器的实现可以提升开发效率,比如:分页、插入和更新时间/人、数据权限、SQL监控日志等。
Mybatis支持四种对象拦截Executor、StatementHandler、PameterHandler和ResultSetHandler
Executor:拦截执行器的方法。
StatementHandler:拦截Sql语法构建的处理。
ParameterHandler:拦截参数的处理。
ResultHandler:拦截结果集的处理。
1 public interface Executor { 2 ResultHandler NO_RESULT_HANDLER = null; 3 int update(MappedStatement var1, Object var2) throws SQLException; 4 <E> List<E> query(MappedStatement var1, Object var2, RowBounds var3, ResultHandler var4, CacheKey var5, BoundSql var6) throws SQLException; 5 <E> List<E> query(MappedStatement var1, Object var2, RowBounds var3, ResultHandler var4) throws SQLException; 6 <E> Cursor<E> queryCursor(MappedStatement var1, Object var2, RowBounds var3) throws SQLException; 7 List<BatchResult> flushStatements() throws SQLException; 8 void commit(boolean var1) throws SQLException; 9 void rollback(boolean var1) throws SQLException; 10 CacheKey createCacheKey(MappedStatement var1, Object var2, RowBounds var3, BoundSql var4); 11 boolean isCached(MappedStatement var1, CacheKey var2); 12 void clearLocalCache(); 13 void deferLoad(MappedStatement var1, MetaObject var2, String var3, CacheKey var4, Class<?> var5); 14 Transaction getTransaction(); 15 void close(boolean var1); 16 boolean isClosed(); 17 void setExecutorWrapper(Executor var1); 18 } 19 public interface StatementHandler { 20 Statement prepare(Connection var1, Integer var2) throws SQLException; 21 void parameterize(Statement var1) throws SQLException; 22 void batch(Statement var1) throws SQLException; 23 int update(Statement var1) throws SQLException; 24 <E> List<E> query(Statement var1, ResultHandler var2) throws SQLException; 25 <E> Cursor<E> queryCursor(Statement var1) throws SQLException; 26 BoundSql getBoundSql(); 27 ParameterHandler getParameterHandler(); 28 } 29 public interface ParameterHandler { 30 Object getParameterObject(); 31 void setParameters(PreparedStatement var1) throws SQLException; 32 } 33 public interface ResultHandler<T> { 34 void handleResult(ResultContext<? extends T> var1); 35 }