mysql实例(instance):
MySQL是单进程多线程,也就是说MySQL实例在系 统上表现就是一个服务进程,即进程,就是我们在自己电脑布了一个mysql实例(服务),然后我们在代码中就可以通过配上mysql实例的地址,就能连上自己电脑上的这mysql实例.
数据库database:
一个instance下可以包含很多个database,如下图: 我的本地的一个instance包含了7个database.
connection
是将两个服务通过网络建立起连接, 指的是jdbc和mysql实例建立连接,
spring整合mybatis后,由Hikari连接池来完成concection的操作
SqlSession
sqlsession是一个会话,是jdbc和mysql实例的一次通话, 背景是spring整合mybatis后,
SqlSession是Mybatis工作的最顶层API会话接口,所有的操作都经由它来实现.
4个单独的dao操作,就是4个事务,就会有4个sqlsession被创建和关闭
将4个dao操作圈在一个事务中,就会只有一个sqlsession被创建和销毁.
就是一个事务只能对应一个sqlsession, 一个sqlsession也只能对应一个事务.
注意:必须dbc和mysql实例先建立连接concection, sqlsession才能执行后续操作.
本地事务
就是一个事务里的dao操作访问的都是同一个instance,这就是本地事务.
也就是说, 我在一个事务里访问了同一个instance里的A数据库database,又访问量这个instance里的B数据库database,我访问同一个instance不同database了,这时候我因为我是对同一个instance访问的,因此这种操作仍然叫做本地事务.
(这种同一instance跨database的操作,mysql自己是怎么保证它的事务成功的, 后续可以研究下原理)
同一个本地事务
就是在满足本地事务的基础上, 几个dao操作要被圈在一起,圈在一个事务里,如下:
4个dao操作访问的都是同一个instance, 而我又把它们放到同一个方法中用@transactional注解把它们圈在一个事务中, 现在这4个dao就在同一个本地事务中.