什么是SqlSessionFactory?什么是SqlSession?

SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式.SqlSessionFactory创建SqlSession的工厂。

SqlSession是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection.它是应用程序与持久层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象.SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句.每个线程都应该有它自己的SqlSession实例.SqlSession的实例不能被共享,同时SqlSession也是线程不安全的,绝对不能将SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中.也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Servlet当中的HttpSession对象中.使用完SqlSession之后关闭Session很重要,应该确保使用finally块来关闭它.一次请求数据的连接,类似于JDBC中的Connection

整个MyBatis运行期间的核心工厂,大部分类都由它生产制造。

  1. MyBatis生命周期1的过程?

:SqlSessionFactoryBuilder

 SqlSessionFactoryBuilder是利用XML或者java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFatory。它的作用就是一个构建器,一旦我们构建了SqlSessionFactory,它的作用就已经完结,失去了存在的意义,这时我们就应该废弃它,将他回收。所以它的生命周期只存在于方法的局部,它的作用就是生成SqlSessionFactory对象

二:SqlSessionFactory

 SqlSessionFactory的作用是创建SqlSession,而SqlSession就是一个会话,相当于jdbc中的Connection对象。每次应用程序需要访问数据库,我们就要通过SqlSessionFactory创建SqlSession,所以SqlSessionFactory应该在Mybatis应用的整个生命周期中。而如果我们多次创建同一个数据库的SqlSessionFactory,则每次创建SqlSessionFactory会打开更多的数据库连接资源,那么连接资源就会很快被耗尽。因此SqlSessionFactory的责任是唯一的,它的责任就是创建SqlSession,所以我们应该采用单例模式。每个数据库只对应一个SqlSessionFactory,管理数据库资源的分配,避免过多的Connection被消耗。

三:SqlSession

 SqlSession是一个会话,相当于jdbc的Connection对象,它的生命周期应该是在请求数据库处理事务的过程中。它是一个线程不安全的对象,在涉及多线程的时候我们需要特别的担心,操作数据库需要注意隔离级别,数据库锁等高级特性。此外,每次创建的SqlSession都必须及时关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能的影响很大。SqlSession存活于一个应用的请求和操作,可以执行多条sql,保证事务的一致性。

四:Mapper

 Mapper是一个接口,而没有实现类,它的作用是发送sql然后返回我们需要的结果,或者执行sql从而修改数据库的数据,因此它应该在一个SqlSession事务方法之内,是一个方法级别的东西。如同jdbc中的一条sql语句执行,它的最大范围和SqlSession是相同的。尽管我们想一直保存着Mapper,但是你会发现很难控制,所以尽量在一个SqlSession事务的方法中使用它们,然后废弃掉。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值