<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 指定数据库方言 如果使用jbpm的话,数据库方言只能是InnoDB--> <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 根据需要自动创建数据表 --> <property name="hbm2ddl.auto">update</property> <!-- 显示Hibernate持久化操作所生成的SQL --> <property name="show_sql">true</property> <!-- 将SQL脚本进行格式化后再输出 --> <property name="format_sql">false</property> <property name="current_session_context_class">thread</property> <!-- 导入映射配置 --> <property name="connection.url">jdbc:mysql:///user</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <mapping resource="com/xiaohao/test/User.hbm.xml" /> </session-factory> </hibernate-configuration>
UserTest.java
package com.xiaohao.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class UserTest { public static void main(String[] args) { Configuration conf=new Configuration().configure(); SessionFactory sf=conf.buildSessionFactory(); Session session=sf.getCurrentSession(); Transaction tx=session.beginTransaction(); // User user=new User("张三","英雄"); // session.save(user); // session.createSQLQuery("insert into user(userName,password) value('李四','123')") // .executeUpdate(); User user=(User) session.get(User.class, 1); user.setUserName("221"); // session.save(user); System.out.println("恭喜您,用户的数据插入成功了哦~~"); tx.commit(); } }
每次对 TUser 进行更新的时候,我们可以发现,数据库中的 version 都在递增。
订票系统案例,某航班只有一张机票,假定有1w个人打开你的网站来订票,问你如何解决并发问题(可扩展到任何高并发网站要考虑
建议使用的是对象锁或者是乐观锁,不建议使用悲观锁,
使用对象所的好处就是当没有抢到锁的时候,可以及时的反馈,锁定失败,
使用乐观锁的好处就是,每个人都有锁定的机会,谁最先完成信息的前些,谁的网速最快,谁将购票成功,减少了对象锁中,当票被锁定之后,由于信息填写时间过长而导致的票重新进入不被锁定状态,节约了时间,但是这种操作带来的后果可能会降低客户的体验度,已经填写了大量信息后发现票已近出售。