200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 2.MyBatis源码解析-SqlSession构建流程--阿呆中二

2.MyBatis源码解析-SqlSession构建流程--阿呆中二

时间:2021-03-06 01:13:30

相关推荐

2.MyBatis源码解析-SqlSession构建流程--阿呆中二

SqlSession构建流程

MyBatisSqlSession构建流程与我联系

MyBatis

本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程SqlSession构建流程CRUD执行流程MyBatis扩展点,以及针对面试题进行源码分析。

mybatis 3.x源码深度解析与最佳实践下载:/download/u013425841/12816685

SqlSession构建流程

MyBatis执行的基本流程大致可以分四个步骤:

使用Resources类加载Mybatis的Xml配置文件使用SqlSessionFactoryBuilder构建SqlSessionFactory对象使用SqlSessionFactory对象调用openSession获取SqlSession使用SqlSessioon对象调用select\update\delete等方法进行操作

public static void main(String[] args) {try {Reader reader;// 1.加载mybatis configuration配置文件String resource = "Configuration.xml";reader = Resources.getResourceAsReader(resource);// 2.使用SqlSessionFactoryBuilder构建SqlSessionFactory对象SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 3.构建SqlSession对象SqlSession session = sessionFactory.openSession();try {//4.执行数据库查询User user = (User) session.selectOne("com.mybatis.source.mapper.UserMapper.getUser", 1);System.out.println(user.getAge() + "," + user.getName());} finally {session.close();}} catch (IOException e) {e.printStackTrace();}

今天重点分析SqlSession的构建流程,主要对应代码

SqlSession session = sessionFactory.openSession();

进入源码分析:

首先调用openSession方法, 内部调用openSessionFromDataSource方法

getTransactionFactoryFromEnvironment()方法的作用:

根据环境配置选择事物管理器工厂,本文配置的是JDBC,所以使用的是JdbcTransactionFactory.

通过事物管理器工厂newTransaction方法,获取JdbcTransaction事物管理器,底层使用Connection进行事物commit和rollback

接下来获取执行器,configuration.newExecutor(tx, execType);

MyBatis一共4选择器,分别是BatchExecutor、ReuseExecutor、SImpleExecutor、CachingExecutor

BatchExecutor:

批量执行器,BatchExecutor使用PreparedStatement的addBatch方法批量添加sql语句,之后使用executeBatch一次性提交缓存的sql语句,提高了处理性能.

BatchExecutor处理器,当执行的sql语句是同一个,会像ReuseExecutor处理一样,复用Statement预处理对象,提高性能

ReuseExecutor:

复用Statement预处理对象,性能比SimpleExecutor好

SImpleExecutor:

简单执行器,没有特别处理,每次开启新的Statement,默认是SimpleExecutor

CachingExecutor:

缓存执行器,当开启二级缓存会使用该执行器,CachingExecutor并没有直接继承BaseExcutor,而且通过委托的方式使用上面的执行器去处理逻辑,CachingExecutor则主要关注二级缓存的实现逻辑

开启二级缓存的方式

接下来就是执行器的代理创建:

interceptorChain.plugin(executor)方法最终会调用到wrap方法,进行代理创建

我们熟知的PageHelper就是通过实现拦截器,动态拦截sql达到语句的修改

至此openSession的逻辑就结束了,包装到DefaultSqlSession返回

与我联系

Java/一对一零基础辅导/公司项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 微信:study_51ctofx

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。