专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
芋道源码  ·  阿里这款多级缓存框架一定要掌握,非常不错! ·  16 小时前  
Java编程精选  ·  手把手教你Java文件断点下载 ·  3 天前  
Java编程精选  ·  阿里员工吐槽:80%以上的leader认为, ... ·  4 天前  
Java编程精选  ·  公司Rust团队全员被裁,只因把服务写得「太 ... ·  2 天前  
芋道源码  ·  if 判断泛滥?试一试规则执行器,太香了! ·  2 天前  
51好读  ›  专栏  ›  java那些事

聊聊数据库乐观锁和悲观锁

java那些事  · 公众号  · Java  · 2019-02-15 16:00

正文

请到「今天看啥」查看全文



  • org.springframework.boot

  • spring-boot-devtools

  • runtime

  • mysql

  • mysql-connector-java

  • runtime

  • org.springframework.boot

  • spring-boot-starter-test

  • test

  • org.springframework.boot

  • spring-boot-starter-data-jpa

  • mysql

  • mysql-connector-java

  • org.projectlombok

  • lombok

  • true


  • org.aspectj

  • aspectjweaver

  • 1.8.4



  • org.springframework.boot

  • spring-boot-maven-plugin



  • 项目的结构如下:

    介绍一下项目的结构的内容:

    • entity包: 实体类包。

    • repository包:数据库repository

    • service包: 提供服务的service

    • controller包: 控制器写入用于编写requestMapping。相关请求的入口类

    • annotation包: 自定义注解,用于重试。

    • aspect包: 用于对自定义注解进行切面。

    • DblockApplication: springboot的启动类。

    • DblockApplicationTests: 测试类。

    咱们看一下核心代码的实现,参考如下,使用dataJpa非常方便,集成了CrudRepository就可以实现简单的CRUD,非常方便,有兴趣的同学可以自行研究。

    实现乐观锁的方式有两种:

    1. 更新的时候将version字段传过来,然后更新的时候就可以进行version判断,如果version可以匹配上,那么就可以更新(方法:updateCatalogWithVersion)。

    2. 在实体类上的version字段上加入version,可以不用自己写SQL语句就可以它就可以自行的按照version匹配和更新,是不是很简单。


    1. public interface CatalogRepository extends CrudRepository < Catalog , Long > {


    2. @Query ( value = "select * from Catalog a where a.id = :id for update" , nativeQuery = true )

    3. Optional < Catalog > findCatalogsForUpdate ( @Param ( "id" ) Long id );


    4. @Lock ( value = LockModeType . PESSIMISTIC_WRITE ) //代表行级锁

    5. @Query (







    请到「今天看啥」查看全文