首页 > 编程知识 正文

adad,为什么要使用mybatis

时间:2023-05-05 15:48:59 阅读:31868 作者:3160

creatinganewsqlsessionsqlsession [ org.Apache.ibatis.session.defaults.defaultsqlsession @ 42607 e80 ] wasnotregisteredforsynchronizationbecausesynchronizationisnotactivejdbcconnection [ com.Alibaba.druid.proxy.JDBC.connnnectiom willnotbemanagedbyspring==preparing : selectapp _ id、app_code、app _ name fromt _ sys _ application==para mememememetion app _ name==total :2 closingnontransactionalsqlsession [ org.Apache.ibatis.session.defaults.defaults ]

creatinganewsqlsessionclosingnontransactionalsqlsession认为数据库连接池无效,于是去查看。 每次运行33558www.Sina.com/sql时,mybatis都会运行创建新SqlSession,而不是共享SqlSession。 这是为了通过防止sql会话生成脏数据来确保sql线程的安全。

来源随笔:

org.my batis.spring.sqlsessionutils.getsql session (

发布sqlsessiongetsqlsession (sqlsessionfactorysessionfactory,执行程序类型执行程序类型, 持久性exceptiontranslatorexceptiontranslator (not null ) sessionfactory,no _ SQL _ session _ factory _ specified not sqlsessionholderholder=(sqlsessionholder )传输同步管理器. get resource ) sessionfactory; sqlsessionsession=session holder (executor type,holder ); IF (会话!=null}{returnsession; } logger.debug ((-' creatinganewsqlsession ' ); //sqlsessionsession=session factory.open获取session (executorType )的注册工具(session factory,executor type ) 返回会话; }实现session factory.open session (执行程序类型: defaultsqlsessionfactory.open session ) )。

@ overridepublicsqlsessionopensession (executortypeexectype ) returnopensessionfromdatasource ) exectype、null、false; }专用sqlsessionopensessionfromdatasource (executortypeexectype,TransactionIsolationLevel level,布尔自动提交) tolle 对于环境对象,数据源和事务配置//exec类型是执行器类型,配置文件中定义的//SimpleExecutor -- SIMPLE是常见的执行器。 //ReuseExecutor -执行机构重用预处理语句(prepared statements )/batchexecutor (。 这是主体执行器finalenvironmentenvironment=configuration.getenneration。finaltransactionfactorytransactionfactory=getransactiory tx=transaction factory.new transaction (environment.get data source ),level,autoCommit ); //致动器的定义包括:到语句的封装finalexecutorexecutor=configuration.new executor (tx,execType ); returnnewdefaultsqlsession (配置、执行程序、自动提交); }catch(exceptione ) closetransaction ) tx; //mayhavefetchedaconnectionsoletscallclose (throwexceptionfactory.wrap exception (' erroropeningsesssion.cause 3360 ' } fron ) }获得SQLsession对象后,可以使用SQLsession提供的方法执行CRUD操作。 Connection对象是在创建SqlSession对象后的CURD操作中创建的。 在向下钻取后,要在ManagedTransaction类中找到用于检索连接对象的键码,请执行以下操作:

protectedvoidopenconnection (throws sqlexception ) if ) log.isdebugenabled ) ) log.debug (openingjdbccconnnection ' }//DDD 有三种类型的PooledDataSource、UnpooledDataSource,配置文件中定义了this.connection=this.data source.geer的if(this.level!=null (this.connection.settransactionisolation (this.level.get level ) ); PooledDataSource和UnPooledDataSource的区别在于PooledDataSource使用连接池。 为什么要使用连接池? 创建Connection对象的过程基本上相当于与数据库的通信连接,因此建立通信连接的过程需要非常长的时间。 在大多数情况下,我们在建立连接后,即创建连接对象后,执行并丢弃简单的SQL语句。 这是非常大的资源浪费。 mybatis就此问题提出的PooledDataSource使用了连接池。

补充:

在MyBatis中,多个SqlSession可以复用同一连接,并在同一SqlSession上提交多个事务。

通过将@Transactional添加到service方法中并打开事务,然后将数据库事务委托给spring管理,可以允许多个sql执行共享同一SqlSession。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。