标签:
目的
MyBatis是一个基于Java的持久层框架。也是很多程序员的最爱,因为自己控制的SQL时,写出一个好的SQL会大大的提高整体程序的性能。目前的项目一般都是MyBatis和Spring的整合,那么具体的逻辑是什么样子呢?下面就来分析一下具体的代码及逻辑。
Spring的XML配置(样例):
对于上面XML的配置信息,也就是Spring对一个类进行了实例化。那我们就来看看SqlSeesionFactoryBean类到底做了什么操作呢?
先看一下类中有哪些属性:
/** 日志类 */
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();
以上属性全部是Spring配置文件的属性。
图中由于 实现了InitializingBean类,也就是需要执行初始化代码。
这里数据源与SqlSessionFactoryBuilder不能为空,然后去构建SqlSessionFactory 。
具体的实现:
1:生成一个MyBatis的全局对象Configuration。
2:读取typeAliasesPackage属性并解析,放入Configuration对象中,对应TypeAliasRegistry类。
3:读取typeAliases属性并解析,放入Configuration对象中,对应TypeAliasRegistry类。
4:读取plugins属性并解析,放入Configuration对象中,对应InterceptorChain类。
5:读取typeHandlersPackage属性并解析,放入Configuration对象中,对应TypeHandlerRegistry类。
6:读取typeHandlers属性并解析,放入Configuration对象中,对应TypeHandlerRegistry类。
7:解析MyBatis的全局配置文件,创建Spring事务。
8:重新生成环境信息,设置数据库产品名称。
9:解析MyBatis的SQL文件。
10:最后生成一个SqlSessionFactory对象。
总结:
注意一定要区分,什么时候读取Spring配置文件,什么时候读取MyBatis配置文件。
具体MyBatis的操作只能一步一步的去研究。
标签:
原文地址:http://my.oschina.net/u/1269959/blog/521571