范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Mybatis核心类SqlSessionFactory,看完我悟了

  本篇文章我们首先解析 SqlSessionFactory 的创建过程。  1、实例代码
  在实例代码中,我们在测试类中写了一个 init() 方法,里面包括了 SqlSessionFactory 的构建,分为两步。
  第一步:读取配置文件 mybatis-config.xml 输入流
  第二步:根据输入流构建 SqlSessionFactory;  public void init() {     //定义mybatis全局配置文件     String resource = "mybatis-config.xml";     //加载 mybatis 全局配置文件     InputStream inputStream = null;     try {         inputStream = Resources.getResourceAsStream(resource);     } catch (IOException e) {         e.printStackTrace();     }     //构建sqlSession的工厂     sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  }
  没什么难的,去掉 try-catch,也就两行代码。  InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  是的,那只是你以为的两行代码,其实......
  话不多说,指北君就来给大家揭秘这冰山下面的东西。  2、代码剖析
  根据上面的时序图,我们分析根据源码分析每个步骤。
  ①、获取配置文件输入流  InputStream inputStream = Resources.getResourceAsStream("mybatis.config.xml");
  这里没什么好说的,就是获取配置文件的输入流。
  ②、build(in)
  这里的 in 就是上一步获取的输入流 inputStream。    public SqlSessionFactory build(InputStream inputStream) {     return build(inputStream, null, null);   }
  在进入到 build 方法:    public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {     try {       XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);       return build(parser.parse());     } catch (Exception e) {       throw ExceptionFactory.wrapException("Error building SqlSession.", e);     } finally {       ErrorContext.instance().reset();       try {         inputStream.close();       } catch (IOException e) {         // Intentionally ignore. Prefer previous error.       }     }   }
  ③、XMLConfigBuilder(in)
  这一段代码是为了解析我们的配置文件,配置文件是 XML形式 ,我在之前的博客介绍过解析 XML 的几种方式。
  一种是基于树的结构来解析的称为DOM;另一种是基于事件流的形式称为SAX和(StAX)
  两者各有优缺点,我这里不做详细说明,想了解的可以看我之前的文章。
  而 Mybatis 使用的是 DOM 形式,并结合 XPath 来解析配置文件。
  ④、parse()      public Configuration parse() {         if (this.parsed) {             throw new BuilderException("Each XMLConfigBuilder can only be used once.");         } else {             this.parsed = true;             this.parseConfiguration(this.parser.evalNode("/configuration"));             return this.configuration;         }     }
  从 /configuration 标签处开始解析。然后我们进入到 this.parseConfiguration() 方法中:      private void parseConfiguration(XNode root) {         try {             this.propertiesElement(root.evalNode("properties"));             Properties settings = this.settingsAsProperties(root.evalNode("settings"));             this.loadCustomVfs(settings);             this.loadCustomLogImpl(settings);             this.typeAliasesElement(root.evalNode("typeAliases"));             this.pluginElement(root.evalNode("plugins"));             this.objectFactoryElement(root.evalNode("objectFactory"));             this.objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));             this.reflectorFactoryElement(root.evalNode("reflectorFactory"));             this.settingsElement(settings);             this.environmentsElement(root.evalNode("environments"));             this.databaseIdProviderElement(root.evalNode("databaseIdProvider"));             this.typeHandlerElement(root.evalNode("typeHandlers"));             this.mapperElement(root.evalNode("mappers"));         } catch (Exception var3) {             throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + var3, var3);         }     }
  看到这是不是很熟悉了,这不就是mybatis-config.xml 配置文件里面的各个标签名嘛,是的,这就是解析该文件,然后全部放在 configuration 对象中。需要注意的是,这里的 configuration 对象不仅包括 mybatis-config.xml 文件内容,也包括 xxxMapper.xml 文件内容。
  ⑤、build(configuration)    public SqlSessionFactory build(Configuration config) {     return new DefaultSqlSessionFactory(config);   }
  就是去 new 了一个 DefaultSqlSessionFactory 对象,将 configuration 作为参数。
  ⑥、DefaultSqlSessionFactory(configuration)      public DefaultSqlSessionFactory(Configuration configuration) {         this.configuration = configuration;     } 3、总结
  自此,SqlSessionFactory 的创建过程就讲完了,总的来说就是一个封装了配置文件的工厂类。那么得到了 SqlSessionFactory 这个工厂对象,接下来干嘛?生产 SqlSession,然后通过 SqlSession 进行数据库的增删改查操作
  没错,接下来,指北君将给大家介绍 SqlSession 的交互过程,这也是 Mybatis 里面最重要的一个对象。

巴萨冬窗离队首人获官宣!28岁荷兰射手400万加盟马竞,签约2年半北京时间1月20日晚,西甲劲旅马德里竞技队官方宣布,28岁的荷兰国脚孟菲斯德佩正式加盟。根据名记罗马诺的透露,德佩将会与马竞签约2年半,合同将会持续到2025年6月。马竞将为德佩支99的家庭矛盾因钱而起,23年的1月各种头疼事兔如其来,年难过!2020,2021,2022这三年我一直是躺平的状态,一味地强调客观原因,没有主动去寻找一切可能的机会来让自己的生活发生一些惊喜的改变。过去三年我的想法很多,很多想法事后证明都是不思科路由器配置全套笔记静态RIPOSPF,网络工程师收藏如果本文对你有帮助,欢迎关注讨论点赞收藏转发给朋友,让我们一起相互学习共同进步。路由器(Router),是连接因特网中各局域网广域网的设备,它会根据信道的情况自动选择和设定路由,以整机155W功耗释放!ROG幻16星空版来了最高i913900HRTX4070独显在ROG幻2023家族中,全新的幻16星空版属于家族里的真旗舰,它的硬件配置和标准版相似,但显卡的功耗释放却进一步提升到了145W,整体性能更出色,可以满足追求更高性能的内容创作者鑫谷昆仑机箱ampampamp冰霜360ARGB散热器装机使用体验前言鑫谷这个品牌在国内的装机市场中拥有着很大的体量以及用户群体,在之前给朋友装机时也购买过鑫谷家的LUX机箱,整体的设计也是非常的前卫,配合大面积的亚克力透明外壳也是留下了很深的印简单几步,显卡不再烫手显卡降压降温教学A卡篇大家要知道显卡为什么会发热?原因其实很简单显卡发热是显卡电路中的电阻产生热量导致的。当运行比较大的程序或游戏时,电路的功率会大幅增加,发热量也就会大幅增加由于显卡的不同核心和制程工为什么我们这么多的孩子反感教育?为什么那么多年轻人要去躺平?为什么我们这么多的孩子反感教育?为什么那么多年轻人要去躺平?也不能全怪年轻人躺平,无论是谁,在这个年代,同样的职业,也有很高的概率会去躺。图片源自网络,如有侵权,联系删除现代化的教iOS16。3准正式来了,可冲Apple今日向果粉们推送了iOSiPadOS15。7。3RC更新,版本号19H307。本次更新主要针对无法更新到iOS16的果粉们,只是进行了Bug修复和优化。另外,Apple今祝贺丨CAAI会员李航俞栋朱文武三位专家入选ACMFellow今日凌晨,美国计算机协会ACM(AssociationforComputingMachinery)公布了最新一届会士名单。本年度新入选科学家中共有57人,他们的贡献涉及网络安全人机17部门推动机器人融入养老服务不同场景和关键领域中新网1月19日电工信部网站19日公开了工业和信息化部等十七部门关于印发机器人应用行动实施方案的通知。机器人应用行动实施方案提出,研制残障辅助助浴二便护理康复训练家务情感陪护娱乐休春节降价大促,这4款手机可以闭眼入,最低已跌至1559元您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。很多人想在春节期间更换手机,春节手机的销量会上升,为了获得更多的销量,很多品牌也进行降价大
前三季度销量超过特斯拉,比亚迪蜕变完成?近期,比亚迪发布公告称,10月新能源汽车销量21。78万辆今年前三季度,比亚迪乘用车销量达到了118。5万辆,同比大增160,超过了国外电动车巨头特斯拉同期的90。9万辆。以如此高果链飓风代工厂的宿命与远方来源锦缎(IDjinduan006)作者愚老头苹果链上的公司,境外某大客户但凡有个风吹草动,在供应商那就是一场飓风。飓风起于青萍之末。本文将从现象入手,拆解整场飓风的缘起当下与未来骁龙8Gen2测试,网友有835那味,天玑9200有点难了天玑9200和骁龙8Gen2发布后,很多网友都关心二者的实际表现,而厂商为了宣传自家的芯片,提供了工程机给相关媒体测试,而最近极客湾已经完成了二者的测试,从目前的测试情况来看,高通资讯允许前排无人,百度小马智行在京获自动驾驶测试许可文懂车帝原创常思玥懂车帝原创行业11月21日,北京市智能网联汽车政策先行区颁发自动驾驶无人化第二阶段测试的许可,百度Apollo小马智行成为首批获准在北京开启前排无人,后排有人的自关注麒麟电池将供货给特斯拉?宁德时代合作信息保密文懂车帝原创邢秋鸿懂车帝原创行业11月22日,针对麒麟电池是否有计划供货给特斯拉的问题,宁德时代在投资者互动平台表示,公司的供应链合作信息属于商业保密范畴。麒麟电池今年6月,宁德时朝鲜能看到哪些中国产品?淘汰的国货最受欢迎改革开放之后我国加紧了与世界各国的交流和沟通,同时也促成了和多个国家的外交关系。我国凭借着人口众多的优势成为了世界上的制造大国,中国产品也逐渐流向世界市场,其中就包括朝鲜。我国的产中国惊艳的10个县城,去过一半,不枉此生!你去过几个?无论大城市多么耀眼,也不要小看县域的光芒。在县城,家人朋友都在身边,上下班不用挤地铁,周末可以去田里呼吸新鲜空气今天,就为大家介绍10个独具风貌的中国县城(含县级市)。浙江桐庐桐庐江苏盐城值得推荐的九个旅游景点盐镇水街百河之城再现繁华,感受最盐城魅力盐镇水街,紧邻串场河,位于东进路和世纪大道之间,是海盐历史文化风貌区的主景区,为国家AAAA级旅游景区。其以水街建筑为主体,形成了仿古建筑街摩洛哥,一个令人费解的非洲国家在大部分人眼里,非洲国家都是一个以黑人为主,但是有这么一个国家却恰恰相反。它就是位于非洲西北角的摩洛哥,摩洛哥不仅以白人为主,而且还与欧洲人长得特别相像,那么摩洛哥是一个怎样的国家济北旅游大道为什么要封上呢?难道为了防控就不给走大路了?今天有事去汶上北,要走济北旅游大道。但是刚到了汶上界,因疫情原因去汶上的旅游大道给封上了。既没有留个出口或检查站之类的,也没有小路可以绕过去。只能走去汶上的105国道,看了下导航多宋朝的旅游博主驴友鼻祖徐霞客现如今到各个名胜古迹名山大川打卡旅游,领略风土民情,撰写旅游日记和攻略成了年轻人的潮流。殊不知这都是宋朝徐霞客玩剩下的。搁现代,老徐绝对是旅游大V。少年立志徐霞客绝对是素质教育成功