一、事务:
事务:单个逻辑工元执行的一系列逻辑工作单元执行的一系列操
1)事务特征:
- 原子性 指事务包含的所有操作要么全部成功,要么全部失败回滚
- 一致性 指事务执行的前后,数据的完整性保持一致
- 隔离性 指一个事务执行的过程中,不应该受到其他事务的干扰
- 持久性 一个事务执行完成后,数据就持久的保存在数据库中
2)事务处理,不考虑隔离性引发的安全问题
- 脏读 一个事务读取到另一个事务未提交的数据
- 不可重复读 一个事务读到另一事务已经提交的update数据,导致在前一个事务多次查询的结果不一致
- 虚度 一个事务读到另一个事务已经提交的insert数据,导致在前一个事务多次查询结果不一致
3)事务的隔离性,设置它可避免上述情况
- Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
- Repeatable read (可重复读):可避免脏读、不可重复读的发生。
- Read committed (读已提交):可避免脏读的发生。
- Read uncommitted (读未提交):最低级别,任何情况都无法保证。
4)hibernate设置事务个隔离级别,进行事务处理
<!--当前线程绑定session-->
<property name="hibernate.current_session_context_class">thread</property>
<!--设置事务的隔离级别-->
<property name="hibernate.connection.isolation">4</property>
设置事务隔离级别.取值为 1、2、4、8
1 : READ_UNCOMMITED 读取未提交,它引发所有的隔离问题
2 : READ_COMMITTED 读取已提交,阻止脏读,可能发生不可重复读与虚读
4 : REPEATABLE_READ 重复读,阻止脏读,不可重复读,可能发生虚读
8 : SERIALIZABLE 串行化,解决所有问题,不允许两个事务,同时操作一个目标数据。(效率低)
ORACLE 默认的事务隔离级别是READ_COMMITTED
MYSQL 默认的事务隔离级别是REPEATABLE_READ
<property name="hibernate.connection.isolation">4</property>
二、连接池介绍
https://blog.csdn.net/crankz/article/details/82874158
C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate 一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
<!-- 自己 配置C3P0连接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!--在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">20</property>
<!--设定数据库连接的过期时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
<!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property>