1. 事务
mybatis的自动配置类中
生成sqlSessionTemplate对象注入到容器中
使用到jdk的代理。并将代理对象放入 SqlSessionTemplate 中。
以下SqlSession 的方法
public interface SqlSession extends Closeable {
<T> T selectOne(String statement);
<T> T selectOne(String statement, Object parameter);
<E> List<E> selectList(String statement);
<E> List<E> selectList(String statement, Object parameter);
<E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds);
<K, V> Map<K, V> selectMap(String statement, String mapKey);
<K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey);
<K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds);
<T> Cursor<T> selectCursor(String statement);
<T> Cursor<T> selectCursor(String statement, Object parameter);
<T> Cursor<T> selectCursor(String statement, Object parameter, RowBounds rowBounds);
void select(String statement, Object parameter, ResultHandler handler);
void select(String statement, ResultHandler handler);
void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler);
int insert(String statement);
int insert(String statement, Object parameter);
int update(String statement);
int update(String statement, Object parameter);
int delete(String statement);
int delete(String statement, Object parameter);
void commit();
void commit(boolean force);
void rollback();
void rollback(boolean force);
List<BatchResult> flushStatements();
void close();
void clearCache();
Configuration getConfiguration();
<T> T getMapper(Class<T> type);
Connection getConnection();
}
每调用以上方法, 代理对象都会区执行invoke 方法。
最终调用了 openSessionFromDataSource 获取开启事务事务对象,和executor 执行器,返回DefaultSqlSession 对象。
2 插件的执行 : 如分页插件的执行
2.1检验是否有插件,如果存在插件,且生成插件的type == Executorl类型。则放回代理代理对象
如: 分页插件, 则会返回代理对象。
2.2 再开事务方法的方法 openSessionFromDataSource 时,回去执行newExecutor
2.2 将目标对象executor (如果开启二级缓存, 则将CachingExecutor, 否则为SimpleExecutor)放入拦截器中
2.3 最终会带调用wrap 生成jdk 的代理对象
2.4 Plugin 实现了InvocationHandler如果分页插件的方法名, 以及参数匹配上, 这回去调用分页插件的intercept 方法。 如果匹配不上,则会调用拥有方法。
所以插件的执行便是如此执行。
还有三个类型的拦截器,
StatementHandler
ParameterHandler
ResultSetHandler