----------------siwuxie095

事务相关概念

1、什么是事务

逻辑上的一组操作,构成这组操作的各个单元,要么一起成功,

要么一起失败

2、事务的四个特性

1)原子性

2)一致性

3)隔离性

4)持久性

3、不考虑隔离性,产生的问题

1)脏读

2)不可重复读

3)幻读(也称 虚读)

4、设置事务隔离级别,即可解决不考虑隔离性所产生的问题

「MySQL 默认的隔离级别:Repeatable Read(可重复读)」

5、Hibernate 也可以在核心配置文件中配置事务隔离级别

<!--

事务隔离级别:

hibernate.connection.isolation = 4

1 - Read uncommitted isolation(未提交读:脏读、不可重复读、幻读均可能发生)

2 - Read committed isolation(已提交读:防止脏读发生,不可重复读、幻读均可能发生)

4 - Repeatable read isolation(可重复读:防止脏读、不可重复读发生,幻读可能发生)

8 - Serializable isolation(可串行化:防止脏读、不可重复读、幻读发生)

-->

<property name="hibernate.connection.isolation">4</property>

Hibernate 事务代码规范写法

1、代码结构

2、具体代码

主要函数 testTx():

//事务代码规范写法

@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("8888");

user.setAddress("中国");

session.save(user);

//提交事务

tx.commit();

} catch (Exception e) {

//回滚事务

tx.rollback();

} finally {

//关闭资源

session.close();

sessionFactory.close();

}

}

其中,HibernateUtils.java 和 User.java 分别如下:

HibernateUtils.java:

package com.siwuxie095.utils;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

public class HibernateUtils {

static Configuration cfg=null;

static SessionFactory sessionFactory=null;

//或:加上 private final 亦可,不过此时不能等于 null

// private static final Configuration cfg;

// private static final SessionFactory sessionFactory;

//静态代码块

static {

//加载核心配置文件

cfg=new Configuration();

cfg.configure();

sessionFactory=cfg.buildSessionFactory();

}

//提供方法返回 sessionFactory

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

User.java:

package com.siwuxie095.entity;

public class User {

//Hibernate 要求实体类有一个属性唯一,即主键

private int uid;

private String username;

private String password;

private String address;

public int getUid() {

return uid;

}

public void setUid(int uid) {

this.uid = uid;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

@Override

public String toString() {

return "User [uid=" + uid + ", username=" + username + ", password=" + password +

", address=" + address + "]";

}

}

另:

User.hbm.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!--

http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd

该 dtd 文件是用于提示的文件,联网即有提示信息,也可

手动添加:Window->Preferences->XML->XML Catalog,

点击 Add 添加即可,Location 即路径,Key 即上面的链接,

Key type 即 URI

-->

<!-- 根标签 -->

<hibernate-mapping>

<!-- (1)

class 标签:配置实体类和数据库表的对应;

name 属性:实体类的全路径,即全限定名;

table 属性:数据库表的名称(数据库表由 Hibernate 自动生成) -->

<class name="com.siwuxie095.entity.User" table="t_user">

<!-- (2)

id 标签:配置实体类 id 和表 id 对应(主键);

name 属性:实体类里 id 属性名称;

column 属性:生成表中 id 字段名称 -->

<!-- Hibernate 要求实体类有一个属性唯一值,

Hibernate 要求表中字段有一个属性唯一值 -->

<id name="uid" column="uid">

<!-- 设置数据库表 id 的增长策略,

native:主键 id 值自动增长 -->

<generator class="native"></generator>

</id>

<!-- (3)

property 标签:配置其它属性和表中字段对应;

name 属性:实体类属性名称;

column 属性:生成表中字段名称 -->

<property name="username" column="username"></property>

<property name="password" column="password"></property>

<property name="address" column="address"></property>

</class>

</hibernate-mapping>

hibernate.cfg.xml:

<?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>

<!-- 或使用 jdbc:mysql:///hibernate_db 代替,省略 localhost -->

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_db</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">8888</property>

<!-- 第二部分:配置 Hibernate 信息(可选) -->

<!-- 输出底层 sql 语句 -->

<property name="hibernate.show_sql">true</property>

<!-- 输出底层 sql 语句格式 -->

<property name="hibernate.format_sql">true</property>

<!-- Hibernate 帮助创建表,不是自动创建,而需要配置之后。

update:如果已经有表,就更新,如果没有,就自动创建 -->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 配置数据库方言,让 Hibernate 框架识别不同数据库自己特有的语句。

如:在 MySQL 中实现分页的关键字 limit,只能在 MySQL 中使用,而

在 Oracle 中实现分页的关键字则是 rownum -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!--

事务隔离级别:

hibernate.connection.isolation = 4

1 - Read uncommitted isolation(未提交读:脏读、不可重复读、幻读均可能发生)

2 - Read committed isolation(已提交读:防止脏读发生,不可重复读、幻读均可能发生)

4 - Repeatable read isolation(可重复读:防止脏读、不可重复读发生,幻读可能发生)

8 - Serializable isolation(可串行化:防止脏读、不可重复读、幻读发生)

-->

<property name="hibernate.connection.isolation">4</property>

<!-- 第三部分:引入映射配置文件,把映射配置文件放到核心配置文件(必须) -->

<mapping resource="com/siwuxie095/entity/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

【made by siwuxie095】

Hibernate事务代码规范写法的更多相关文章

  1. Hibernate 事务和并发控制

    首先关于Hibernate事务控制,下面是非常权威的资料, https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch02.html ...

  2. php代码规范->如何写出规范且易于理解的项目代码-ZX版

    2019年5月17日10:50:12 前序: 目前是想到哪写到哪,后面有时间在整理成具体文章 很多时候,PHP代码风格过于自由,导致一个项目有N多种写法风格,有些人为了自己认为的技术"高&q ...

  3. (转)Hibernate事务管理

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

  4. PHP代码规范

    PHP编码规范 1. 标识符命名规范 标识符的命名力求做到统一.达意和简洁. 1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用pro ...

  5. hibernate事务

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

  6. 代码规范和常用的js插件以及测试工具

    1.代码规范 .model层 1.1.1database file_proerty 1.1.2java fileProperty. 1.2.字段要有空指针 1.3.不创建爱数据库外键约束 1.4.已知 ...

  7. javascript,jquery代码规范

    jquery代码规范 Coding Standards & Best Practices 中文翻译版:jquery编程的标准写法和最佳实践 javascript代码规范 JavaScript编 ...

  8. JavaScript代码规范和性能整理

    性能 Js在性能方面有多要注意的地方: 避免全局查找 Js性能优化最重要的就是注意全局查找,因为作用域的查找是先找局部作用域在没有找到之后在去上一级作用域查找直到全局作用域,所以全局作用域查找的性能消 ...

  9. 漫谈PHP代码规范

    前言 虽说PHP是世界上最好的语言,但是写出来的PHP代码却往往不是最美观的.究其原因,可能正式因为PHP简单易上手,适合快速迭代的特性,导致了我们沉浸在迅速完成需求迭代的窃喜中,却忘记了规范性.忽略 ...

随机推荐

  1. 使用Maven运行Solr(翻译)

    Solr是一个使用开源的搜索服务器,它采用Lucene Core的索引和搜索功能构建,它可以用于几乎所有的编程语言实现可扩展的搜索引擎. Solr的虽然有很多优点,建立开发环境是不是其中之一.此博客条 ...

  2. Renesas CAT CONFIG

    CAT CELL "sf_cellular_api.h" typedef enum e_sf_cellular_at_cmd_index { SF_CELLULAR_AT_CMD_ ...

  3. cowboy的中间件

    想不到cowboy这样的,居然也有中间件的概念,膜拜作者 创建工程 rebar-creator create-app testCowboy testCowboy_app.erl -module(tes ...

  4. 了解IHttpModule接口事件执行顺便 获取Session

    本文转载自:http://www.cnblogs.com/eflylab/archive/2008/05/29/1209767.html 最近公司一个项目让人SQL注入了-为了临时先解决这个问题,使攻 ...

  5. Java 中的this关键字

    1.this关键字代表当前对象 this.属性 操作当前对象的属性 this.方法 调用当前对象的方法 2.封装对象的属性的时候,经常会使用this关键字 public class Telphone ...

  6. 虚拟机桥接网卡下配置centOS静态IP

    前面我们讲了怎么去配置asterisk,但是配置完了,是没有什么效果出现的,因为asterisk相当于一个服务器,我们需要一个客户端去给它连接起来,如果你是在自己的机子上装了虚拟机,那最好配一下cen ...

  7. 018:InnoDB 存储引擎、表空间

    目录 一.InnoDB 存储引擎 1. InnoDB的历史 2. InnoDB的特点 3. InnoDB存储引擎的文件 3.1 概述 3.2 InnoDB - 表空间 3.3 General表空间 3 ...

  8. 第一章 先把Kubernetes跑起来

    1.1 先跑起来 k8s官网已经为大家准备好了一个现成的最小可用系统.  https://kubernetes.io/docs/tutorials/kubernetes-basics/ 1.2 创建K ...

  9. java mybatisGenerator with velocity

    mybatisGenerator + velocity 模板生成dao+ mapper,并将mysql命名规范的table name + column -> java命名规范的 Class na ...

  10. DOM库及常用方法封装

    节点 nodeType nodeName nodeValue 元素节点 1 大写的标签名 null 文本节点 3 #text 文本内容 注释节点 8 #comment 注释内容 document 9 ...