Hibernate事务操作

事务相关概念

1 什么是事务

事务是操作中最基本的单元,表示一组操作要么都成功,有一个失败那么所有都失败。最典型的场景:银行转账

2 事务特性

原子性 一致性 隔离性 持久性

3 不考虑隔离性产生读问题

(1)脏读

(2)不可重复读

(3)虚读

4 设置事务隔离级别

(1)mysql默认隔离级别 repeatable read

Hibernate事务代码规范写法

1 代码结构

try {

开启事务

提交事务

}catch() {

回滚事务

}finally {

关闭

}

    /**
* 事务规范代码
*/
@Test
public void testTx() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
//开启事务
tx = session.beginTransaction();
//添加
User user = new User();
user.setUsername("小马");
user.setPassword("666");
user.setAddress("美国");
session.save(user);
int i = 10/0;
//提交事务
tx.commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
tx.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}

Hibernate绑定session

1 session类似于jdbc的connection,之前web阶段学过 ThreadLocal,与本地线程绑定

2 框架帮实现与本地线程绑定session

3 获取与本地线程session

(1)在hibernate核心配置文件中配置

(2)调用sessionFactory里面的方法得到

sessionFactory不用自己关闭了

4 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了

Hibernate的api使用

Query对象

1 使用query对象,不需要写sql语句,但是写hql语句

(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似

(2)hql和sql语句区别:

- 使用sql操作表和表字段

- 使用hql操作实体类和属性

2 查询所有hql语句:

(1)from 实体类名称

3 Query对象使用

(1)创建Query对象

(2)调用query对象里面的方法得到结果

public class HibernateQueryData {
//使用query对象
@Test
public void testQuery() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
//与本地线程绑定的session
session = HibernateUtils.getSessiononObject();
//开启事务
tx = session.beginTransaction();
//1.创建Query对象
//方法里面写hql语句
Query query = session.createQuery("from User");
//2.调用query对象里面的方法得到结果
List<User> list = query.list();
for(User user : list) {
System.out.println(user);
}
//提交事务
tx.commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
tx.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}
}

Criteria对象

1 使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现

2 实现过程

(1)创建criteria对象

(2)调用对象里面的方法得到结果

//使用Criteria对象
@Test
public void testCriteria() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
//与本地线程绑定的session
session = HibernateUtils.getSessiononObject();
//开启事务
tx = session.beginTransaction();
//1.创建Criteria对象
//方法里面参数是实体类class
Criteria criteria= session.createCriteria(User.class);
//2.调用方法得到结果
List<User> list = criteria.list();
for (User user : list) {
System.out.println(user);
}
//提交事务
tx.commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
tx.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}

SQLQuery对象

1 使用hibernate时候,调用底层sql实现

2 实现过程

(1)创建对象

(2)调用对象的方法得到结果

//使用SQLQuery对象
@Test
public void testSQLQuery() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
//与本地线程绑定的session
session = HibernateUtils.getSessiononObject();
//开启事务
tx = session.beginTransaction();
//1.创建SQLQuery对象
//参数是普通sql语句
SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
//调用sqlQuery里面的方法
//返回list集合,默认里面每部分数组结构
List<Object[]> list = sqlQuery.list();
for (Object[] objects : list) {
//把数组作为字符串输出
System.out.println(Arrays.toString(objects));
}
//提交事务
tx.commit();
}catch(Exception e) {
e.printStackTrace();
//回滚事务
tx.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}

返回list集合每部分是数组

 

返回list中每部分是对象形式

Hibernate_day02--Hibernate事务操作_api使用的更多相关文章

  1. (转)Hibernate事务管理

    Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰.作为一名软件设计 ...

  2. hibernate事务

    hibernate事务 9.3 Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改 ...

  3. Hibernate事务与并发问题处理(乐观锁与悲观锁)

    目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 Hi ...

  4. SpringBoot JPA实现增删改查、分页、排序、事务操作等功能

    今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查.分页.排序.事务操作等功能.下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and ...

  5. hibernate 事务理解

    简介: Hibernate本身并不具备事务管理能力 .在事务管理层, Hibernate将其委托给底层的JDBC或者JTA ,以实现事务管理和调度功能. Hibernate的默认事务处理机制基于JDB ...

  6. Spring事务操作介绍

    Spring的特色之一,简单而强大的事务管理功能,包括编程式事务和声明式事务. 1. Spring中涉及到事务管理的API有100多个,核心的只有三个: TransactionDefinition.P ...

  7. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  8. Hibernate事务以及一级缓存02

    一. Hibernate中的事务 1. 事务的回顾 1.1 什么是事务(Transaction)(面试重点) 是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的 ...

  9. Spring 中的事务操作、注解、以及 XML 配置

    事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQ ...

随机推荐

  1. JavaScript异常处理

    http://www.yaosansi.com/post/747.html 异常处理概述      在代码的运行过程中,错误是不可避免的,总的来说,错误发生于两种情况:一是程序内部的逻辑或者语法错误, ...

  2. c#+mysql 中文乱码

    c#+mysql 中文乱码 遇到一个奇怪的问题,C#读取mysql中文正常,写入时发生乱码 网上查阅原因,发现如下信息 ---------------------------------------- ...

  3. C# XMLOperate

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  4. [C/C++11语法]_[0基础]_[lamba 表达式介绍]

    场景 lambda 表达式在非常多语言里都有一席之地,由于它的原因,能够在函数里高速定义一个便携的函数,或者在函数參数里直接高速构造和传递. 它能够说是匿名函数对象,一般仅仅适用于某个函数内,仅仅做暂 ...

  5. 以byte方式讀取SPD的數據(SMBus Controller在PCH中)

    Reading A Byte of SMBus EEPROM DataThe following steps have to be followed for the System BIOS to re ...

  6. 动态更新highcharts数据

    <!doctype html> <html> <head> <script type="text/javascript" src=&quo ...

  7. Typeface-为自定义字体提供字体内存缓存

    Android 上自定义字体的代码一般如下: TextView textview = (TextView) findViewById(R.id.your_referenced_textview); / ...

  8. Oracle 11g客户端中文乱码问题

    问题现象: 客户端安装完毕后,访问表内容,发现中文显示的都是?? 解决方案: 1.修改客户端注册表,路径为HKEY_LOCAL_MACHINE --->SOFTWARE ---> ORAC ...

  9. 12. Min Stack【medium】

    Implement a stack with min() function, which will return the smallest number in the stack. It should ...

  10. 每日英语:Online Education a New Frontier in China

    In a country as obsessed with education as China, it makes sense that online teaching has huge poten ...