MyBatis_2 - MyBatis构成/生命周期

MyBatis 的基本构成

 

 

SqlSessionFactoryBuilder(构造器)

它会根据配置信息或者代码来生成SqlSessionFactory

 

SqlSessioinFactory

依靠工厂来生成SqlSession

 

每个MyBatis的应用都是以SqlSessionFactory的实例为中心的,

SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得.

但是要注意,SqlSessionFactory是一个工厂接口而不是实现类,它的任务是创建SqlSessionSqlSession类似于一个JDBC中的Connection对象.

 

MyBatis提供两种模式去创建SqlSessionFactory

  1. XML配置 (推荐)
  2. 代码方式

能够使用配置文件,尽量使用配置文件,一方面避免硬编码,另一方面,方便日后修改参数。

 

SqlSession

它是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口

 

SqlSession是一个接口类,扮演着门面的作用,而真正干活的是Executor接口。

SqlSession接口类似于JDBC中的Connection接口对象,我们需要保证每次用完正常关闭它,所以正常的做法是把关闭SqlSession接口的方法

写在finally语句中,保证每次都关闭SqlSession

 

SqlSession的用途主要有两个:

  1. 获取映射器:

让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行然后返回结果。

 

  1. 直接通过命名信息去执行SQL返回结果:

这是ibatis版本遗留的方式。

SqlSession层,我们可以通过update , insert , select , delete等方法,带上SQLID,来操作XML中配置好的SQL

同时它也支持事物,通过commint , rollback方法配置或者回滚事务。

 

 

Sql Mapper映射器

它是MyBatis新设计的组件,它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则.

它负责发送SQL去执行,并返回结果.

 

映射器是由Java接口和XML文件(或注解)共同组成的,它的作用如下:

  1. 定义参数类型
  2. 描述缓存
  3. 描述SQL语句
  4. 定义查询结果和POJO映射关系

 

映射器的实现有两种,一种是通过XML文件方式实现,另一种是通过代码方式实现,不过建议使用XML方式。

 

 

 

上面这些它们之间的关系如下图



生命周期

 

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFactory

 

它的作用就是一个构建器,一旦我们构建了SqlSessionFactory,它的作用就已经完结,失去了存在的意义,这时我们应该毫不犹豫的将它回收

 

所以它的生命周期只存在于方法的局部

 

SqlSessionFactory

SqlSessionFactory的作用是创建SqlSession

 

每次应用程序需要访问数据库,我们就要通过SqlSessionFactory创建SqlSession,所以SqlSessionFactory应该在MyBatis应用的整个生命周期中。

 

如果我们多次创建同一个数据库的SqlSessionFactory,则每次创建SqlSessionFactory会打开更多的数据库连接资源,那么连接资源很快会被耗尽,

因此SqlSessionFactory的责任是唯一的,它的责任就是创建SqlSession,所以采用单例模式

 

一个数据库只对应一个SqlSessionFactory,管理好数据库资源的分配,避免过多的Connection被消耗。

 

SqlSession

SqlSession是一个会话,相当于JDBC中的Connection对象,它的生命周期应该是在请求数据库处理事务的过程中。

它是一个线程不安全对象,在设计多线程的时候,需要特别注意。

每次创建使用之后,都需要及时关闭它。

 

存活于一个应用的请求和操作中,可以执行多条SQL,保证事务的一致性


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值