核心内容摘要
VMware虚拟机部署Qwen3-ASR开发环境
MyBatis配置加载架构、解析流程与核心类解析在MyBatis框架中配置加载是整个框架初始化的第一步负责加载并解析MyBatis的配置文件进而初始化所有的配置信息。
这一过程确保了系统能够正确初始化并启动。
配置加载的作用与重要性配置加载是MyBatis框架初始化的核心步骤负责加载并解析MyBatis的配置文件通常是mybatis-config.xml进而初始化所有配置信息。
配置文件的作用是定义全局配置如数据库连接、映射文件路径、插件、日志等。
配置加载过程包括数据库连接池的初始化。
SQL映射的加载。
类型处理器、缓存等组件的配置。
配置加载的核心类——SqlSessionFactoryBuilderSqlSessionFactoryBuilder是MyBatis配置加载的入口类负责根据mybatis-config.xml文件创建SqlSessionFactory。
SqlSessionFactory是MyBatis执行SQL的核心对象。
核心流程解析XML配置文件SqlSessionFactoryBuilder使用XMLConfigBuilder解析XML文件。
构建Configuration对象解析后的配置信息被封装到Configuration对象中。
创建SqlSessionFactory最终通过Configuration对象创建SqlSessionFactory。
示例代码java复制public class SqlSessionFactoryBuilder { public SqlSessionFactory build(InputStream inputStream) { XMLConfigBuilder parser new XMLConfigBuilder(inputStream); Configuration configuration parser.parse(); return new DefaultSqlSessionFactory(configuration); } }
XMLConfigBuilder解析配置文件XMLConfigBuilder是MyBatis的配置解析器负责将XML配置文件解析为Configuration对象。
解析过程通过DOM解析器进行。
核心方法document.getRootElement()获取XML文档的根元素通常是configuration节点。
parseConfiguration()将配置文件中的各个节点如settings、properties、mappers等逐一解析并加载到Configuration对象中。
Configuration类的初始化Configuration类是MyBatis的核心配置类保存着MyBatis的所有配置信息。
它包含了数据库连接信息、映射器信息、插件、类型处理器等。
初始化过程读取数据库连接池信息加载environment和dataSource节点。
初始化类型处理器加载typeHandlers节点。
配置插件加载plugins节点。
加载映射器加载mappers节点。
示例代码java复制public class Configuration { private DataSource dataSource; private TypeHandlerRegistry typeHandlerRegistry; private PluginRegistry pluginRegistry; private ListMappedStatement mappedStatements; public void addMapper(String resource) { // 加载Mapper文件 loadMapper(resource); } private void loadMapper(String resource) { InputStream inputStream Resources.getResourceAsStream(resource); XMLMapperBuilder mapperParser new XMLMapperBuilder(inputStream, this, resource); mapperParser.parse(); } }
解析数据库连接配置在mybatis-config.xml配置文件中数据库连接信息通常通过environment和dataSource节点进行配置。
XMLConfigBuilder会读取这些信息并将其转化为相应的DataSource对象。
数据源类型POOLED使用连接池。
UNPOOLED不使用连接池。
示例代码java复制public void parseConfiguration(XNode root) throws Exception { XNode environmentsNode root.evalNode(environments); if (environmentsNode ! null) { for (XNode environmentNode : environmentsNode.getChildren()) { String type environmentNode.getStringAttribute(type); DataSource dataSource createDataSource(type); configuration.setDataSource(dataSource); } } }
解析类型处理器和插件配置MyBatis支持自定义类型处理器和插件它们的配置通常在typeHandlers和plugins节点下。
核心代码java复制public void parseConfiguration(XNode root) throws Exception { // 解析TypeHandlers节点注册自定义类型处理器 XNode typeHandlersNode root.evalNode(typeHandlers); if (typeHandlersNode ! null) { for (XNode typeHandlerNode : typeHandlersNode.getChildren()) { String handler typeHandlerNode.getStringAttribute(handler); configuration.getTypeHandlerRegistry().register(handler); } } // 解析Plugins节点注册插件 XNode pluginsNode root.evalNode(plugins); if (pluginsNode ! null) { for (XNode pluginNode : pluginsNode.getChildren()) { String interceptor pluginNode.getStringAttribute(interceptor); configuration.addInterceptor(interceptor); } } }核心方法getTypeHandlerRegistry()将自定义类型处理器注册到Configuration中。
addInterceptor()将插件注册到Configuration中。
Mapper文件的加载与解析Mapper文件通常用于定义具体的SQL语句在mybatis-config.xml中的mappers节点下配置。
XMLConfigBuilder会根据这些配置加载Mapper文件并注册。
示例配置xml复制configuration mappers mapper resourcecom/example/UserMapper.xml/ /mappers /configuration核心代码java复制public void parseConfiguration(XNode root) throws Exception { XNode mappersNode root.evalNode(mappers); if (mappersNode ! null) { for (XNode mapperNode : mappersNode.getChildren()) { String resource mapperNode.getStringAttribute(resource); // 加载Mapper文件 loadMapper(resource); } } } private void loadMapper(String resource) { InputStream inputStream Resources.getResourceAsStream(resource); XMLMapperBuilder mapperParser new XMLMapperBuilder(inputStream, configuration, resource); mapperParser.parse(); }XMLMapperBuilder的作用XMLMapperBuilder负责解析具体的Mapper.xml文件将SQL语句解析并映射到MappedStatement对象中。