Mybatis源码分析[02.XMLConfigBuilder]
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,// BaseBuilder属性public abstract class BaseBuilder { //需要配置,类型别名注册,类型处理器注册3个东西 protected final Conf
千家信息网最后更新 2026年10月31日Mybatis源码分析[02.XMLConfigBuilder]
// BaseBuilder属性public abstract class BaseBuilder { //需要配置,类型别名注册,类型处理器注册3个东西 protected final Configuration configuration; protected final TypeAliasRegistry typeAliasRegistry; protected final TypeHandlerRegistry typeHandlerRegistry;}public class XMLConfigBuilder extends BaseBuilder{},可见XMLConfigBuilder继承自BaseBuilder
// XMLConfigBuilder属性public class XMLConfigBuilder extends BaseBuilder { //是否已解析 private boolean parsed; // XPath解析器 private XPathParser parser; // 当前环境 private String environment;}SqlSessionFactoryBuilder调用XMLConfigBuilder的parse()函数
// // // // // // // // // // // // // // // // // // //解析配置 public Configuration parse() { //如果已经解析过了,报错 if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; //根节点是configuration parseConfiguration(parser.evalNode("/configuration")); return configuration; }通过源码可以看到parse()函数实际上是调用的parseConfiguration()函数,内部实现如下:
private void parseConfiguration(XNode root) { try { //分步骤解析 //issue #117 read properties first //1.properties propertiesElement(root.evalNode("properties")); //2.类型别名 typeAliasesElement(root.evalNode("typeAliases")); //3.插件 pluginElement(root.evalNode("plugins")); //4.对象工厂 objectFactoryElement(root.evalNode("objectFactory")); //5.对象包装工厂 objectWrapperFactoryElement(root.evalNode("objectWrapperFactory")); //6.设置 settingsElement(root.evalNode("settings")); // read it after objectFactory and objectWrapperFactory issue #631 //7.环境 environmentsElement(root.evalNode("environments")); //8.databaseIdProvider databaseIdProviderElement(root.evalNode("databaseIdProvider")); //9.类型处理器 typeHandlerElement(root.evalNode("typeHandlers")); //10.映射器 mapperElement(root.evalNode("mappers")); } catch (Exception e) { throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e); }}以上函数为mybatis对于配置文件的关键节点进行解析处理.
- propertiesElement(XNode context)
//// // // - typeAliasesElement(XNode context)
//// // // // // // // - pluginElement(XNode context)
//MyBatis 允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis 允许使用插件来拦截方法调用//// // // // - objectFactoryElement(XNode context)
//// // - objectWrapperFactoryElement(XNode context)
- settingsElement(XNode context)
//// // // // // // // // // // // // // // - environmentsElement(XNode context)
// // // // // // // // // // // // // - databaseIdProviderElement(XNode context)
// // // // // - typeHandlerElement(XNode context)
// // // - mapperElement(XNode context)
// 1.使用类路径// // // // // //// 2.使用绝对url路径// // // // // //// 3.使用java类名// // // // // //// 4.自动扫描包下所有映射器// // //
函数
类型
处理
配置
别名
处理器
对象
射器
属性
工厂
插件
环境
节点
路径
源码
东西
关键
实际
实际上
情况
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网是第几次科技革命的成果
广州大一互联网络科技有限公司
互联网科技公司起名
互联网科技产业
互联网科技金融
中国最先进互联网科技公司
搜狐科技互联网
恒生互联网科技指数跳水
国大互联网教育科技有限公司工作
畅思互联网科技
乌鲁木齐新华智原互联网科技学校
洛阳共同富裕互联网科技有限公司
众安科技工业互联网合作
上海创道互联网络科技有限公司
宇信科技在杭州互联网排第几
广州互联网高科技取餐柜
艺电能源互联网科技有限公司招聘
互联网金融运营模式中的金融科技
现代互联网科技公司
科技互联网企业在行动
互联网科技保险
麻工互联网科技
互联网科技与金融科技
奇酷互联网科技公司
浩特互联网科技
狮子座互联网科技有限公司
宁夏众和广鑫互联网科技有限公司
深圳育鹏互联网科技有限公司招聘
中国互联网公司的科技投入
亚光科技低轨卫星互联网