Mybatis基础工具类

SqlSessionFactory

利用mybatis配置文件创建,工厂类,生产SqlSession

SqlSession

用户和数据库打交道的层面接口

Executor

真正执行SQL的组件,接口定义了对数据库的增删改查操作。


Executor类继承图

BaseExecutor: Executor的抽象实现类,定义了方法处理流程和通用逻辑
SimpleExecutor: 简单的实现类,实现了基本的增删改查
ReuseExecutor: 对JDBC的Statement对象进行了缓存,提升系统性能。
BatchExecutor: 对同一个Mapper的update,insert,delete操作,调用批量操作功能
CachingExecutor: 对以上3种进行装饰,为查询操作增加二级缓存功能(需要打开二级缓存)

MappedStatement

mybatis通过MappedStatement保存mapper文件或注解@select,@update等配置的SQL,

StatementHandler

组件封装了对MappedStatement的操作,有几种不同的实现类,如下图


StatementHandler类继承图
ParameterHandler

对对象PrepareStatement,CallableStatement设置参数接口,方法如下:

public interface ParameterHandler {
    Object getParameterObject();

    void setParameters(PreparedStatement ps) throws SQLException;
}

该接口只有一个默认实现类DefaultParameterHandler


ParameterHandler设置参数
TypeHandler

定义了JDBC类型与Java类型的互相转换方法

    void setParameter(PreparedStatement ps, int i, T javaType, JdbcType type) throws SQLException;

    T getResult(ResultSet rs, String column) throws SQLException; 

    T getResult(ResultSet rs, int i) throws SQLException;

    T getResult(CallableStatement cs, int i) throws SQLException;

mybatis在Configuration中使用TypeHandlerRegisty保存了Class-Java-JDBC类型之间的映射关系

ResultSetHandler

定义了对ResultSet的操作

public interface ResultSetHandler {
     List handleResultSets(Statement var1) throws SQLException;

     Cursor handleCursorResultSets(Statement var1) throws SQLException;

    void handleOutputParameters(CallableStatement var1) throws SQLException;
}

只有唯一一个默认实现类DefaultResultSetHandler,处理关键逻辑如下

        List multipleResults = new ArrayList();
        int resultSetCount = 0;
        ResultSetWrapper rsw = this.getFirstResultSet(stmt);// wrapper封装
        List resultMaps = this.mappedStatement.getResultMaps();//获取结果集映射,一般只有一个
        int resultMapCount = resultMaps.size();
        this.validateResultMapsCount(rsw, resultMapCount);// 校验

        while(rsw != null && resultMapCount > resultSetCount) {
            ResultMap resultMap = (ResultMap)resultMaps.get(resultSetCount);
            this.handleResultSet(rsw, resultMap, multipleResults, (ResultMapping)null);//核心
            rsw = this.getNextResultSet(stmt);
            this.cleanUpAfterHandlingResultSet();
            ++resultSetCount;
        }
        return this.collapseSingleResultList(multipleResults);
 

                            
                        
                    
                    
                    

你可能感兴趣的:(Mybatis基础工具类)