文档章节

mybatis之SqlSessionFactory

u
 udbwcso
发布于 2016/04/06 15:20
字数 388
阅读 1367
收藏 21
点赞 2
评论 0

版本:mybatis-3

主要分析SqlSessionFactory的构建过程

SqlSessionFactoryBuilder从XML中构建SqlSessionFactory

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

 

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactoryBuilder用来创建SqlSessionFactory实例,一旦创建了SqlSessionFactory,就不再需要它了

public SqlSessionFactory build(InputStream inputStream) {
  return build(inputStream, null, null);
}

调用

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)

源码如下:

/**
   * 根据配置创建SqlSessionFactory
   *
   * @param inputStream 配置文件输入流
   * @param environment 环境名称
   * @param properties  外部配置
   * @return
   */
  public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
      //parser.parse()读取配置文件返回configuration
      //build()根据返回的configuration创建SqlSessionFactory
      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.
      }
    }
  }

最终创建DefaultSqlSessionFactory实例

  public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

其中

XMLConfigBuilder与Configuration

XMLConfigBuilder的方法parse()

public Configuration parse() {
	if (parsed) {
	    throw new BuilderException("Each XMLConfigBuilder can only be used once.");
	}
	parsed = true;
	//读取mybatis-config.xml配置信息,"configuration"是根结点
	parseConfiguration(parser.evalNode("/configuration"));
	return configuration;
}

XMLConfigBuilder的方法parseConfiguration(XNode root)

/**
 * 读取配置文件组装configuration
 * @param root 配置文件的configuration节点
 */
private void parseConfiguration(XNode root) {
	try {
		//issue #117 read properties first
		propertiesElement(root.evalNode("properties"));
		typeAliasesElement(root.evalNode("typeAliases"));
		pluginElement(root.evalNode("plugins"));
		objectFactoryElement(root.evalNode("objectFactory"));
		objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
		reflectionFactoryElement(root.evalNode("reflectionFactory"));
		settingsElement(root.evalNode("settings"));
		// read it after objectFactory and objectWrapperFactory issue #631
		environmentsElement(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);
	}
}

关于配置文件相关的源码分析参看:

https://my.oschina.net/u/657390/blog/661681

设计模式

从SqlSessionFactory和Configuration的创建过程中可以看出它们都使用了建造者模式.

 

© 著作权归作者所有

共有 人打赏支持
u
粉丝 77
博文 34
码字总数 15709
作品 0
武汉
mybatis基础入门

一.什么是mybatis MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的 JDB C 代码、手工设置参数和结果集重获。MyBatis 只使用简单的 XML 和注解来配置...

xiejunbo ⋅ 2014/09/22 ⋅ 0

MyBatis学习笔记一:SqlSessionFactory

参考资料:http://mybatis.github.io/mybatis-3/zh/getting-started.html 每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。SqlSessionFactory对象的实例可以通过SqlSess...

zlikun ⋅ 2013/04/07 ⋅ 3

关于MyBatis sqlSession的一点整理

原文地址:关于MyBatis sqlSession的一点整理 工作中,需要学习一下MyBatis sqlSession的产生过程,翻看了mybatis-spring的源码,阅读了一些mybatis的相关doc,对mybatis sqlSession有了一些...

Realfighter ⋅ 2015/01/04 ⋅ 1

《深入理解mybatis原理》 Mybatis初始化机制详解

对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外。本章将通过以下几点详细介绍MyBatis的初始化过程。 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置文件创建Configu...

jason_wu_2 ⋅ 2016/12/01 ⋅ 0

MyBatis源码解读-SqlSessionFactory

0.从配置文件开始 要了解MyBatis的的源码,我们可以看看我们平时在Spring容器中使用MyBatis的配置文件,找到最基本的入口. Spring会调用SqlSessionFactoryBean这个工厂bean的无参构造函数,同时...

似是而非Sage ⋅ 2016/08/17 ⋅ 0

spring与mybatis三种整合方法

本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.google.com/p/mybatis/下载到。 1、采用数据映射器(MapperFactoryBean)的方式...

山海经 ⋅ 2014/06/22 ⋅ 0

ORM框架 hibernate和mybatis 连接数据详解

工作中,需要学习一下MyBatis sqlSession的产生过程,翻看了mybatis-spring的源码,阅读了一些mybatis的相关doc,对mybatis sqlSession有了一些认知和理解,这里简单的总结和整理一下。 首先...

LYQ1990 ⋅ 2016/04/28 ⋅ 0

搭建框架的时候不用写dao实现层代码

<!-- sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:typeAliasesPackage="com.jumei.wms.dataaccess.domain"> <property name="......

小小小七 ⋅ 2015/04/02 ⋅ 0

【MyBatis框架】mybatis和spring整合

spring和mybatis整合 1.整合思路 需要spring通过单例方式管理SqlSessionFactory。 spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)...

Mysoft ⋅ 2015/09/21 ⋅ 0

Mybatis整合Spring

根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持。因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Myb...

如何让他和 ⋅ 2016/08/16 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 12分钟前 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 25分钟前 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 28分钟前 ⋅ 0

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 41分钟前 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 57分钟前 ⋅ 0

压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具

压缩打包介绍 压缩的好处不仅能节省磁盘空间而且在传输的时候节省传输时间和网络带宽 windows系统下文件带有 .rar .zip .7z 后缀的就是压缩文件 linux系统下则是 .zip, .gz, .bz2, .xz, ...

黄昏残影 ⋅ 今天 ⋅ 0

观察者模式

1.利用java原生类进行操作 package observer;import java.util.Observable;import java.util.Observer;/** * @author shadow * @Date 2016年8月12日下午7:29:31 * @Fun 观察目标 **/......

Cobbage ⋅ 今天 ⋅ 0

Ubuntu打印服务器配置

参考:https://blog.csdn.net/gsls200808/article/details/50950586 https://blog.csdn.net/jiay2/article/details/80252369 https://wiki.gentoo.org/wiki/HPLIP 由于媳妇儿要大量打印资料,......

大熊猫 ⋅ 今天 ⋅ 0

面试的角度诠释Java工程师(二)

原文出处: locality 续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会...

颖伙虫 ⋅ 今天 ⋅ 0

github中SSH的Key

https://help.github.com/articles/connecting-to-github-with-ssh/ https://help.github.com/articles/testing-your-ssh-connection/ https://help.github.com/articles/adding-a-new-ssh-k......

whoisliang ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部