• Hibernate事务代码规范写法


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

  • 相关阅读:
    Spring&AOP&JDK和Cglib动态代理&AspectJ进行AOP开发(XML方式)
    python 切换工作目录
    python 布隆过滤器
    python sys.path.append()
    python encrypt 实现AES加密
    python 魔术方法
    python re匹配中文和非中文
    python 文件整理 shutil
    python定时任务框架
    mac 系统修改环境变量
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/7286831.html
Copyright © 2020-2023  润新知