mybatis知识点分析之SqlSession

本文详细解析了MyBatis框架中的核心组件SqlSessionFactory和SqlSession。SqlSessionFactory作为创建SqlSession的工厂,建议以单例模式使用。SqlSession则是执行数据库操作的关键对象,具有线程不安全特性,每次操作完成后需及时关闭。文章还介绍了SqlSessionFactory的创建过程,包括独立使用时通过mybatis-config.xml配置和与Spring整合时在applicationContext.xml中的配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      mybatis框架主要是围绕SqlSession对象来进行的。                                 

SqlSessionFactory

     它是个单个数据库映射关系经过编译后的内存的镜像

     作用:是创建SqlSession的工厂

     来源:可以从xml配置文件中或者预先定制一个Configuration实例来构建SqlSessionFactory实例

     范围:应用程序执行期间

     线程:安全

     模式:建议单例或者静态单例模式

   

SqlSessionFactoryBuilder

SqlSession

    1.它是myBatis的关键对象;

    2.是应用程序与持久层交互之间执行交互操作的一个单线程对象,也是执行持久化操作的关键对象;

    3.包含所有以数据库为背景的所有执行sql操作的方法,底层封装了jdbc连接;

    4.可以用SqlSession实例来直接执行被映射的sql语句;

    5.每个线程的SqlSession是独立的;

    6.SqlSession不能被共享,同时也是线程不安全的,绝对不能将一个SqlSession实例的引用放在一个类的静态字段或者一个实
       例字段中,也不能将一个SqlSession实例的引用放在任何类型的管理范围中,比如Servlet的HttpSession对象中。

    7.使用完之后要关闭,一般使用finally块。

 

SqlSessionFactory和SqlSession实现过程

mybatis框架主要是围绕SqlSessionFactory来进行的,创建过程如下:

    1.定义一个Configuration对象,其中包含数据源、事务、Mapper文件资源以及影响数据库行为属性设置settings。

    2.通过一个配置对象则可以创建一个SqlSessionFactoryBuilder对象

    3.通过SqlSessionFactoryBuilder创建SqlSessionFactory对象

    4.通过SqlSessionFactory获取操作数据的SqlSession实例,通过该实例对数据库进行操作。

SqlSessionFactory的创建:分为两种情况,如下:

    1.如果mybatis未与Spring进行整合时:上诉的Configuration对象可以通过配置文件mybatis-config.xml来完成,具体见   
       https://mp.youkuaiyun.com/postedit/84664546

       //读取配置文件

       InputStream  resourceAsStream = Reources.getResourceAsStream("mybatis-config.xml");

       SqlSessionFactory  sqlSessionFactory  = SqlSessionFactoryBuilder.build(resourceAsStream );

   2.如果mybatis与Spring进行了整合:在applicationContext.xml中配置如下

      <bean id="SqlSessionFactory " class="org.mybatis.spring.SqlSessionFactoryBean">

         <property name="dataSource" ref="dataSource">

         <!--自动扫描Mapping.xml文件-->

         <property name="mapperLocations" value="classpath:com/cn/mapper/*.xml">

        </property>

     </bean>

注意:connection对象是在SqlSession对象创建之后进行curd操作时创建的,其具体是在ManagedTransaction中获取的:

protected void openConnection() throws SQLException {

       if (log.isDebugEnabled()) { log.debug("Opening JDBC Connection"); }

      //dataSource 来源有三种,JndiDatasource,PooledDataSource,UnpooledDataSource,配置文件中定义

     this.connection = this.dataSource.getConnection(); if (this.level != null) {       
            this.connection.setTransactionIsolation(this.level.getLevel());

     }

}

PooledDataSource和UnPooledDataSource的区别是PooledDataSource使用了连接池。

     

   

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值