Transaction与SqlSession,Connection的关系

Transaction与SqlSession,Connection 存在什么关系?他们为什么而存在?

回顾

JDBC

1. 注册驱动
 Class.forName("com.mysql.jdbc.Driver");
2.获取数据库连接
Connection conn  =DriverManager.getConnection(url,user,p);

3.创建向数据发送sql 的statement对象
Statement stmt = conn.CreateStatement();

4. 向数据库发送sql
ResultSet rs  = stmt.executeQuery(sql)//select语句
int updateaSum = stmt.executeUpdate(sql)//insert,update delete语句

5. 处理结果集
while(rs.next()){
	rs.getString(列名)
	rs.getInt(列名)
}
6. 关闭资源
rs.close();
stmt.close();
conn.close();
 

Connection

JDBC 是我们用来与数据库交互最基础的API。
Connection 作为一个特定数据库的会话,在一个连接的上下文中,sql语句被执行,然后结果被返回。

我们在一次Connection上下文中可以执行多个操作。

但是默认情况下,一个connection被创建时,默认是auto-commit模式,statement执行完sql后自动commit。这样,虽然多个操作在同一个Connection上下文中执行,他们自己只和自己有关系,但是他们之间没有什么关系。

如果我们想多个操作,同时成功或同时失败,那就要设置禁止auto-commit模式,然后手动commit 。 这样一次Connection 中的几个操作,就具有同时成功或者同时失败的关系。

Connection 隐藏的概念也就清晰可见:

  • 操作
  • 操作与操作之间的关系

Transaction

事务(Transaction) ,正是对N(N>=1)个操作执行时,同时成功或同时失败的关系的具象。

有操作,必定有事务。操作与事务相生相随

可以看出事务在Connection上的边界是Commit/rollback.

SqlSession

SqlSession 扮演什么角色呢?

我们对数据库的操作无非就是增上改查,Connection 中操作的概念主要体现在SQL上,select|insert|update|delete语句。

SqlSession是Mybatis 中定义的,用来表示与关系数据库的一次会话,会话定义了各种具体的操作,
查询、数据更新(包含保存、更新、删除)操作。而这些操作都在与数据库建立会话的基础上进行的

SqlSession 可以看作是对Connection 更加高级的抽象,从其方法上更加可以看出他具有更加明显的操作特征。

  void select(String statement, ResultHandler handler);
  int insert(String statement, Object parameter);
  int update(String statement);
  int delete(String statement, Object parameter);

总结

  • Connection 是基础。
  • Transaction 是对多个操作,同时成功或同时失败的关系的具象化
  • SqlSession 是对Connection操作的高级封装。
  • Transaction ,SqlSession 都得依靠Connection
  • SqlSession ,Connection 的操作又伴随着Transaction

以上是我对SqlSession,Connection ,Transaction 三者的理解,属于个人理解,如有错误,感谢指出。


如果本文任何错误,请批评指教,不胜感激 !

微信公众号:源码行动
享学源码,行动起来,来源码行动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值