购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 MyBatis的核心对象

通过前面的学习可知,MyBatis的持久化解决方案将用户从原始的JDBC访问中解放出来,用户只需要定义SQL语句,无须关注底层的JDBC操作。MyBatis通过配置文件管理JDBC连接,实现数据库的持久化访问。

使用 MyBatis 框架解决持久化问题,主要涉及3个核心对象,分别是 SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession,它们在MyBatis框架中起着至关重要的作用。下面将对这3个对象进行详细讲解。

2.1.1 SqISessionFactoryBuiIder

所有的MyBatis应用都是以SqlSessionFactory对象为中心,而 SqlSessionFactoryBuilder 就是 SqlSessionFactory的构造者。SqlSessionFactoryBuilder 通过 build()方法构建SqlSessionFactory对象,SqlSessionFactoryBuilder提供了多个重载的build()方法,如图2-1所示。

图2-1 SqlSessionFactoryBuilder中重载的build()方法

在图2-1中,这些重载的build()方法,按照配置信息的传入方式可以分为三种形式,具体如下。

第一种形式:

build(InputStream inputStream,String environment,Properties properties)

上述build()方法中,参数inputStream是字节流,它封装了XML文件形式的配置信息;参数environment和参数properties为可选参数。其中,参数environment用于指定将要加载的环境,包括数据源和事务管理器;参数properties用于指定将要加载的properties文件。

第二种形式:

build(Reader reader,String environment,Properties properties)

由上述build()方法可知,第二种形式的build()方法参数作用与第一种形式大体一致,唯一不同的是,第一种形式的build()方法使用InputStream字节流封装了XML文件形式的配置信息,而第二种形式的build()方法使用Reader字符流封装了XML文件形式的配置信息。

第三种形式:

build(Configuration config)

上述build()方法中,Configuration对象用于封装MyBatis项目中的配置信息。

通过以上代码可知,配置信息可以通过InputStream(字节流)、Reader(字符流)、Configuration(类)3种形式提供给SqlSessionFactoryBuilder的build()方法。

下面通过读取XML配置文件的方式来构造SqlSessionFactory对象,其关键代码如下:

// 读取配置文件
InputStream inputStream = Resources.getResourceAsStream("配置文件位置");
// 根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory 对象是线程安全的,它一旦被创建,在整个应用程序执行期间都会存在。如果多次创建同一个数据库的SqlSessionFactory对象,那么该数据库的资源将很容易被耗尽。为了解决此问题,通常一个数据库只创建一个 SqlSessionFactory 对象,因此在构建 SqlSessionFactory 对象时,建议使用单例模式。

2.1.2 SqISessionFactory

SqlSessionFactory是MyBatis框架中十分重要的对象,用于创建SqlSession对象,所有的MyBatis应用都是以SqlSessionFactory为对象中心。在SqlSessionFactoryBuilder构建SqlSessionFactory对象之后,就可以使用SqlSessionFactory对象调用openSession()方法创建SqlSession对象,SqlSessionFactory有多个重载的openSession()方法,具体如表2-1所示。

表2-1 SqlSessionFactory的openSession()方法

续表

注意:

openSession()方法的参数为boolean值时,若传入true表示关闭事务控制,自动提交;若传入false表示开启事务控制。若不传入参数,默认为true。

2.1.3 SqISession

SqlSession是MyBatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操作的对象,主要作用是执行持久化操作,类似于JDBC中的Connection。SqlSession对象包含了执行SQL操作的方法,由于其底层封装了JDBC连接,所以可以直接使用SqlSession对象来执行已映射的SQL语句。

SqlSession对象中包含了很多方法,其常用方法如表2-2所示。

表2-2 SqlSession对象中的常用方法

续表

每一个线程都应该有一个自己的SqlSession对象,并且该对象不能共享。SqlSession对象是线程不安全的,因此其使用范围最好在一次请求或一个方法中,绝不能将其放在类的静态字段、对象字段或任何类型的管理范围(如Servlet的HttpSession)中使用。使用完SqlSession对象后要及时关闭,SqlSession对象通常放在finally块中关闭,示例代码如下: EaSbpw0GWSbvObEGqDysdeWTVAPiS/nYpkNQr/2XqcCAJ5SV7t+WXA7zgm1trSXR

SqlSession sqlSession = sqlSessionFactory.openSession();
try {
      // 此处执行持久化操作
} finally {
      sqlSession.close();
}
点击中间区域
呼出菜单
上一章
目录
下一章
×