JavaWeb_(Hibernate框架)Hibernate中事务
Hibernate中事务
- 事务的性质
- 事物的隔离级别
- 配置事务的隔离级别
事务的性质
原子性:原子,不可再分,一个操作不能分为更小的操作,要么全都执行,要么全不执行。
一致性:事务在完成时,必须使得所有的数据保持一致的状态。(与开始事务保持前一样的状态)
隔离性:事务查看数据时数据所处的状态,要么是另一个并发事务修改它之前的状态,要么是另一并发事务修改它之后的状态,事务不会查看中间状态的数据。
持久性:事务完成之后,它对于系统的影响是永久性的。(执行了就执行了,没有撤回(悔棋)的说法)
事务的隔离级别
脏读:读取了未提交事务中的数据
不可重复复读:对于数据库中的某个数据,一个事务范围内多次读取同一个数据,却有不同的值
幻读:一个事务读到另一个事务新增加并提交的数据(insert)。在同一个事务中,对于同一组数据读取到的结果不一致

配置事务的隔离级别
读未提交: 最低的隔离级别,最没用(最快)
读已提交: 可避免脏读,不能避免不可重复读
可重复度: 可以避免不可重复读,可以避免脏读(mysql默认)
串行化: 最强大,三种都可以解决(最慢)
项目中在hibernate.cfg.xml配置事务的隔离级别【mysql数据库中默认是配置4:可重复读】
<!-- 配置数据库的隔离级别
1:读未提交: 最低的隔离级别,最没用(最快)
2:读已提交: 可避免脏读,不能避免不可重复读 4: 可重复度: 可以避免不可重复读,可以避免脏读(mysql默认)
8: 串行化: 最强大,三种都可以解决(最慢)
--> <property name="hibernate.connection.isolation">4</property>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<!-- 负责初始化 -->
<session-factory> <!-- 连接数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库地址 -->
<property name="hibernate.connection.url">jdbc:mysql:///hibernatest</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">123456</property> <!-- 配置数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 将hibernate生成的SQL语句打印到控制台上 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化hibernate生成的sql语句 -->
<property name="hibernate.format_sql">true</property> <!-- hibernate自动创建表
create: 自动创建表,每次框架运行都会创建一张新的表,原来的数据将丢失(开发)
create-drop: 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
update(推荐): 自动生成表,如果表已经存在,则更新数据,如果表不存在,就会创建一张新的表
validate: 加载hibernate时,验证创建数据库表结构 -->
<property name="hibernate.hbm2ddl.auto">create</property> <!-- 配置数据库的隔离级别
1:读未提交: 最低的隔离级别,最没用(最快)
2:读已提交: 可避免脏读,不能避免不可重复读 4: 可重复度: 可以避免不可重复读,可以避免脏读(mysql默认)
8: 串行化: 最强大,三种都可以解决(最慢)
--> <property name="hibernate.connection.isolation">4</property> <mapping resource= "com/Gary/domain/User.hbm.xml"/> </session-factory> </hibernate-configuration>
hibernate.cfg.xml
实现HibernateUtils.java工具类:使用工厂模式将开启Hibernate事务代码提取出来
package com.Gary.utils; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory sessionFactory = null; static {
//得到配置信息
Configuration config = new Configuration().configure();
//获得sessionFactiory工厂
sessionFactory = config.buildSessionFactory();
} //获得全新的Session
public static Session getSession()
{
;
//获取session
Session session = sessionFactory.openSession();
return session; } public static Session getCurrentSession()
{
return sessionFactory.getCurrentSession();
} }
HibernateUtils.java
使用HibernateUtils.java打开事务
Session session = HibernateUtils.getSession(); //打开事务
Transaction transcation = session.beginTransaction();
使用HibernateUtils.java实现向数据库中用户注册事务
//增加用户
public void addUser(User user) { Session session = HibernateUtils.getSession(); //打开事务
Transaction transcation = session.beginTransaction(); //存储user对象save 只是为了生成id
//有id,与session有关联,持久化状态 //存储user对象
session.save(user); //有id,与session关联 持久化状态 本质:对象状态的转换
//将瞬时->持久 目的:生成id //提交事务
transcation.commit();
//关闭资源
session.close(); //没有与session关联,有id }
JavaWeb_(Hibernate框架)Hibernate中事务的更多相关文章
- JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- JavaWeb_(Hibernate框架)Hibernate中对象的三种状态
对象的三种状态 瞬时状态: 实体 没有id.没有与session关联 持久化状态: 特点:持久化状态对象的任何改变都会同步到数据库中 游离态[也称作托管态]: 实体 有id,没有与session关联 ...
- JavaWeb_(Hibernate框架)Hibernate中创建实体
Hibernate中创建实体 创建实体五个基本规则 --提供无参的构造器 --成员变量的私有化,提供get.set方法,提供属性 --尽量使用包装类型 --主键(一定要有) --不要加final(hi ...
- JavaWeb_(Hibernate框架)Hibernate中重要的api
Hibernate中重要的api Configuration SessionFactory Session(重点) Transaction 在Dao层中UserDao.java使用Hibernate向 ...
- JavaWeb_(Hibernate框架)Hibernate与c3p0与Dbutils的区别
JavaWeb_(Hibernate框架)使用Hibernate开发用户注册功能 传送门 JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能 传送门 Hiberna ...
- Hibernate框架学习(四)——事务
一.回顾事务的概念http://www.cnblogs.com/cxq1126/p/8313600.html 1.特性ACID:原子性.一致性.隔离性.持久性 2.并发问题:脏读.不可重复读.幻|虚读 ...
- JavaWeb_(Hibernate框架)Hibernate论坛项目中多对多案例
基于SSH论坛小型项目 传送门 用户和发帖进行举例 多对多关系:多个用户可以回复多个帖子 因此引入了一张回复表,用来保存用户id和帖子id CREATE TABLE `hforum`.`answer` ...
- JavaWeb_(Hibernate框架)Hibernate论坛项目中一对多案例
基于SSH论坛小型项目 传送门 用户和发帖进行举例 一对多关系:一个用户可以发表多个帖子 一对一关系:一个帖子属于一个用户发布 创建数据库用户user表 CREATE TABLE `hforum`.` ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法
本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...
随机推荐
- 题解 UVA1316 【Supermarket】
题目链接: https://www.luogu.org/problemnew/show/UVA1316 思路: 根据题目意思,我们需要用到贪心的思想,越晚过期的商品当然是越晚卖好.同时你假如有多个商品 ...
- 转:idea类名出现了不同的颜色
转:https://blog.csdn.net/yf_mood/article/details/88191818 在安装了git以后发现idea类名出现了不同的颜色,如下: 它们分别表示的含义: 绿色 ...
- Docker安装&java-Zookeeper进行操作
Docker安装Zookeeper下载Zookeeper镜像 docker pull zookeeper 启动容器并添加映射 docker run --privileged=: -d zookeepe ...
- mybatis批量更新表setting parameters 错误
mybatis中想用 foreach标签 批量update set表 下面是mapper.xml <update id="updateMonitorById" paramet ...
- Windows去除开始菜单图标背景
1.开始菜单图标右键找到目标程序的存储目录. 2.删除目录下的目标程序名+.VisualElementsManifest.xml的文件. 3.开始菜单图标右键找到图标的存储目录,取消开始屏幕固定并删除 ...
- js数组的所有方法
修改器方法 下面的这些方法会改变调用它们的对象自身的值: Array.prototype.copyWithin() 在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值. Array.pr ...
- linux命令详解——xargs
1. 简介 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: find /sbin -perm +700 |ls -l ...
- 1、Bash Shell
一.什么是Bash shell BashShell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕. 当我们 ...
- Mysql(四)-1:单表查询
一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...
- MySQL 数据类型简介 创建数据表及其字段约束
数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...