Mybatis SqlsessionFactory
在Mybatis 与 Spring 进行整合的时候,我们会进行sqlSessionFactory 的配置,来创建sqlSessionFactory 对象:如下;
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation"><value>classpath:mybatis/mybatis-config.xml</value></property>
<!-- 自动扫描mapper.xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/mapper/**/*.xml"></property>
<property name="dataSource" ref="mysqlDs" />
</bean>
我们点进去 SqlSessionFactoryBean 内部
类继承关系:果然这三个集成接口全部都是Spring 的扩展接口;
public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent>
根据XML的配置,我们可以看到(知识点:对于定义的 Resource属性,Spring 会自动将我们XML 配置的资源文件转换为Resource 对象,就可以对文件进行操作了,很方便 )
private Resource configLocation;
private Resource[] mapperLocations;
private DataSource dataSource;
因为 SqlSessionFactoryBean 实现了 InitializingBean的接口,我们先看 afterPropertiesSet() 方法:
public void afterPropertiesSet() throws Exception {
notNull(dataSource, "Property 'dataSource' is required");
notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");
//初始化sqlSessionFactory
this.sqlSessionFactory = buildSqlSessionFactory();
}
可以看到 buildSqlSessionFactory() 方法进行了sqlSessionFactory 的初始化操作;
buildSqlSessionFactory()内容比较多,从全局出发大致就是这四件事情:
1. 在整个sqlSessionFactory 维护着一个Configuration 的配置信息,这个配置信息包括了数据库的配置,以及我们定义mybatis-config.xml 我们自定义的mapper.xml 解析后的配置信息,几乎是所有的mapper配置信息都可以在这个类中找到,是mybatis 开发中重要组件,没有此类,几乎所有的方法不能运行; 2. xmlConfigBuilder.parse(); 解析 mybatis-config.xml ,把一些我们在 mybatis-config.xml 定义的一些配置 plugins, typeAliases,mappers等很多配置的信息,存放到 Configuration 组件中;
3. xmlMapperBuilder.parse(); 这个是用来解析我们的自定义的mapper.xml 的方法,作用也一样,就是将配置sql ,namespace ,方法加载到 Configuration 组件中,会将sql片段进行保存(XML 解析的方式主要就是jaxp 的dom 解析以及xpath 解析); 4. return this.sqlSessionFactoryBuilder.build(configuration); 创建 sqlSessionFactory 对象,-> 返回 return new DefaultSqlSessionFactory(config); 默认的 DefaultSqlSessionFactory
可以看到很多的操作都是在维护 Configuration的配置信息;可想而知,很重要;
Mybatis SqlsessionFactory的更多相关文章
- MyBatis SqlSessionFactory的几种常见创建方式
原文链接:https://blog.csdn.net/jimolangge123/article/details/49228255 MyBatis框架主要是围绕着SqlSessionFactory这个 ...
- MyBatis - SqlSessionFactory 与 SqlSession
SqlSessionFactory SqlSessionFactory是创建SqlSession的工厂,一般使用单例模式,不需要重复创建. SqlSession SqlSession是直接与数据库直接 ...
- MyBatis_ibatis和mybatis的区别【转】
1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下:也就是说ibatis2.*,mybatis3.*. 2. 映射文件的不同 ibatis的配置 ...
- eclipse + maven 搭建springMVC+Spring+mybatis 系统
首先需要下载maven 安装maven插件.自行百度. 1: 创建maven系统 http://huxiaoheihei.iteye.com/blog/1766986 2:添加pom依赖: pom.x ...
- myBatis应用
最近项目中使用myBatis(iBatis),所以目前对所遇的一些问题及有些模糊的地方在这里标注一下. 首先mybaits是一个“半自动化”的ORM框架. 需要使用的jar包:mybatis-3.0. ...
- MyBatis入门学习
所需要jar包:mybatis-3.x.x.jar .如果需要和spring整合,还需要加入相关的包 1:看项目目录 红颜色不要关心 2:按照步骤: 1:加入jar包 2:创建数据源(configur ...
- MyBatis good
命名解析:为了减少输入量,MyBatis 对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则. 完全限定名(比如“com.mypackage.MyMapper.selectAl ...
- MyBatis学习门户网站(一)
需要jar包:mybatis-3.x.x.jar .假设需要和spring综合,此外,我们需要增加相关的包 1:看到项目文件夹 不要在意红色 2:依照步骤: 1:增加jar包 2:创建数据源(conf ...
- 从JDBC到hibernate再到mybatis之路
一.传统的JDBC编程 在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mappin ...
随机推荐
- 2019年1月16日22:50:28 白糖SR1905
很好的机会,只拿了点皮毛,如果说都是因为上班时间不充裕那是给自己找借口,最主要原因没别的:思维不清,策略不明- 这里的入场初衷是周线区间下沿,日线向下脱离中枢失败后回拉一笔,那么这一单的做法就应该很明 ...
- SurfaceView绘图时刷新问题,尝试各种办法无法解决,请教高手
/** * */ 源码:http://pan.baidu.com/s/1i3FtdZZ 画图时最左面,第一帧总是出现一个黑条,其它的帧没有问题package com.macrosoft.testewa ...
- 关于shiro安全框架实现同一用户同一时刻仅可在一个地址登录的技术实现
首先,我们要说明一下,本技术点的开发背景是shiro与springMvc结合环境下的开发方式. 由于shiro把用户登录后的信息都存在了自己封装的session中,所以要实现单一地址登录,我们需要关注 ...
- 2018-2019-2 20175328李欣颖实验二《Java面向对象程序设计》实验报告
2018-2019-2 20175328李欣颖实验二<Java面向对象程序设计>实验报告 面向对象程序设计-1 用程序解决问题时,要会写三种码: 1.伪代码 此处百分制转五分制: 如果成绩 ...
- IDEA 倒入maven项目下载很慢
1.找到安装maven的路径 2.直接搜索settings.xml文件 <mirror> <!--This sends everything else to /public --&g ...
- redis--解析字符串
# coding=utf-8import codecs if __name__ == '__main__': cmdlist = ("Decode") while True: cm ...
- oracle入坑日记<二>认识oracle(含sqlplus基础使用)
1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...
- supersocket 遇到的Failed to initialize 和 log4net用法
使用Bootstrap来通过配置启动SuperSocket的时候总是显示Failed to initialize! , 官网配置中 <superSocket> <servers&g ...
- Linux java进程无故被kill
这两天,演示环境的java应用无端端就被停止了.在这里记录一下原因和排查过程: 发现应用挂掉以后,第一时间登陆centos,发现进程没有了.于是重新启动应用. 但是启动不起来,去看业务日志,没有找到任 ...
- 6.2 集合和映射--集合Set->底层基于链表实现
在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此 ...