您的位置:首页 > 教育 > 培训 > 长沙市在建工程项目_html网页设计作品代码编写_找索引擎seo_最新军事头条

长沙市在建工程项目_html网页设计作品代码编写_找索引擎seo_最新军事头条

2025/2/27 9:36:32 来源:https://blog.csdn.net/Octopus21/article/details/143376203  浏览:    关键词:长沙市在建工程项目_html网页设计作品代码编写_找索引擎seo_最新军事头条
长沙市在建工程项目_html网页设计作品代码编写_找索引擎seo_最新军事头条

在MyBatis中,openSession()方法是开启数据库会话的入口,主要作用是生成SqlSession对象。我们从SqlSessionFactory接口入手,其实现类DefaultSqlSessionFactory的openSession()方法用于创建SqlSession实例.

SqlSessionFactory接口方法

public interface SqlSessionFactory {public interface SqlSessionFactory {/*** 打开一个默认的SqlSession会话,一般使用默认配置创建SqlSession,通常是非自动提交模式。*/SqlSession openSession();/*** 打开一个新的SqlSession,并指定是否自动提交事务。* autoCommit为true时会自动提交;为false时需要手动提交或回滚事务。*/SqlSession openSession(boolean autoCommit);/*** 使用已有的数据库连接Connection创建一个SqlSession。* 这种方式适用于已有连接池或自定义数据库连接的情况。*/SqlSession openSession(Connection connection);/***根据指定的事务隔离级别TransactionIsolationLevel创建SqlSession,可用于控制事务的隔离级别*/SqlSession openSession(TransactionIsolationLevel level);/***根据指定的执行器类型ExecutorType创建SqlSession。ExecutorType可以是以下几种:** SIMPLE:简单的执行器,每次执行语句都会创建一个新的预处理语句。* REUSE:重用执行器,重用预处理语句。* BATCH:批量执行的执行器,可以提高批量插入、更新的效率。*/SqlSession openSession(ExecutorType execType);}

DefaultSqlSessionFactory

DefaultSqlSessionFactory类是MyBatis中SqlSessionFactory接口的默认实现类,用于创建和管理SqlSession对象。它是MyBatis连接数据库、执行SQL语句的核心组件之一,通常是通过读取配置文件并加载环境、数据源等设置来创建合适的数据库会话。

DefaultSqlSessionFactory主要负责:

  1. 管理数据库会话SqlSession的创建:提供多种重载的openSession方法,可以根据不同参数创建自定义的会话。
  2. 加载MyBatis的配置信息:在初始化时读取Configuration对象,并从中获取数据库环境、事务管理、执行器类型等信息。
  3. 提供配置访问:通过getConfiguration()方法,用户可以获取Configuration实例,从而查看或操作配置信息。

openSessionFromDataSource方法说明
openSessionFromDataSource方法是DefaultSqlSessionFactory类中创建SqlSession的关键方法之一。它负责从数据源中获取数据库连接,配置事务、执行器等,最终生成SqlSession对象

  @Overridepublic SqlSession openSession() {return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);}
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {Transaction tx = null;try {// 从configuration对象获取环境配置信息final Environment environment = configuration.getEnvironment();// 获取事务工厂对象,通过Environment获取相应的事务工厂,用于创建Transaction事务对象。TransactionFactory的具体实现通常根据MyBatis配置确定,比如可以是JdbcTransactionFactory或ManagedTransactionFactory等。final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);// 构建事务对象tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);// 创建执行器对象,Executor是MyBatis执行SQL语句的核心组件,根据传入的ExecutorType创建不同类型的执行器(如SIMPLE、REUSE、BATCH),从而控制SQL执行的模式。final Executor executor = configuration.newExecutor(tx, execType);return new DefaultSqlSession(configuration, executor, autoCommit);} catch (Exception e) {closeTransaction(tx); // may have fetched a connection so lets call close()throw ExceptionFactory.wrapException("Error opening session.  Cause: " + e, e);} finally {
// ErrorContext.instance().reset()用于重置MyBatis的错误上下文信息,确保每次操作都在独立的上下文中进行。ErrorContext.instance().reset();}}

Executor接口结构

在这里插入图片描述
MyBatis提供了3种不同的Executor,分别为SimpleExecutor、ResueExecutor、BatchExecutor,这些Executor都继承至BaseExecutor,BaseExecutor中定义的方法的执行流程及通用的处理逻辑,具体的方法由子类来实现,是典型的模板方法模式的应用。SimpleExecutor是基础的Executor,能够完成基本的增删改查操作,ResueExecutor对JDBC中的Statement对象做了缓存,当执行相同的SQL语句时,直接从缓存中取出Statement对象进行复用,避免了频繁创建和销毁Statement对象,从而提升系统性能,这是享元思想的应用。BatchExecutor则会对调用同一个Mapper执行的update、insert和delete操作,调用Statement对象的批量操作功能。另外,我们知道MyBatis支持一级缓存和二级缓存,当MyBatis开启了二级缓存功能时,会使用CachingExecutor对SimpleExecutor、ResueExecutor、BatchExecutor进行装饰,为查询操作增加二级缓存功能,这是装饰器模式的应用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com