当前位置: 首页 > news >正文

如何做网站横幅网络技术服务

如何做网站横幅,网络技术服务,广南网站制作,长沙棋牌软件开发公司前言: 前文我们从源码层面梳理了 SqlSessionFactory 的创建过程,本篇我们继续分析一下 SqlSession 的获取过程。 初识 MyBatis 【MyBatis 核心概念】 案例代码: public class MyBatisTest {Testpublic void test() throws IOException {/…

前言:

前文我们从源码层面梳理了 SqlSessionFactory 的创建过程,本篇我们继续分析一下 SqlSession 的获取过程。

初识 MyBatis 【MyBatis 核心概念】

案例代码:

public class MyBatisTest {@Testpublic void test() throws IOException {//读取配置文件InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//创建 SqlSessionFactoryBuilder 对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//通过 SqlSessionBuilder 对象 解析 mybatis-config.xml 文件 构建一个SqlSessionFactory SqlSessionFactory sqlSessionFactory = builder.build(is);//通过SqlSessionFactory构建一个SqlSessionSqlSession session = sqlSessionFactory.openSession();//通过SqlSession 获取 Mapper 实例UserMapper userMapper = session.getMapper(UserMapper.class);//获取数据List<User> users = userMapper.findAll();//打印输出for (User user : users) {System.out.println(user);}//关闭资源session.close();is.close();}
}

本篇我们将主要对 sqlSessionFactory.openSession() 这句代码进行分析。

获取 SqlSession 源码分析

DefaultSqlSessionFactory#openSession 方法源码分析

DefaultSqlSessionFactory#openSession 方法只是调用了 DefaultSqlSessionFactory#openSessionFromDataSource 方法,并传入了默认的执行器类型、隔离级别、是否自动提交参数。

//org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSession()
public SqlSession openSession() {//使用默认的执行器类型(默认是SIMPLE) 默认隔离级别 非自动提交 委托给 openSessionFromDataSource 方法return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
}

执行器类型

  • SIMPLE:简单执行器 SimpleExecutor,每执行一条 SQL,都会打开一个 Statement,执行完成后会关闭。
  • REUSE:重用执行器 ReuseExecutor,其内部会缓存一个 Map<String, Statement> ,每次编译完成的 Statement 都会进行缓存,不会关闭,可以重复使用。
  • BATCH:批量执行器,基于 JDBC 的 addBatch、executeBatch 功能,只能作用于 insert、update、delete 语句。
  • CachingExecutor:缓存执行器,使用了装饰器模式,在开启缓存的时候,会在上面三种执行器上包装一层 CachingExecutor。
package org.apache.ibatis.session;public enum ExecutorType {SIMPLE,REUSE,BATCH;private ExecutorType() {}
}

DefaultSqlSessionFactory#openSessionFromDataSource 方法源码分析

DefaultSqlSessionFactory#openSessionFromDataSource 方法逻辑很简单,先获取创建 SqlSession 的必要参数,然后调用 DefaultSqlSession 的构造方法创建了 SqlSession 。

//org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSessionFromDataSource
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {//事务Transaction tx = null;//SqlSessionDefaultSqlSession var8;try {//获取环境Environment environment = this.configuration.getEnvironment();//获取事务工厂TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment);//获取一个事务tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);//根据 事务 和 执行器类型创建一个执行器Executor executor = this.configuration.newExecutor(tx, execType);//根据配置 执行器 事务提交方式创建一个默认的 SqlSessionvar8 = new DefaultSqlSession(this.configuration, executor, autoCommit);} catch (Exception var12) {this.closeTransaction(tx);throw ExceptionFactory.wrapException("Error opening session.  Cause: " + var12, var12);} finally {ErrorContext.instance().reset();}return var8;
}//org.apache.ibatis.session.defaults.DefaultSqlSession#DefaultSqlSession(org.apache.ibatis.session.Configuration, org.apache.ibatis.executor.Executor, boolean)
public DefaultSqlSession(Configuration configuration, Executor executor, boolean autoCommit) {this.configuration = configuration;this.executor = executor;this.dirty = false;this.autoCommit = autoCommit;
}

Configuration#newExecutor 方法源码分析

Configuration#newExecutor 主要是对执行器类型进行判断,然后生成执行器,并通过动态代理得到代理对象,并将执行器加入拦截器链。

//org.apache.ibatis.session.Configuration#newExecutor
public Executor newExecutor(Transaction transaction, ExecutorType executorType) {executorType = executorType == null ? this.defaultExecutorType : executorType;executorType = executorType == null ? ExecutorType.SIMPLE : executorType;Object executor;//执行器类型判断if (ExecutorType.BATCH == executorType) {executor = new BatchExecutor(this, transaction);} else if (ExecutorType.REUSE == executorType) {executor = new ReuseExecutor(this, transaction);} else {executor = new SimpleExecutor(this, transaction);}//是否开启缓存if (this.cacheEnabled) {//开启缓存 创建缓存执行器executor = new CachingExecutor((Executor)executor);}//责任链模式 将执行器加入拦截器链 使用JDK动态代理增强所有的拦截器 Executor executor = (Executor)this.interceptorChain.pluginAll(executor);return executor;
}

获取 SqlSession 的源码很简单,希望可以帮助到有需要的小伙伴。

欢迎提出建议及对错误的地方指出纠正。

http://www.yayakq.cn/news/103397/

相关文章:

  • wordpress 不显示主题东莞知名网站优化公司
  • 安徽建设网官方网站深圳企业公司
  • 沈阳网站制作列表网自学软件开发从哪开始
  • 广告图片网站源码发卡网站怎么做
  • 国内免费推广产品的网站蚌埠网站优化制作公司
  • 网站设计培训学校有哪些wordpress换行代码
  • 普陀营销型网站建设商城网站策划方案
  • 代做淘宝联盟网站有阿里空间怎么做网站
  • 江苏润通市政建设工程有限公司网站网站负责人信息
  • 织梦模板网站关键词排名优化流程
  • 内江 网站建设最实用的上网网址一览表
  • 广元市城乡规划建设监察大队网站dede网站头部不显示调用的名称
  • 收费用的网站怎么做庆阳网页设计背景
  • 电影网站模板下载网站开发公司云鲸互创实惠
  • 西宁建一个网站公司无锡网站制作一般多少钱
  • 求网站晚上睡不着2021汕头seo关键词
  • 论网站建设的重要性直播平台开发费用
  • 数码网站建设论文大学生心理咨询网站建设论文
  • 企业建站系统免费个人做商城网站大概多少钱
  • 乐清住房和城乡建设部网站官网深圳公司举报网站
  • 销售型网站怎么做wordpress视频播放列表
  • 中学生制作的网站网站正在建设中的
  • 泡沫制品技术支持东莞网站建设co域名网站
  • 廊坊网站建设-商昊网络南宁市住房城乡建设厅网站
  • 网站建设专员工作总结做平台的网站有哪些内容吗
  • 摄影作品欣赏网站自动推广工具
  • 男生做污污的视频网站唐山网站建设赫鸣科技
  • 网站建设费用有哪些方面阜阳市住房和城乡建设部网站
  • 网站安全怎么做抖音代运营成本预算
  • 建设部质量监督官方网站各类服装网站建设