Mybatis源码解析——SqlSession

SqlSession

SqlSession是Mybaits对用户提供的使用接口,提供了一系列数据库及事物的操作接口,如增/删/改/查以及事物的提交/回滚等操作,用户在使用Mybatis时只需要跟SqlSession接口打交道即可。
在这里插入图片描述

工厂模式

SqlSession的设计使用了工厂模式,由SqlSessionFactory生产SqlSession对象。常用的默认实现为DefaultSqlSessionFactory和DefaultSqlSession。

策略模式

SqlSession只是提供操作接口,在DefaultSqlSession中数据库的操作实际交给不同的Executor执行,这里采用了策略模式,不同的Executor对应着不同的策略算法,可以根据不同需求替换不同的算法,避免大量条件分支语句,且符合开闭原则。配合反射操作可以无需了解所有策略实现类实现策略的动态替换。

DefaultSqlSession

Executor.query(MappedStatement,Object,RowBounds,ResultHandler)实现数据库查询操作
Executor.update(MappedStatement,Object)实现数据库更新操作(包括insert/update/delete)

DefaultSqlSessionFactory

  1. 通过数据源获取数据库连接,创建DefaultSqlSession及Executor
  2. 用户提供数据库连接对象,根据该对象创建DefaultSqlSession及Executor
  3. openSession()方法创建返回SqlSession对象

SqlSessionManager

SqlSessionFactory和SqlSession的结合体,拥有两者的功能。
与DefaultSqlSessionFactory不同之处:
SqlSessionManager提供两种模式

  1. 与DefaultSqlSessionFactory相同,同一线程每次通过SqlSessionManager对象访问数据库时都会创建新的SqlSession对象。即可以当作是一个DefaultSqlSessionFactory使用。
  2. 使用ThreadLocal记录当前线程绑定的SqlSession对象,供当前线程循环使用。需要调用startManagerSession()方法缓存SqlSession对象。

SqlSessionManager所有创建SqlSession的动作均由封装的SqlSessionFactory实现;
SqlSessionManager所有数据库操作的动作均由动态代理的SqlSession实现;
其InvocationHandler对象是SqlSessionInterceptor对象(内部类),

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值