Mybatis组件与其生命周期
Mybatis组件介绍
- SqlSessionFactoryBuilder : 构造器,它会根据配置或者代码来生成SqlsessionFactory,采用分布构建Builder模式(建造者模式)。
- SqlSessionFactory : 工厂接口,依靠它来生成SqlSession,使用的是工厂模式。
- SqlSession : 会话,既可以发送sql语句,也可以获得mapper映射文件的接口。
- Sql Mapper : 映射器,由mapper xml文件和一个对应的java 接口 构成,需要给出对应的sql以及映射规则,负责发送sql并去执行,并返回结果。
SqlSessionFactory
SqlSessionFactory的构建需要借助SqlSessionFactoryBuilder分步引导产生,最常使用的方式是由 SqlSessionFactoryBuilder 读取配置文件XML来生成SqlSessionFactory,但是Mybatis也提供了java代码配置方式(代码冗长)。
当提供配置文件后,Mybatis会通过com.apache.ibatis.session.Configuration
类对象构建整个Mybatis上下文。(SqlSessionFactory 是一个接口,存在SqlSessionManager(多线程环境使用)和DefaultSqlSessionFactory(一般情况下使用))
每个Mybatis应用都是基于一个SqlSessionFactory的实例为中心,它的唯一作用就是生产核心接口对象SqlSession。所以它是唯一的应采用单例模式处理。
SqlSession
在Mybatis中,SqlSession是核心接口,它的作用类似于JDBC中的Connection 对象,代表了一个数据库链接资源的启动,它主要负责 获得mapper接口,发送sql到数据库,事务的控制。但是SqlSession像是一个代理对象,其中真正负责工作的是Executor。需要注意的是 SqlSession代表一个数据库连接资源,要及时将它关闭,否则当数据库链接资源耗光时,导致系统瘫痪。
映射器
它是mybatis中最复杂,最重要的组件,它由一个接口和相对应的xml文件(或者注解 直接写在接口的方法上 不推荐)构成。它负责以下四点
1. 描述映射规则
2. 提供sql语句,配置参数类型,返回值类型等
3. 配置缓存
4. 提供动态sql功能
映射器主要作用就是将sql查询到的结果映射到一个POJO,或者将POJO的数据插入到数据库。
生命周期介绍
- SqlSessionFactoryBuilder 它的作用在于创建SqlSessionFactory,所以只能存在创建SqlSessionFactory的方法中,不让其长期存在。
- SqlSessionFactory 可以看作数据库连接池,占据着数据库的链接资源,mybatis的本质就是对数据库进行操作,所以他应该存在于整个mybatis应用中。
- SqlSession 看作是一个数据库连接,只生存于一次业务请求中,当一次请求结束后,应将资源还给SqlSessionFactory,建议用try catch finally 保证它及时关闭。
- 映射器 由 SqlSession创建的一个接口,代表一次请求中的业务处理逻辑,所以生命周期应该与SqlSession保持一致。