四Mybatis 核心组件介绍
Posted archerLuo罗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四Mybatis 核心组件介绍相关的知识,希望对你有一定的参考价值。
- 源码地址:https://github.com/RononoaZoro/mybatis-book/tree/master 的 mybatis-book ( mybatis-chapter04 )
- 文章内容出自《Mybatis 3 源码深度解析》第四章
1、Mybatis 核心组件和执行流程
2、Configuration 详解
Mybatis 配置信息
- 1、配置 Mybatis框架信息的主配置文件,Configuration 的作用是描述 Mybatis 的主配置文件的信息
- 2、配置执行 SQL 语句的 Mapper 配置文
- 3、具体配置属性说明请参考 Mybatis 3 官方文档
3、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 详解
- BaseStatementHandler 是一个抽象类,封装了通用的处理逻辑及方法执行流程
- SimpleStatementHandler 封装了对 JDBC Statement 的操作
- PreparedStatementHandler 封装了对 JDBC PreparedStatement 的操作
- CallableStatementHandler 封装了对 JDBC CallableStatement 的操作
- RoutingStatementHandler 会根据 Mapper 配置中的 statementType 属性(STATEMENT, PREPARED, CALLABLE),来创建对应的 StatementHandler 。
6、TypeHandler 详解
- TypeHandler 是 Mybatis 处理 JDBC 类型与 Java 类型之间的转换
7、ParameterHandler 详解
- ParameterHandler 的作用,是在 PreparedStatementHandler 和 CallableStatementHandler 操作对应的 Statement 执行数据库交互之前为参数占位符设置值
- ParameterHandler 只有一个默认实现类 DefaultParameterHandler
8、ResultSetHandler 详解
- ResultSetHandler 用于在 StatementHandler 对应执行完查询或存储过程后,对结果集进行处理
- ResultSetHandler 只有一个默认实现类 DefaultResultSetHandler
以上是关于四Mybatis 核心组件介绍的主要内容,如果未能解决你的问题,请参考以下文章