Mybatis源码分析[02.XMLConfigBuilder]
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,// BaseBuilder属性public abstract class BaseBuilder { //需要配置,类型别名注册,类型处理器注册3个东西 protected final Conf
千家信息网最后更新 2025年01月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安全错误
数据库的锁怎样保障安全
网络安全基础知识100例
企业网络安全黑板报花边框
数据库批量插入单次设置为多少
服务器连续工作会起火吗
武汉金蝶软件开发公司在哪里
公安局网络安全知识教育
云服务器远程文件软件
ui设计是学什么软件开发
流媒体服务器导出安全证书
网络安全感悟400
黑客命令控制服务器的英文
网络安全安装软件顺口溜短句
查看数据库的列
宁波哪里有学习网络技术的
网络安全意识宣传掌上南充
甘肃省网络安全宣传周活动开幕
国家网络安全周简报
武汉珍岛云网络技术有限公司
数据库工程师赛希押题
木瓜互联网科技手抄报内容
服务器turbo
无锡通用软件开发定制价格
服务器本地名称怎么写
网络安全专业在国企好就业吗
网络安全为人民靠人民班会内容
宾馆网络安全审计系统设备
软件开发包缩写
开封中等计算机网络技术专业
网络安全中的学科知识链接
网络安全配置检测要求