MyBatis核心类列表

8/21/2021 mybatisCore

# 概述🥖

MyBatis主要的核心类包括:SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession,Executor,StatementHandler,ResultSetHandler。

# SqlSessionFactoryBuilder🍿

  • 每一个MyBatis的应用程序的入口是SqlSessionFactoryBuilder。它的作用是通过XML配置文件创建Configuration对象,然后通过build方法创建SqlSessionFactory对象。
public class App
{
    public static void main(String[] args) throws Exception
    {
        // 读取mybatis-config.xml文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

        // 初始化mybatis,创建SqlSessionFactory类的实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 创建Session实例
        SqlSession session = sqlSessionFactory.openSession();

        // 操作数据库方法一:获得xml映射文件中定义的操作语句
        Person p = session.selectOne("cn.mybatis.mydemo.mapper.PersonMapper.selectPersonById", 1);
        // 打印Peson对象
        System.out.println(p);

        // 操作数据库方法二:获得mapper接口的代理对象
        PersonMapper pm = session.getMapper(PersonMapper.class);
        // 直接调用接口的方法,查询id为1的Peson数据
        Person p2 = pm.selectPersonById(1);
        // 打印Peson对象
        System.out.println(p2);

        // 提交事务
        session.commit();
        // 关闭Session
        session.close();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  • 没有必要每次访问Mybatis就创建一次SqlSessionFactoryBuilder,通常的做法是创建一个全局的对象就可以了。示例程序如下:
private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;
private static SqlSessionFactory sqlSessionFactory;

private static void init() throws IOException 
{
    String resource = "mybatis-config.xml";
    Reader reader = Resources.getResourceAsReader(resource);
    sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);
}
1
2
3
4
5
6
7
8
9
10

# SqlSessionFactory🧂

  • SqlSessionFactory的主要功能是创建SqlSession对象,和SqlSessionFactoryBuilder对象一样,没有必要每次访问Mybatis就创建一次SqlSessionFactory,通常的做法是创建一个全局的对象就可以了。
  • SqlSessionFactory是线程安全的,它一旦被创建,应该在应用执行期间都存在。在应用运行期间不要重复创建多次,建议使用单例模式。

# SqlSession🧈

  • SqlSession类的主要功能是完成一次数据库的访问和结果的映射,它类似于一次会话概念,顾命名为:SqlSession。

  • SqlSession类似于JDBC里面的Connection,Connection不是线程安全的,SqlSession也不是线程安全的。由于不是线程安全的,所以SqlSession对象的作用域需限制方法内。

  • SqlSession的默认实现类是DefaultSqlSession,它有两个必须配置的属性:Configuration和Executor。mybatis-config.xml中的配置,最后会解析xml成Configuration这个类。SqlSession对数据库的操作都是通过Executor来完成的。

  • SqlSession有一个重要的方法getMapper,顾名思义,这个方式是用来获取Mapper映射器的。

# Executor🥟

  • Executor对象在创建Configuration对象的时候创建,并且缓存在Configuration对象里。
  • Executor对象的主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)。

# StatementHandler🌯

  • StatementHandler是真正访问数据库的地方,并调用ResultSetHandler处理查询结果。

# ResultSetHandler🥓

  • 处理查询结果。

# MyBatis核心类层次&职责🥨

mybatis082101_1

SqlSession,作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能

Executor,MyBatis执行器,是MyBatis调度的核心,负责SQL语句的生成和查询缓存的维护

StatementHandler,封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数、将Statement结果集转换成List集合。

ParameterHandler,负责对用户传递的参数转换成JDBC Statement 所需要的参数

ResultSetHandler,负责将JDBC返回的ResultSet结果集对象转换成List类型的集合

TypeHandler,负责Java数据类型和JDBC数据类型之间的映射和转换

MappedStatement,MappedStatement维护了一条select|update|delete|insert节点的封装

SqlSource,负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql,表示动态生成的SQL语句以及相应的参数信息

Configuration,MyBatis所有的配置信息都维持在Configuration对象之中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18