目的java
MyBatis是一个基于Java的持久层框架。也是不少程序员的最爱,由于本身控制的SQL时,写出一个好的SQL会大大的提升总体程序的性能。目前的项目通常都是MyBatis和Spring的整合,那么具体的逻辑是什么样子呢?下面就来分析一下具体的代码及逻辑。程序员
分析spring
1 Spring的XML配置(样例):sql
对于上面XML的配置信息,也就是Spring对一个类进行了实例化。那咱们就来看看SqlSeesionFactoryBean类到底作了什么操做呢?
数据库
2 SqlSeesionFactoryBean属性:mybatis
/** 日志类 */ private final Log logger = LogFactory.getLog(getClass()); /** mybatis的全局配置信息 */ private Resource configLocation; /** mybatis的SQL文件信息 */ private Resource[] mapperLocations; /** 数据源 */ private DataSource dataSource; /** 事务工厂 */ private TransactionFactory transactionFactory; /** spring配置文件中mybatis的属性 */ private Properties configurationProperties; /** SqlSessionFactoryBuilder */ private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); /** mybatis的SqlSessionFactory工厂 */ private SqlSessionFactory sqlSessionFactory; private String environment = SqlSessionFactoryBean.class.getSimpleName(); private boolean failFast; /** spring配置文件中mybatis的拦截器 */ private Interceptor[] plugins; /** spring配置文件中mybatis的自定义类型集合 */ private TypeHandler<?>[] typeHandlers; /** spring配置文件中mybatis的自定义类型包 */ private String typeHandlersPackage; /** spring配置文件中mybatis的别名集合 */ private Class<?>[] typeAliases; /** spring配置文件中mybatis的别名包 */ private String typeAliasesPackage; /** 数据库产品名 */ private DatabaseIdProvider databaseIdProvider = new DefaultDatabaseIdProvider();
3 实现接口InitializingBean:app
图中因为 实现了InitializingBean类,也就是须要执行初始化代码。框架
这里数据源与SqlSessionFactoryBuilder不能为空,而后去构建SqlSessionFactory 。
ide
4 代码实现:性能
4.1 生成一个MyBatis的全局对象Configuration(全局配置类)。
4.2 读取typeAliasesPackage属性并解析,放入Configuration(全局配置类)中,对应TypeAliasRegistry类。
4.3 读取typeAliases属性并解析,放入Configuration(全局配置类)中,对应TypeAliasRegistry类。
4.4 读取plugins属性并解析,放入Configuration(全局配置类)中,对应InterceptorChain类。
4.5 读取typeHandlersPackage属性并解析,放入Configuration(全局配置类)中,对应TypeHandlerRegistry类。
4.6 读取typeHandlers属性并解析,放入Configuration(全局配置类)中,对应TypeHandlerRegistry类。
4.7 解析MyBatis的全局配置文件,放入Configuration(全局配置类),建立Spring事务。
4.8 从新生成环境信息,设置数据库产品名称。
4.9 解析MyBatis的SQL文件,放入Configuration(全局配置类)。
10:最后生成一个SqlSessionFactory对象。
总结:
注意必定要区分,何时读取Spring配置文件,何时读取MyBatis配置文件。
具体MyBatis的操做只能一步一步的去研究。