mybatis框架主要是围绕SqlSession对象来进行的。
SqlSessionFactory
它是个单个数据库映射关系经过编译后的内存的镜像
作用:是创建SqlSession的工厂
来源:可以从xml配置文件中或者预先定制一个Configuration实例来构建SqlSessionFactory实例
范围:应用程序执行期间
线程:安全
模式:建议单例或者静态单例模式
SqlSessionFactoryBuilder
SqlSession
1.它是myBatis的关键对象;
2.是应用程序与持久层交互之间执行交互操作的一个单线程对象,也是执行持久化操作的关键对象;
3.包含所有以数据库为背景的所有执行sql操作的方法,底层封装了jdbc连接;
4.可以用SqlSession实例来直接执行被映射的sql语句;
5.每个线程的SqlSession是独立的;
6.SqlSession不能被共享,同时也是线程不安全的,绝对不能将一个SqlSession实例的引用放在一个类的静态字段或者一个实
例字段中,也不能将一个SqlSession实例的引用放在任何类型的管理范围中,比如Servlet的HttpSession对象中。
7.使用完之后要关闭,一般使用finally块。
SqlSessionFactory和SqlSession实现过程
mybatis框架主要是围绕SqlSessionFactory来进行的,创建过程如下:
1.定义一个Configuration对象,其中包含数据源、事务、Mapper文件资源以及影响数据库行为属性设置settings。
2.通过一个配置对象则可以创建一个SqlSessionFactoryBuilder对象
3.通过SqlSessionFactoryBuilder创建SqlSessionFactory对象
4.通过SqlSessionFactory获取操作数据的SqlSession实例,通过该实例对数据库进行操作。
SqlSessionFactory的创建:分为两种情况,如下:
1.如果mybatis未与Spring进行整合时:上诉的Configuration对象可以通过配置文件mybatis-config.xml来完成,具体见
https://mp.youkuaiyun.com/postedit/84664546
//读取配置文件
InputStream resourceAsStream = Reources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryBuilder.build(resourceAsStream );
2.如果mybatis与Spring进行了整合:在applicationContext.xml中配置如下
<bean id="SqlSessionFactory " class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource">
<!--自动扫描Mapping.xml文件-->
<property name="mapperLocations" value="classpath:com/cn/mapper/*.xml">
</property>
</bean>
注意:connection对象是在SqlSession对象创建之后进行curd操作时创建的,其具体是在ManagedTransaction中获取的:
protected void openConnection() throws SQLException {
if (log.isDebugEnabled()) { log.debug("Opening JDBC Connection"); }
//dataSource 来源有三种,JndiDatasource,PooledDataSource,UnpooledDataSource,配置文件中定义
this.connection = this.dataSource.getConnection(); if (this.level != null) {
this.connection.setTransactionIsolation(this.level.getLevel());
}
}
PooledDataSource和UnPooledDataSource的区别是PooledDataSource使用了连接池。