当前位置:首页>开发>正文

hibernate乐观锁原理 hibernate的锁机制是什么意思

2023-04-11 00:09:35 互联网 未知 开发

hibernate乐观锁原理 hibernate的锁机制是什么意思

hibernate的锁机制是什么意思

hibernate中两种锁机制: 悲观锁,乐观锁.
悲观锁:采用数据库本身的锁机制,for update或no wait
优点:处理并发彻底,并发处理比较好
缺点:当一个用户锁定记录的时候,其它用户都不能使用了,容易造成长时间的等待.

乐观锁:是Hibernate自己实现的,采用版本控制的方式实现处理并发.
1.添加version元素
2.声明使用版本控制的方式实现乐观锁optimistic-lock="version"

数据库高并发下乐观锁的原理

在高并发下,经常需要处理SELECT之后,在业务层处理逻辑,再执行UPDATE的情况。
  若两个连接并发查询同一条数据,然后在执行一些逻辑判断或业务操作后,执行UPDATE,可能出现与预期不相符的结果。
  在不使用悲观锁与复杂SQL的前提下,可以使用乐观锁处理该问题,同时兼顾性能。
  场景模拟:
  假设一张表两个字段,一个id,一个use_count。
表里存了100个id,每个id对应自己的use_count。
  当id每使用一次,use_count要加1。当use_count大于1000时,这个id就不能在被使用了(换句话说 无法从数据库中查出)。
  在高并发情况下,会遇到一种问题:假设数据表中有一条记录为:id=123456, use_count=99  A与B两个连接并发查询这个id=123456,都执行下列SQL:
SELECT * FROM table WHERE id=123456 and use_count < 1000  A先执行,得到id=123456的use_count是999,之后在程序里做了一些逻辑判断或业务操作后执行SQL:
UPDATE table SET use_count   1 WHERE id=123456  在A做判断且没有update之前,B也执行了查询SQL,发现use_count是999,之后它也会执行SQL:
UPDATE table SET use_count   1 WHERE id=123456  但是,事实上B不应该取得这个id,因为A已经是第1000个使用者。
  处理步骤如下:
  1、添加第3个字段version,int类型,default值为0。version值每次update时作加1处理。
ALTER TABLE table ADD COLUMN version INT DEFAULT 0 NOT NULL AFTER use_count  2、SELECT时同时获取version值(例如为3)。
SELECT use_count, version FROM table WHERE id=123456 AND use_count < 1000  3、UPDATE时检查version值是否为第2步获取到的值。
UPDATE table SET version=4, use_count=use_count 1 WHERE id=123456 AND version=3  如果UPDATE的记录数为1,则表示成功。
如果UPDATE的记录数为0,则表示已经被其他连接UPDATE过了,需作异常处理。
参考地址:http://latrell.me/post-358.html

HIbernate 的工作原理是什么?

关于hibernte的工作原理,简单说一下个人浅见:
1.配置好hibernate的配置文件和与类对应的配置文件后,启动服务器
2.服务器通过实例化Configeration对象,读取hibernate.cfg.xml文件的配置内容,并根据相关的需求建好表或者和表建立好映射关系
3.通过实例化的Configeration对象就可以建立sessionFactory实例,进一步,通过sessionFactory实例可以创建session对象
4.得到session之后,便可以对数据库进行增删改查操作了,除了比较复杂的全文搜索外,简单的操作都可以通过hibernate封装好的session内置方法来实现
5.此外,还可以通过事物管理,表的关联来实现较为复杂的数据库设计
优点:hibernate相当于java类和数据库表之间沟通的桥梁,通过这座桥我们就可以做很多事情了

hibernate工作原理及为什么要用

原理:
1.通过Configuration().configure()读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的读取并解析映射信息
3.通过config.buildSessionFactory()//创建SessionFactory
4.sessionFactory.openSession()//打开Sesssion
5.session.beginTransaction()//创建事务Transation
6.persistent operate持久化操作
7.session.getTransaction().commit()//提交事务
8.关闭Session
9.关闭SesstionFactory
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

参见:

http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html

求Hibernate的详细原理

Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了轻量级的对象封装,使 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。它不仅提供了从 Java 类到数据表之间的映射,也提供了数据查询和恢复机制。相对于使用 JDBC 和 SQL 来手工操作数据库,Hibernate可以大大减少操作数据库的工作量。 另外 Hibernate 可以利用代理模式来简化载入类的过程,这将大大减少利用 Hibernate QL 从数据库提取数据的代码的编写量,从而节约开发时间和开发成本 Hibernate 可以和多种Web 服务器或者应用服务器良好集成,如今已经支持几乎所有的流行的数据库服务器。

hibernate 的工作原理

hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc sql操作数据的方式,从而使开发人员可以话更多精力进行对象方面的开发

好处呢,并不只是简化了数据库操作,更有价值的事对不同的数据库提供了统一操作的接口,使应用程序的跨数据库开发成为可能。

最新文章