Mybatis组件分析

Mybatis组件分析

Configuration

是MyBatis的配置类,它负责读取MyBatis的配置文件,将配置信息加载到内存中,并将Mapper接口和映射文件的信息存储在内存中。Configuration还负责创建SqlSessionFactory和MapperProxy对象。

SqlSessionFactory

SqlSessionFactory是MyBatis的工厂类,它负责创建SqlSession对象。SqlSessionFactory的创建过程主要包括Configuration对象的初始化和MapperRegistry对象的注册。

Configuration对象的初始化过程包括读取MyBatis的配置文件和映射文件,将其解析为内部数据结构,并存储在Configuration对象中。在这个过程中,Configuration对象还会创建一些重要的组件,如Executor对象、StatementHandler对象、ResultSetHandler对象等。

MapperRegistry对象的注册过程主要是将Mapper接口和对应的MapperProxyFactory对象注册到MapperRegistry对象中。MapperProxyFactory对象是MyBatis的代理工厂类,它负责创建MapperProxy对象。MapperProxy对象是Mapper接口的代理对象,通过调用Mapper接口的方法,间接地调用SqlSession的方法。

SqlSession

SqlSession是MyBatis的核心接口之一,它提供了操作数据库的方法,如selectOne、selectList、insert、update、delete等。SqlSession通过使用Mapper接口的方式,实现了面向接口的编程,通过调用Mapper接口中定义的方法,可以操作数据库中的表。

SqlSession的实现类是DefaultSqlSession。DefaultSqlSession实现了SqlSession接口,并通过Configuration对象和Executor对象来实现SqlSession中定义的方法。其中,Executor对象是SqlSession的执行器,它负责执行SQL语句,并将结果映射为Java对象。

Executor

Executor是MyBatis的执行器,它负责执行SQL语句,并将结果映射为Java对象。Executor的实现类有两种:SimpleExecutor和ReuseExecutor。

SimpleExecutor是简单执行器,每次执行SQL语句都会创建一个新的Statement对象。这种方式的优点是每个Statement对象都是独立的,互不干扰;缺点是每次执行SQL语句都需要创建新的Statement对象,效率较低。

ReuseExecutor是重用执行器,每次执行SQL语句都会重用已经创建好的Statement对象。这种方式的优点是可以重复利用Statement对象,提高执行效率;缺点是由于Statement对象是共享的,需要进行同步处理,增加了系统的复杂度。

MapperProxy

MapperProxy是MyBatis的代理类,它通过使用Java动态代理机制,将Mapper接口的方法调用转换成对SqlSession的方法调用。MapperProxy的实现依赖于MapperRegistry对象和SqlSession对象。