【Mybatis源码解读之Configuration 】

一、构建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接口的定义如下:



 

 

猜你喜欢

转载自gaojingsong.iteye.com/blog/2361547
今日推荐