0
点赞
收藏
分享

微信扫一扫

MyBatis的核心组件和生命周期


1 核心组件:

(1)、SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建的Builder模式。

(2)、SqlSessionFactory(工厂接口):依靠它来生成SqlSession,使用的是工厂模式。

(3)、SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。

(4)、SQL Mapper(映射器):MyBatis新设计存在的组件,它由一个Java接口和XML文件(或注解)构成,需要给对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。

备注:无论是映射器还是SqlSession都可以发送SQL到数据库执行。


2 SqlSessionFactory 说明

(1) 使用MyBatis首先是使用配置或者代码去生产SqlSessionFactory,而MyBatis提供了构造器SqlSessionFactoryBuilder。它提供了一个类

org.apache.ibatis.Configuration作为引导,采用的是Builder模式。具体的分布在Configuration类里面完成的。

(2) 生成:SqlSessionFactory有两种方式:

        1、通过读取配置XML文件的形式生成。

        2、通过Java代码的方式生成。

(3)XML构建SqlSessionFactory:在mybatis-config.xml里面配置相关信息(怎么配置这里不再赘述),

       然后通过SqlSessionFactoryBuilder的Builder方法创建SqlSessionFactory。

       使用代码创建SqlSessionFactory:略(由于不常用,这里直接忽略,想研究的可以查看相关文档)。

(4) SqlSessionFactory是一个接口 它的实现类:

    SqlSessionManager:使用多线程的环境中,它的具体实现依靠DefaultSessionFactory。

    DefaultSessionFactory:具体都是靠它来实现。

(5) 作用:MyBatis的应用都是以一个SqlSessionFactory的实例为中心的,它的唯一作用是生产MyBatis的核心接口对象SqlSession。使用单例模式来处理它。

3 SqlSession

在MyBatis中,SqlSession是其核心的接口。在MyBatis中有两个实现类,DefaultSqlSession和SqlSessionManager。

DefaultSqlSession是单线程使用的,而SqlSessionManager在多线程环境下使用。

作用:它相当于JDBC中的Connection对象,代表着一个连接资源的启用

  (1)获取Mapper接口

  (2)发送SQL给数据库

  (3)控制数据库事务

4 映射器

映射器是MyBatis中最重要、最复杂的组件,它由一个接口和对应的XML文件(或注解)组成。

它可以配置以下内容:

    1、描述映射规则。

    2、提供SQL语句,并可以配置SQL参数类型、返回类型、缓存刷新等信息。

    3、配置缓存。

    4、提供动态SQL。

作用:就是将SQL查询到的结果映射为一个POJO,或者将POJO的数据插入到数据库中,并定义一些关于缓存等重要内容。

备注:MyBatis运用了动态代理的方式使得接口能运行起来。

5 生命周期:

(1)、SqlSessionFactoryBuilder作用是创建SqlSessionFactory,创建成功后,它就失去了作用。所以它只存在创建SqlSessionFactory中。

(2)、SqlSessionFactory它可以被认为是一个数据库连接池,它的作用是创建SqlSession接口对象。所以它的生命周期存在于整个MyBatis的应用之中,所以一旦被创建了,就要长期保存它,知道不再使用MyBatis应用。

(3)、SqlSession相当于一个数据库的连接(Connection对象),你可以在一个事务里面执行多条SQL,然后通过它的commit、rollback等方法,提交或者回滚事务。所以它存活在一个业务请求中,处理完整个请求后,应该关闭连接归还给连接池。

(4)、Mapper它是一个接口,它由SqlSession创建,所以它的生命周期小于等于SqlSession,因为它由SqlSession关闭。



举报

相关推荐

0 条评论