SSM-MyBatis-06:Mybatis中openSession到底做了什么

简介: ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------   1.找SqlSesionFactory实现类   Ctrl+H:DefaultSqlSessionFactory:   Ctrl+F :openSession()方法   原型如下: ...

 

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

1.找SqlSesionFactory实现类
  Ctrl+H:DefaultSqlSessionFactory:
  Ctrl+F :openSession()方法
  原型如下:
  public SqlSession openSession() {
    return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
  }

2.查看openSessionFromDataSource方法的实现
  private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
    Transaction tx = null; 定义事务对象
    很明显:SqlSession实现类
    DefaultSqlSession var8;
    try {
      //读取 MyBatis-Config.xml 形成 Environment对象
      Environment e = this.configuration.getEnvironment();
      //通过环境e作为入参,获取到事务工厂
      TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(e);
      //创建事务对象
      tx = transactionFactory.newTransaction(e.getDataSource(), level, autoCommit);
      //MyBatis执行器 Executor 执行器
      Executor executor = this.configuration.newExecutor(tx, execType);
      var8 = 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;
  }


3.查看DefaultSqlSession方法的实现
  private Configuration configuration; //配置
  private Executor executor; //执行器
  private boolean autoCommit; //事务自动提交的
  private boolean dirty; //脏 Java 内存中泛型数据 和底层DB数据 不一样 干净的(Java内存===DB Data 一致的)
  private List<Cursor<?>> cursorList; 游标 让记录前进的一个工具

  public DefaultSqlSession(Configuration configuration, Executor executor, boolean autoCommit) {
    this.configuration = configuration;
    this.executor = executor;
    this.dirty = false; //干净的
    this.autoCommit = autoCommit;
  }

结论:通过以上3个步骤,我们不难发现,openSession 就是对DefaultSqlSession类中的成员变量赋值

目录
相关文章
|
7月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
|
7月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
|
7月前
|
Java 关系型数据库 MySQL
基于ssm实现图书商城(spring+springmvc+mybatis)
基于ssm实现图书商城(spring+springmvc+mybatis)
|
7月前
|
Java 数据库连接 Maven
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
|
7月前
|
Java 数据库 数据安全/隐私保护
基于SSM框架实现管科类考研自我管理系统(分前后台spring+springmvc+mybatis+maven+jsp+jquery)
基于SSM框架实现管科类考研自我管理系统(分前后台spring+springmvc+mybatis+maven+jsp+jquery)
|
6月前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
83 2
|
6月前
|
Java 数据库连接 Android开发
SSM框架——使用MyBatis Generator自动创建代码
SSM框架——使用MyBatis Generator自动创建代码
67 2
|
7月前
|
Java BI 数据库
基于SSM框架实现面向小微企业的简历管理系统企业简历管理系统(分前后台spring+springmvc+mybatis+maven+jsp+css+echarts)
基于SSM框架实现面向小微企业的简历管理系统企业简历管理系统(分前后台spring+springmvc+mybatis+maven+jsp+css+echarts)
100 0
|
7月前
|
Java 关系型数据库 MySQL
SpringBoot整合JUnit、MyBatis、SSM
SpringBoot整合JUnit、MyBatis、SSM
49 4
|
7月前
|
IDE Java 应用服务中间件
基于Spring+mybatis的SSM超市消费积分管理系统代码实现含演示站
这是一个SSM超市消费积分管理系统。有2个角色:买家角色和管理员角色,现在开始分角色介绍下功能。买家角色核心功能有买家登录,查看网站首页,查看蔬菜详情,加入购物车,提交订单,查看我的订单。管理员角色核心功能有管理员登录,用户管理,管理员管理,商品管理,一级分类管理,二级分类管理,订单管理。更多的功能可以去演示站查看。
基于Spring+mybatis的SSM超市消费积分管理系统代码实现含演示站