作为一个ORM框架对jdbc的封装是基础和前提。
假设要自己写一个ORM框架,首先也是从jdbc入手。或者说从创建数据库链接开始。
跟我想的不太一样,获取数据库链接没有在jdbc包里,而是在datasource包里。
javax.sql.DataSource。早有标准接口。
从代码可以看到mybatis实现了三种datasource,jndi、pooled、unpooled。datasource是个典型的工厂模式。
1.有工厂类接口 DataSourceFactory
/**
* @author Clinton Begin
*/
public interface DataSourceFactory {
void setProperties(Properties props);
DataSource getDataSource();
}
2.三个工厂类子类 UnpooledDatasourceFactory PooleDataSourceFactory JndiDataSourceFactory
在是用的时候,根据配置文件中的dataSource的type来决定使用那种dataSource。
private DataSourceFactory dataSourceElement(XNode context) throws Exception {
if (context != null) {
String type = context.getStringAttribute("type");
Properties props = context.getChildrenAsProperties();
DataSourceFactory factory = (DataSourceFactory) resolveClass(type).newInstance();//如何把字符串对应具体的类呢?
factory.setProperties(props);
return factory;
}
昨天想找如果把type的字符串对应成类的。
找到了TypeAliasRegistry类,初始化的时候注册了很多类型,但是没有数据源类型。
今天发现BaseBuilder中的typeAliasRegistry是从configuration中获取的。然后发现在Configuration初始化的时候注册了一些系统用的别名。数据源类型就是这时候被注册的。