千家信息网

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 无锡通用软件开发定制价格 服务器本地名称怎么写 网络安全专业在国企好就业吗 网络安全为人民靠人民班会内容 宾馆网络安全审计系统设备 软件开发包缩写 开封中等计算机网络技术专业 网络安全中的学科知识链接 网络安全配置检测要求
0