MyBatis架构原理

架构原理篇

架构图

在这里插入图片描述

接口层

接口层是MyBatis提供给开发人员的一套API。主要使用SqlSession接口。通过SqlSession接口和Mapper接口。开发人员可以通知MyBatis框架调用哪一条SQL命令以及SQL命令关联参数。

SQLSession接口使用方式:

public void start() throws IOException{
    InputStream is = Resources.getResourceAsStream("myBatis-config.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
	session = factory.openSession();
    try{
        session.insert("InsertDept_Sql",dept);
    }finally{
        session.close();
    }
}

Mapper接口调用方式:

public void start() throws IOException{
    String resource = "mybatis-config.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

	// 通过SqlSessionFactory获取sqlSession
	SqlSession session = sqlSessionFactory.openSession();
	try {
 	 	// 通过SqlSession对象获取BlogMapper接口的代理对象,
  	 	// 然后赋值给BlogMapper接口
 		BlogMapper mapper = session.getMapper(BlogMapper.class);
  	 	// 调用BlogMapper接口的方法来执行指定的数据库操作
  		Blog blog = mapper.selectBlog(101);
	} finally {
  		session.close();
	}
}

数据处理层

数据处理层是Mybatis框架内部的核心实现,来完成对映射文件的解析与数据处理:

(1)参数解析与参数绑定

(2)SQL解析

(3)结果集映射解析与结果集映射处理

支撑层

支撑层用来完成Mybatis与数据库基本连接方式以及SQL命令与配置文件对应。主要负责:

(1)MyBatis与数据库连接方式管理

(2)Mybatis对事务管理方式

(3)配置文件加载

(4)Mybatis查询缓存管理

架构流程图

在这里插入图片描述

说明:

  1. mybatis配置文件

    • SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
    • Mapper.xml,此文件作为mybatis的sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
  2. SqlSessionFactory

    通过mybatis环境等配置信息构造SqlSessionFactory,即会话工厂。

  3. sqlSession

    通过会话工厂创建sqlSession即会话,程序员通过sqlsession会话接口对数据库进行增删改查操作。

  4. Executor执行器

    mybatis底层自定了Executor执行器接口来具体操作数据库,Executor接口有两个实现,一个是基本执行器(默认),一个是缓存执行器,sqlsession底层是通过executor接口操作数据库的。

  5. MappedStatement

    它也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个select/insert/update/delete标签对应一个MappedStatement对象,select/insert/update/delete标签的id既是MappedStatement的Id。

    • MappedStatement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo、Executor通过MappedStatement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
    • MappedStatement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo、Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果解析处理过程。

调用流程图

在这里插入图片描述

四大组件(完成JDBC操作):

​ Executor、StatementHandler、ParameterHandler、ResultSethandler

Configuration:

​ 封装了全局配置文件和映射文件中的信息。

BoundSql:

​ 组合模式,将解析之后的sql语句和解析出来的参数信息进行封装。

MappedStatement:

​ 封装select/insert/update/delete等CRUD标签的信息,包含入参类型信息和输出类型信息等。

SqlSession

接受开发人员提供Statement Id和参数,并返回操作结果。

Executor

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

StatementHandler

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

ParameterHandler

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

ResultSetHandler

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

TypeHandler

负责java数据类型和jdbc数据之间的映射和转换。

MappedStatement

维护了一条<select|update|delete|insert>节点的封装。

SqlSource

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

Configuration

MyBatis所有的配置信息都维持在Configuration对象之中。

mapper代理执行原理

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值