Hibernate事务处理
来源:互联网 发布:爱奇艺视频转换器mac版 编辑:程序博客网 时间:2024/06/08 13:59
悲观锁
1、创建数据库表
2、添加数据
1 tom 20
3、建立web项目
建立相应的类:
public class User { private Integer id; private String username; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
建立User.hbm.xml文件
<hibernate-mapping> <class name="pink.User" table="user"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native" /> </id> <property name="username" type="java.lang.String"> <column name="username" /> </property> <property name="age" type="java.lang.Integer"> <column name="age" /> </property> </class></hibernate-mapping>
创建hibernate.cfg.xml文件
<hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test </property> <property name="hibernate.connection.username">root </property> <property name="hibernate.connection.password">root </property> <property name="hibernate.show_sql">true </property> <property name="format_sql">true </property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property> <mapping resource="pink/User.hbm.xml"/> </session-factory></hibernate-configuration>
建立HibernateUtils.java获取Session实例
public class HibernateUtils { private static final Configuration config; private static final SessionFactory factory; static{ config=new Configuration().configure(); factory=config.buildSessionFactory(); } public static Session getSession(){ return factory.openSession(); }}
建立测试类UserTest.java
public void test(){ Session session=HibernateUtils.getSession(); Transaction tx=session.beginTransaction(); User user=(User)session.get(User.class, 1); System.out.println(user.getId()+" "+user.getUsername()+" "+user.getAge()); tx.commit(); session.close(); } @Test public void test2(){ Session session=HibernateUtils.getSession(); Transaction tx=session.beginTransaction(); User user=(User)session.get(User.class, 1); user.setUsername("link"); session.save(user); tx.commit(); session.close(); } @Test public void test3(){ Session session=HibernateUtils.getSession(); Transaction tx=session.beginTransaction(); User user=(User)session.get(User.class, 1); user.setAge(30); session.save(user); tx.commit(); session.close(); }
4、进行测试
导入Junit包,在test2与test3的user.setXXX(“”)处添加断点
,test2()方法处进行debug As JUint Test,F6单步执行到commit()处,
然后如test2一样执行test3()
对于test2()方法,按Resume执行完成,数据库值改变
1 link 20
对于test3()同样执行如上,数据库值为
1 tom 30
即test2()的执行没有保存添加:
User user=(User)session.get(User.class,1,LoacMode.UPGRADE)
数据库值如test2()执行后的值,而test3()的不到执行
5、乐观锁设置
在数据库表添加version字段,在User类中添加属性及setter与getter方法,设置User.hbm.xml文件,在id后加入:
<version name="version" column="version" type="integer"/>
测试结果
会执行test2()并改变version值,当执行test3()会抛出异常
只会保存test2()执行结果
6、悲观锁与乐观锁
悲观锁会锁定数据,其他方法无法对该数据修改,而乐观锁是通过version的值判断该数据是否被更改,若更改,其他修改将得不到执行,会抛出异常
阅读全文
0 0
- Hibernate 事务处理
- hibernate事务处理
- hibernate事务处理
- hibernate事务处理
- Hibernate事务处理
- Hibernate事务处理机制
- Hibernate事务处理机制
- Hibernate的事务处理机制
- Hibernate的事务处理机制
- Hibernate事务处理机制
- hibernate 事务处理 并发1
- hibernate的事务处理方式
- Hibernate事务处理机制
- spring集成hibernate事务处理
- spring+hibernate事务处理
- hibernate事务处理和锁
- hibernate事务处理和锁
- Hibernate与事务处理
- HDU--6063--RXD and math
- java作业gui1
- Socks
- 安卓使用videoview进行音频、视频播放,及播放控制
- 静态资源文件管理
- Hibernate事务处理
- 01 Spring Boot 核心
- 练习3
- 找工作篇
- springMvc视图化,国际化,静态资源处理
- 顺序表的实现
- caffe源码阅读之layer(2)——DataLayer层(2)
- LWIP 实现DHCP及DNS功能
- RecycleView适配器 Persener层