mybatis提供了兩種配置文案案:基於Xml或基於Api
先看下mybatis提供的配置屬性
configuration(配置)
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)
基於Xml的初始化
首先是配置文件是xml格式,所以需要有專門的parser負責轉換
核心職能由org.apache.ibatis.builder.xml.XMLConfigBuilder承擔,該類負責將xml轉換成org.apache.ibatis.session.Configuration。
Configuration中保存着全局的配置信息,包括靜態配置的和動態生成的
parse的核心流程
private void parseConfiguration(XNode root) {
try {
// issue #117 read properties first
//屬性有三個來源,具體查看 site/zh/configuration.html#properties
propertiesElement(root.evalNode("properties"));
Properties settings = settingsAsProperties(root.evalNode("settings"));
// VFS resource list, 目前支持兩種實現,對JBoss作了特殊處理
loadCustomVfs(settings);
// 日誌
loadCustomLogImpl(settings);
//
typeAliasesElement(root.evalNode("typeAliases"));
pluginElement(root.evalNode("plugins"));
objectFactoryElement(root.evalNode("objectFactory"));
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
reflectorFactoryElement(root.evalNode("reflectorFactory"));
settingsElement(settings);
// read it after objectFactory and objectWrapperFactory issue #631
environmentsElement(root.evalNode("environments"));
databaseIdProviderElement(root.evalNode("databaseIdProvider"));
// 類型處理器
typeHandlerElement(root.evalNode("typeHandlers"));
// mapper 採集
mapperElement(root.evalNode("mappers"));
} catch (Exception e) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
}
}
整個處理流程的目的就是爲了填充Configuration
基本Api的初始化
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
//基於Api創建配置對象,並按需配置
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);