正文
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,非常方便,有兴趣的同学可以自行研究。
实现乐观锁的方式有两种:
-
更新的时候将version字段传过来,然后更新的时候就可以进行version判断,如果version可以匹配上,那么就可以更新(方法:updateCatalogWithVersion)。
-
在实体类上的version字段上加入version,可以不用自己写SQL语句就可以它就可以自行的按照version匹配和更新,是不是很简单。
-
public
interface
CatalogRepository
extends
CrudRepository
<
Catalog
,
Long
>
{
-
-
@Query
(
value
=
"select * from Catalog a where a.id = :id for update"
,
nativeQuery
=
true
)
-
Optional
<
Catalog
>
findCatalogsForUpdate
(
@Param
(
"id"
)
Long
id
);
-
-
@Lock
(
value
=
LockModeType
.
PESSIMISTIC_WRITE
)
//代表行级锁
-
@Query
(