Executor定义、作用、工作流程
定义
Executor是MyBatis中执行SQL语句的核心组件之一,它封装了对数据库的操作,包括SQL语句的解析、参数的设置、结果的映射等。Executor是MyBatis中最底层的执行器,负责与数据库进行交互,执行SQL语句,并将结果返回给应用程序。
作用
Executor的作用主要有以下几个方面:
- 执行SQL语句:Executor负责执行各种类型的SQL语句,如查询、插入、更新、删除等。
- 缓存管理:Executor可以管理一级缓存和二级缓存,提高数据库操作的性能。
- 提供事务管理:Executor可以为数据库操作提供事务管理功能,保证数据库操作的原子性、一致性和持久性。
工作流程
1.Executor的工作流程
- 解析SQL语句:Executor首先解析SQL语句,将其转换为JDBC可执行的语句。
- 设置参数:Executor将SQL语句中的占位符替换为真实的参数值,并将参数设置到PreparedStatement中。
- 执行SQL语句:Executor执行SQL语句,并将结果映射为Java对象。
- 处理缓存:如果开启了缓存功能,则Executor会将结果缓存到一级缓存或二级缓存中,以提高数据库操作的性能。
- 提交事务或回滚事务:如果需要提交事务或回滚事务,则Executor会调用Transaction对象的commit或rollback方法。
- 返回结果:Executor将查询结果或操作结果返回给应用程序。
2.常用Executor实现
MyBatis提供了多种Executor实现, 下面介绍三种常用Executor实现
2.1 SimpleExecutor
SimpleExecutor是默认的Executor实现方式,它是最简单的Executor实现,每次执行SQL时都会打开一个新的PreparedStatement,执行完成后再关闭Statement。SimpleExecutor不支持二级缓存,每次查询都会从数据库中获取数据。
2.2 ReuseExecutor
ReuseExecutor是重用Statement的Executor实现方式,它会在初始化时创建PreparedStatement对象,并缓存到Map中。每次执行SQL时,从缓存中获取PreparedStatement对象,设置参数后再执行SQL语句。当所有结果集都被处理完毕后,Statement并不会立即关闭,而是缓存到Map中,以供下一次使用。ReuseExecutor支持二级缓存,当查询结果被缓存到二级缓存中时,下次查询时直接从缓存中获取数据,提高了查询效率。
2.3 BatchExecutor
BatchExecutor是批量处理的Executor实现方式,它可以将多个SQL语句合并到一起执行,以减少数据库的交互次数,提高数据库操作效率。BatchExecutor会缓存所有待执行的SQL语句,并在调用flushStatements()方法时批量执行这些SQL语句。BatchExecutor不支持二级缓存。 需要注意的是,每种Executor实现方式都有其适用的场景,应根据实际情况选择合适的实现方式,以提高系统的性能。
需要注意的是,Executor一般是由SqlSession对象调用,SqlSession对象会根据配置信息创建合适的Executor对象,并将操作委托给Executor执行。Executor的实现方式有多种,包括SimpleExecutor、ReuseExecutor和BatchExecutor等,可以根据应用程序的需求选择不同的实现方式。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-03-09,如有侵权请联系 cloudcommunity@tencent 删除缓存mybatis工作流入门数据库