这里写自定义目录标题

  • 欢迎使用Markdown编辑器# 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、配置文件解析入口
    • 1.配置文件解析入口
    • 2.文件解析
  • 总结

欢迎使用Markdown编辑器# 系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 欢迎使用Markdown编辑器# 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、配置文件解析入口
    • 1.配置文件解析入口
    • 2.文件解析
  • 总结

前言


我们使用mybatis操作数据库都是通过SqlSession的API调用,而创建SqlSession是通过SqlSessionFactory。下面我们就看看SqlSessionFactory的创建过程。

一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、配置文件解析入口

1.配置文件解析入口

public static void main(String[] args) throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();try {Employee employeeMapper = sqlSession.getMapper(Employee.class);List<Employee> all = employeeMapper.getAll();for (Employee item : all)System.out.println(item);} finally {sqlSession.close();}
}
public SqlSessionFactory build(InputStream inputStream) {// 调用重载方法return build(inputStream, null, null);
}
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {// 创建配置文件解析器XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);// 调用 parser.parse() 方法解析配置文件,生成 Configuration 对象return build(parser.parse());
}public SqlSessionFactory build(Configuration config) {// 创建 DefaultSqlSessionFactory,将解析配置文件后生成的Configuration传入return new DefaultSqlSessionFactory(config);
}

2.文件解析

  public Configuration parse() {if (parsed) {throw new BuilderException("Each XMLConfigBuilder can only be used once.");}parsed = true;parseConfiguration(parser.evalNode("/configuration"));return configuration;}private void parseConfiguration(XNode root) {try {//issue #117 read properties firstpropertiesElement(root.evalNode("properties"));Properties settings = settingsAsProperties(root.evalNode("settings"));loadCustomVfs(settings);typeAliasesElement(root.evalNode("typeAliases"));pluginElement(root.evalNode("plugins"));objectFactoryElement(root.evalNode("objectFactory"));objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));reflectorFactoryElement(root.evalNode("reflectorFactory"));settingsElement(settings);// read it after objectFactory and objectWrapperFactory issue #631environmentsElement(root.evalNode("environments"));databaseIdProviderElement(root.evalNode("databaseIdProvider"));typeHandlerElement(root.evalNode("typeHandlers"));mapperElement(root.evalNode("mappers"));} catch (Exception e) {throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);}}
# 我们目录只看这两个配置文件解析environmentsElement(root.evalNode("environments"));mapperElement(root.evalNode("mappers"));# 解析后set到configuration中private void environmentsElement(XNode context) throws Exception {if (context != null) {if (environment == null) {environment = context.getStringAttribute("default");}for (XNode child : context.getChildren()) {String id = child.getStringAttribute("id");if (isSpecifiedEnvironment(id)) {TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager"));DataSourceFactory dsFactory = dataSourceElement(child.evalNode("dataSource"));DataSource dataSource = dsFactory.getDataSource();Environment.Builder environmentBuilder = new Environment.Builder(id).transactionFactory(txFactory).dataSource(dataSource);configuration.setEnvironment(environmentBuilder.build());}}}}
  private void mapperElement(XNode parent) throws Exception {if (parent != null) {for (XNode child : parent.getChildren()) {if ("package".equals(child.getName())) {String mapperPackage = child.getStringAttribute("name");configuration.addMappers(mapperPackage);} else {String resource = child.getStringAttribute("resource");String url = child.getStringAttribute("url");String mapperClass = child.getStringAttribute("class");if (resource != null && url == null && mapperClass == null) {ErrorContext.instance().resource(resource);InputStream inputStream = Resources.getResourceAsStream(resource);XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());mapperParser.parse();} else if (resource == null && url != null && mapperClass == null) {ErrorContext.instance().resource(url);InputStream inputStream = Resources.getUrlAsStream(url);XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url, configuration.getSqlFragments());mapperParser.parse();} else if (resource == null && url == null && mapperClass != null) {Class<?> mapperInterface = Resources.classForName(mapperClass);configuration.addMapper(mapperInterface);} else {throw new BuilderException("A mapper element may only specify a url, resource or class, but not more than one.");}}}}}

总结

03_根据配置文件创建SqlSessionFactory(Configuration的创建过程)相关推荐

  1. Mybatis源码分析之(二)根据配置文件创建SqlSessionFactory(Configuration的创建过程)

    SqlSessionFactoryBuilder.build创建SqlSessionFactory(粗略走一步流程) 看完上篇文章后,你对mybatis应该有个大概的了解了,那么我们知道new Sql ...

  2. MyBatis 核心配置综述之 Configuration详解

    颓废青年,快出来挨打! 点击上方"Java极客技术",选择"设为星标" 后台回复"java",获取Java知识体系/面试必看资料 资料会持续 ...

  3. 【USB笔记】配置描述符Configuration Descriptor

    USB笔记 配置描述符(Configuration Descriptor) 配置描述符(Configuration Descriptor)说明了一个特定配置的相关信息.取得设备描述符(Device D ...

  4. [SpringBoot2]容器功能_底层注解配置绑定_@Configuration@Import@Conditional@ImportResource

    @Configuration&@Bean 告诉SpringBoot这是一个配置类==配置文件 #############################Configuration使用示例### ...

  5. linux kvm dhcp配置,《转》QEMU-KVM创建虚拟机自动指定IP的配置

    在使用qemu创建虚拟机的过程中是无法指定IP地址的,可是在实际应用中,我们是需要虚拟机拥有IP地址的,并且不是人为去虚拟机操作系统上配置.在qemu虚拟机技术文档(http://qemu.weiln ...

  6. Team Foundation Server 2010 安装、部署与配置(七):创建 Team Project 时的一个 Issue:TF218027 .

    上文<Team Foundation Server 2010 安装.部署与配置(六):创建 Team Project>中,我在实践过程中其实遇到过一个 issue(TF218027),所幸 ...

  7. Flowable 6.6.0表单 - 1.配置 - 1.4 数据库配置(Database configuration)

    培训视频推荐 CSDN上提供了Flowable 6.6.0的系列培训视频课程,欢迎有兴趣的朋友前往学习. <Flowable流程入门课程> <Flowable流程高级课程> & ...

  8. 实验5:配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、(FactoryBean测试)★

    实验5:配置通过静态工厂方法创建的bean.实例工厂方法创建的bean.(FactoryBean测试)★ bean的创建默认就是框架利用反射new出来的bean实例 工厂模式:工厂帮我们创建对象:有一 ...

  9. Springboot 配置类( @Configuration) 不能使用@Value注解从application.propertyes中加载值以及Environment为null解决方案

    Springboot 配置类( @Configuration) 不能使用@Value注解从application.propertyes中加载值以及Environment为null解决方案 参考文章: ...

最新文章

  1. 昌平房价已降至6500元每一平米
  2. IOS-C语言第1天
  3. Centos 6.7 配置时间同步解决时间自动变化的问题
  4. 国产计算机设备,小芯机:“天玥”中国第一台纯国产电脑诞生!
  5. webpack 合并压缩_webpack的运用
  6. ASP.NET伪静态-无法读取配置文件,因为它超过了最大文件大小的解决办法
  7. 封装(私有化成员变量,获取变量值)
  8. LeetCode 671. 二叉树中第二小的节点
  9. 敏捷测试感悟(之一)
  10. think in java bruce eckel_java大师 Bruce Eckel 批评java
  11. angular遇到问题
  12. 游戏测试成长之路02-测试用例
  13. Thymeleaf模板引擎使用详解
  14. kali安装火狐浏览器
  15. 基于近似计算的同态加密方案CKKS17----实现库介绍
  16. Android自定义View2--触摸事件传递机制
  17. 五 、Elasticsearch分词器
  18. sublimeText3配置sublimeLinter
  19. java77-GUL下拉菜单框和滚动条
  20. android6恢复桌面,安卓手机桌面日期和天气误删除的恢复方法

热门文章

  1. 【网络安全】MS17-010“永恒之蓝”漏洞的利用
  2. PHP面试基础题之一
  3. mblock机器人指令_mBot机器人如何通过蓝牙实现与PC端mBlock的无线通信?
  4. oracle sql子串替换,【总结】Oracle sql 中的字符(串)替换与转换
  5. DCT离散余弦变换(C语言)
  6. CStdioFile 在文件末尾追加内容
  7. GD32F4上使用HAL库实现USB虚拟串口通讯
  8. oracle 00600 kccpb,惜分飞 - 提供7*24专业数据库(Oracle,SQL Server,MySQL等)恢复和Oracle技术服务@Tel:+86 13429648788...
  9. 图神经网络(十八)GEOM-GCN: GEOMETRIC GRAPH CONVOLUTIONAL NETWORKS
  10. codesmith 7.0 破解