四Mybatis 核心组件介绍

Posted archerLuo罗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四Mybatis 核心组件介绍相关的知识,希望对你有一定的参考价值。

  • 源码地址:https://github.com/RononoaZoro/mybatis-book/tree/master 的 mybatis-book ( mybatis-chapter04 )
  • 文章内容出自《Mybatis 3 源码深度解析》第四章

1、Mybatis 核心组件和执行流程

Mybatis 核心组件和执行流程

2、Configuration 详解

Mybatis 配置信息

  • 1、配置 Mybatis框架信息的主配置文件,Configuration 的作用是描述 Mybatis 的主配置文件的信息
  • 2、配置执行 SQL 语句的 Mapper 配置文
  • 3、具体配置属性说明请参考 Mybatis 3 官方文档

3、Executor 详解

Executor 实现类

  • 1)、SqlSession 是 Mybatis 提供操作数据库的 API, 但真正执行 SQL 的是 Executor 组件(门面模式);
  • 2)、SimpleExecutor 可以完成基础的增删查改功能
  • 3)、ReuseExecutor 对 JDBC 中的 Statement 做了缓存,执行相同 SQL 语句时,可避免频繁创建和销毁 Statement 对象(享元模式)
  • 4)、BatchStatement , 顾名思义,是调用 Statement 的批量操作
package com.blog4java.mybatis.example;

import com.alibaba.fastjson.JSON;
import com.blog4java.common.DbUtils;
import com.blog4java.mybatis.example.entity.UserEntity;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.*;
import org.apache.ibatis.transaction.jdbc.JdbcTransaction;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.List;

public class ExecutorExample {

    @Before
    public void initData() {
        DbUtils.initData();
    }
    @Test
    public void testExecutor() throws IOException, SQLException {
        // 获取配置文件输入流
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 通过SqlSessionFactoryBuilder的build()方法创建SqlSessionFactory实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 调用openSession()方法创建SqlSession实例
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Configuration configuration = sqlSession.getConfiguration();
        // 从Configuration对象中获取描述SQL配置的MappedStatement对象
        MappedStatement listAllUserStmt = configuration.getMappedStatement(
                "com.blog4java.mybatis.com.blog4java.mybatis.example.mapper.UserMapper.listAllUser");
        //创建ReuseExecutor实例
        Executor reuseExecutor = configuration.newExecutor(
                new JdbcTransaction(sqlSession.getConnection()),
                ExecutorType.REUSE
        );
        // 调用query()方法执行查询操作
        List<UserEntity> userList =  reuseExecutor.query(listAllUserStmt,
                null,
                RowBounds.DEFAULT,
                Executor.NO_RESULT_HANDLER);
        System.out.println(JSON.toJSON(userList));
    }


}

4、MappedStatement 详解

  • MyBatis 通过 MappedStatement 描述 <select|update|insert|delete> 或者 @Select、@Update 等注解配置的 SQL 信息
  • 具体配置详情请参考 Mybatis 3 官方文档

5、StatementHandler 详解

StatementHandler 实现类

  • BaseStatementHandler 是一个抽象类,封装了通用的处理逻辑及方法执行流程
  • SimpleStatementHandler 封装了对 JDBC Statement 的操作
  • PreparedStatementHandler 封装了对 JDBC PreparedStatement 的操作
  • CallableStatementHandler 封装了对 JDBC CallableStatement 的操作
  • RoutingStatementHandler 会根据 Mapper 配置中的 statementType 属性(STATEMENT, PREPARED, CALLABLE),来创建对应的 StatementHandler 。

6、TypeHandler 详解

  • TypeHandler 是 Mybatis 处理 JDBC 类型与 Java 类型之间的转换
    TypeHandler 部分子类

7、ParameterHandler 详解

  • ParameterHandler 的作用,是在 PreparedStatementHandler 和 CallableStatementHandler 操作对应的 Statement 执行数据库交互之前为参数占位符设置值
  • ParameterHandler 只有一个默认实现类 DefaultParameterHandler

8、ResultSetHandler 详解

  • ResultSetHandler 用于在 StatementHandler 对应执行完查询或存储过程后,对结果集进行处理
  • ResultSetHandler 只有一个默认实现类 DefaultResultSetHandler

以上是关于四Mybatis 核心组件介绍的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis详解

03-Mybatis 核心组件

MyBatis 01 快速入门

MyBatis核心组件

MyBatis四大核心对象之ParameterHandler

MyBatis源码分析四XML解析与核心对象的构建