一、构建SqlSessionFactory
public SqlSessionFactory build(InputStream inputStream, String environment, Properties props) {
try {
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, props);
Configuration config = parser.parse();
return build(config);
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance().reset();
try {
inputStream.close();
} catch (IOException e) {
// Intentionally ignore. Prefer previous error.
}
}
}
XMLConfigBuilder是抽象类public abstract class BaseBuilder的实现类,抽象类和接口有啥区别呢?
二、Configuration里面有啥呢?
public Configuration() {
//支持的数据库连接之多JDBC、MANAGED、JNDI、POOLED、UNPOOLED
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class.getName());
typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class.getName());
typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class.getName());
typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class.getName());
typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class.getName());
备注:
JdbcTransactionFactory和ManagedTransactionFactory师出同门,都是TransactionFactory接口实现类。
JndiDataSourceFactory、PooledDataSourceFactory、UnpooledDataSourceFactory的继承关系如下图:
DataSourceFactory
-->JndiDataSourceFactory
-->UnpooledDataSourceFactory
-->PooledDataSourceFactory
-->UserDefineDataSourceFactory(这个是我自己定义的数据源)
//Cache缓存也支持PERPETUAL、FIFO、LRU、SOFT、WEAK五种,都是Cache接口的实现类,你也可以自己定义缓存接口
typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class.getName());
typeAliasRegistry.registerAlias("FIFO", FifoCache.class.getName());
typeAliasRegistry.registerAlias("LRU", LruCache.class.getName());
typeAliasRegistry.registerAlias("SOFT", SoftCache.class.getName());
typeAliasRegistry.registerAlias("WEAK", WeakCache.class.getName());
}
DataSourceFactory接口
TransactionFactory接口
自定义的数据源连接池是这个样子的
为了使用Druid,把Druid加入Mybatis之中
Cache接口的定义如下: