mybatis 并发问题解决,参考hibernate

时候操作同一账户就是典型的样例。

比方A、B操作员同一时候读取一剩余金额为1000元的账户,A操作员为该账户添加100元。B操作员同一时候为该账户减去 50元。A先提交。B后提交。 最后实际账户剩余金额为1000-50=950元。但本该为 1000+100-50=1050。这就是典型的并发问题

一个简单的解决的方法:更新的时候给版本字段加上 1。然后 UPDATE 会返回一个更新结果的行数,通过这个行数去推断。

update account set price = #price #,version=version+1

where id=#id#
and version=#vsersion#

假设更新运行返回的数量是 0 表示产生并发改动了,须要又一次获得最新的数据后再进行更新操作。

Hibernate、JPA 等 ORM 框架或者实现。是使用版本,再推断 UPDATE 后返回的数值,假设这个值小于 1 时则抛出乐观锁并异常脂肪的变化。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-27 02:14:27

mybatis 并发问题解决,参考hibernate的相关文章

分布式并发问题解决的一些小心得

问题场景描述 一般都是先读数据库某个数,判断是否满足要求,然后更新这个数据,在分布式高并发的情况下,就容易出现脏读的问题.要解决的话,有以下可以尝试的方法 java同步关键字synchronized 可以锁方法也可以锁对象,不过不适合分布式环境,刚开始学完java比较容易想到的办法 利用数据库的特性 利用数据库行级锁,读锁,不过互联网的应用,这种方法就不推荐了 利用事务 这个对事务的大小,以及执行速度都有要求,如果事务足够小,执行的足够快的话,也是一种解决办法 先更新,后取数 比如:你想取得商品

自己开发过程中mybatis使用经验以及和hibernate的对比

mybatis和hibernate 第一步, 首先让我们对mybatis和hibernate对比了解下 相同点: 1. Hibernate :Hibernate 是当前非常流行的ORM框架,对数据库结构提供了较为完整的封装,都是为了简化Dao层的操作. Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系,都是为了简化Dao层的操作. 2.Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生

SpringBoot数据库访问工具(JdbcTemplate、MyBatis、JPA、Hibernate)

SpringBoot数据库访问 关系型数据库访问(RDBMS) 采用JdbcTemplate.MyBatis.JPA.Hibernate等技术. 一.JdbcTemplate工具 1.在pom.xml添加boot-starter-jdbc定义<dependencies> 数据库驱动 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifac

Mybatis入门及于hibernate的区别

pojo:不按mvc分层,只是java bean有一些属性,还有get set方法domain:不按mvc分层,只是java bean有一些属性,还有get set方法po:用在持久层,还可以再增加或者修改的时候,从页面直接传入action中,它里面的java bean 类名等于表名, 属性名等于表的字段名,还有对应的get set方法vo: view object表现层对象,主要用于在高级查询中从页面接收传过来的各种参数.好处是扩展性强bo: 用在servie层,现在企业基本不用.这些po,v

每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头的方案可能并不适合创业公司,那么如何保证高并发问题不成为创业路上的拦路虎,是每一个全栈工程师.资深系统工程师.有理想的程序员必备的技能,希望本文助您寻找属于自己的"成金之路",发亮发光. 目录: 场景及解决方法解读 认识负载 数据跟踪 脑图.caoz大神公众号分享 参考资料 秉承知其然及其

Mybatis配置问题解决Invalid bound statement (not found)

首先这个异常的原因是系统根据Mapper类的方法名找不到对应的映射文件. 网上也搜索了到了类似的文章,一般可以从以下几个点排查: mapper.xml的namespace要写所映射接口的全称类名,而且要和Mapper类对应好! mapper.xml中的每个statement的id要和接口方法的方法名相同 mapper.xml中定义的每个sql的parameterType要和接口方法的形参类型相同 mapper.xml中定义的每个sql的resultType要和接口方法的返回值的类型相同 mapp

Mybatis 并发执行导致cpu占满的问题

最近线上服务经常 出现cpu达到100%的问题,发现都是执行oracle操作的方法就没有返回.经过排查,最后定位到cpu消耗在以下方法 System.Collections.Generic.Dictionary`2<system.type,system.boolean>.FindEntry (...)System.Collections.Generic.Dictionary`2<system.__canon,system.boolean>.TryGetValue (...)MyBa

通过自动回复机器人学Mybatis(OGNL参考)

imooc视频学习笔记 ----> URL:http://www.imooc.com/learn/154

hibernate与mybatis异同与比较(涵盖网上各个版本,清晰明了)

一.序言 最近一直用mybatis做开发,以前用过hibernate,能感受到一些它们在使用上的区别,不过总想抽出时间来好好比较比较弄弄清楚它们各自的优劣,以便更好进行选择和深入的了解. 网上也看了很多资料,结合自己的使用体会,粗率地概括和总结了一下,以供大家参考. 二.具体运用上的不同 1.所需的jar包 Mybatis:只需要3个(mybatis-3.1.1.jar,mybatis-3.1.1-javadoc.jar,mybatis-3.1.1-sources.jar) Hibernate: