hibernate学习(8)——事务.连接池.锁 相关设置
1、整合c3p0(连接池)
步骤一:导入c3p0 jar包

步骤二:hibernate.cfg.xml 配置
hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider
步骤三:c3p0具体配置参数
#hibernate.c3p0.max_size 2
#hibernate.c3p0.min_size 2
#hibernate.c3p0.timeout 5000
#hibernate.c3p0.max_statements 100
#hibernate.c3p0.idle_test_period 3000
#hibernate.c3p0.acquire_increment 2
#hibernate.c3p0.validate false
<!-- 使用C3p0连接池
hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--
#hibernate.c3p0.max_size 2
#hibernate.c3p0.min_size 2
#hibernate.c3p0.timeout 5000
#hibernate.c3p0.max_statements 100
#hibernate.c3p0.idle_test_period 3000
#hibernate.c3p0.acquire_increment 2
#hibernate.c3p0.validate false
-->
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.timeout">50000</property>
2、事务
特性:ACID
1 原子性:整体, 事务:被事务包裹的sql语句是一组业务操作,要么全部成功,要么全部不成功。
2 一致性:数据, 在事务操作中,数据要统一,增加1000,必须减少1000,类似于物理中能量守恒。
3 隔离性:并发,并发环境下,事务与事务之间不干扰
4 持久性:结果,事务一旦提交,事务中的操作要会永远保存
隔离问题:
脏读:一个事务读到另一个事务未提交的内容
不可重复读:一个事务读到另一个事务已提交的内容(insert)
虚读(幻读):一个事务读到另一个事务已提交的内容(update)
隔离级别--解决问题
read uncommittd,读未提交。存在3个问题。
read committed,读已提交。解决:脏读。存在2个问题。
repeatable read ,可重复读。解决:脏读、不可重复读。存在1个问题。
serializable,串行化。单事务。没有问题。

2.1 hibernate设置隔离级别

2.2 数据库中的锁
数据库的锁(了解的了解)
悲观锁(数据库提供实现) :默认认为一定会发送别人要修改我使用的数据. 那我就可以为我读取的数据加锁.
读锁/共享锁 => 读锁可被其他线程所共享,如果是读取的话大家都可以用这把锁读到数据.
select * from table lock in share mode(读锁、共享锁)
写锁/排他锁 => 写锁不能共享,只要有人为数据加入了写锁,其他人就不能为数据加任何锁.
select * from table for update
@Test
//悲观锁
//写锁
public void test01(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Customer cust = (Customer) session.get(Customer.class, 6, LockOptions.UPGRADE);
System.out.println(cust);
tran.commit();
session.close();
}
(写锁、排它锁)
乐观锁(需要自己实现):丢失更新肯定不会发生
在表中提供一个字段(版本字段),用于标识记录。如果版本不一致,不允许操作。
在PO对象(javabean)提供字段,表示版本字段。一般Integer
在*.hbm.xml 文件配置 <version name="...">
@Test
//乐观锁
public void test02(){
Session session = HibernateUtil.openSession();
Transaction tran = session.beginTransaction(); Customer cust = (Customer) session.get(Customer.class, 4, LockOptions.READ);
cust.setName("aloce");
tran.commit();
session.close();
}
hibernate学习(8)——事务.连接池.锁 相关设置的更多相关文章
- day18(JDBC事务&连接池介绍&DBUtils工具介绍&BaseServlet作用)
day18总结 今日思维导图: 今日内容 事务 连接池 ThreadLocal BaseServlet自定义Servlet父类(只要求会用,不要求会写) DBUtils à commons-dbuti ...
- Hibernate整合C3P0实现连接池
Hibernate整合C3P0实现连接池 hibernate中可以使用默认的连接池,无论功能与性能都不如C3PO(网友反映,我没有测试过),C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI ...
- Hibernate【查询、连接池、逆向工程】
前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式....到目前为止,我们都是使用一些简单的主键查询阿...使用HQL查询所有的数据....本博文主要讲解Hiberna ...
- Go组件学习——手写连接池并没有那么简单
1.背景 前段时间在看gorm,发现gorm是复用database/sql的连接池. 于是翻了下database/sql的数据库连接池的代码实现,看完代码,好像也不是很复杂,但是总觉得理解不够深刻,于 ...
- Redis连接池的相关问题分析与总结
https://mp.weixin.qq.com/s/juvr89lAvM0uuDmyWyvqNA 阿里干货课堂丨Redis连接池的相关问题分析与总结 原创 技术僧 Java进阶与云计算开发 2018 ...
- Hibernate学习11——Hibernate 高级配置(连接池、log4j)
第一节:配置数据库连接池 这里配置c3p0连接池,需要的jar包: jar包位于hibernate压缩包的:hibernate-release-4.3.5.Final\lib\optional\c3p ...
- 超全面的JavaWeb笔记day18<事务&连接池&DBUtils>
1.事务 ACID 原子性 一致性 隔离性 持久性 mysql中开启和关闭事务 开启事务:START TRANSACTION 结束事务 提交事务:COMMIT 回滚事务:ROLLBACK JDBC中开 ...
- MyBatis学习-使用Druid连接池将Maybatis整合到spring
目录 前言 什么是Druid连接池 Druid可以做什么? 导入库包 连接oracle 连接mysql 导入mybatis 导入druid 导入spring-jdbc包 导入spring包 导入spr ...
- ActiveMQ学习心得:连接池的简单实现和模板模式的应用
一.安装activemq 下载地址:https://archive.apache.org/dist/activemq/5.13.0/apache-activemq-5.13.0-bin.zip 下载完 ...
随机推荐
- DNS解析过程和域名收敛、域名发散、SPDY应用
前段时间项目要做域名收敛,糊里糊涂的完成了,好多原理不清晰,现在整理搜集下知识点. 域名收敛的目的是什么?简单来说就是域名解析慢.那为什么解析慢?且听下文慢慢道来. 什么是DNS? DNS( Doma ...
- myecplise 中文乱码
一.设置新建常见文件的默认编码格式,也就是文件保存的格式. 在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致 ...
- String字符串去掉最后一个","号的几种方式
String a = "struts-default.xml,struts-plugin.xml,struts.xml"; String[] bStrings = a.split( ...
- iOS开发 iOS10推送必看(基础篇)
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 原文链接 一.简单入门篇---看完就可以简单适配完了相对简单的推送证书以及环境的 ...
- VR技术的探索阶段
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 早在1929年,在长期使用教练机训练器(机翼变短,不能产生离开地面所需的足够提升力)进行飞行训练之后,E ...
- 与你相遇好幸运,Postgresql和postgis安装
笔者开发环境: windows 7 x86_64 一开始安装的是官网最新版 PostgreSQL 9.6 ,安装成功 之后安装PostGIS Bundle 2.2 for PostgreSQL x64 ...
- [BI项目记]-搭建代码管理环境之服务端
上一篇介绍如何搭建环境进行文档版本的管理,这篇主要介绍搭建环境进行代码版本的管理. 即使是BI项目也要进行代码版本管理.代码版本管理的工具有很多,VSS, SVN等都是当下大家经常提起的,这里主要介绍 ...
- iTextSharp简单生成pdf和操作pdf添加水印
遇到需要导出页面到pdf,并添加pdf水印的业务.稍微研究了下,借阅网友的前车之鉴,经过使用可行之后的代码贴出来,做个记录,也供需要的网友借阅. public class PDFSetWaterMar ...
- Codeforces Round #367 (Div. 2)
A题 Beru-taxi 随便搞搞.. #include <cstdio> #include <cmath> using namespace std; int a,b,n; s ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...