JPA Buddy 插件介绍

创建仓库

 

c126af0f9d92c366b5ea037d4962f523.gif

修改仓库

 

4bd7cd2050cc8802e8990e4af0591731.gif

 

插入数据源

 

9391076581c8ad7b90559c41584a2347.gif

使用该方法前必须添加一个数据源到 SQL Date Tool

生成实体类

 

59b3dc085ec3832c948294d60bea37c9.gif

 

1. 表的结构为 Spring Security 用户-角色-权限多对多模型
2. 创建实体类的关联关系需要勾选References 选项
3. 若依赖中含有Lombok JPA Buddy 会自动生成 Getter 和 Setter 方法
4. 实体类创建完成后需要为 IntelliJ IDEA 的自动检查配置一个数据源

使用乐观锁

 

1929524783b18028e3364f4d19bf3bd9.gif

 

乐观锁由 孔祥重教授指出通过对比不同线程之间的版本号字段来保证数据库中数据一致性和系统吞吐
量,适用于低并发的环境中,可以搭配 spring-retry 进行并发重试。

使用审计功能

* 在 JPA 中,审计是对表中记录的创建/修改时间,创建/修改者的记录

 

a7da53202a54e31ae5b4f48cd857bf99.gif

createdBy 和 updatedBy 需要在和 Spring Security 集成时可被自动设置,此处略

添加查询方法

 

b58f9e895a1e468d71b56abbceebe85e.gif

添加模糊查询

 

6a8bf8522e9b85950197d5d282e83ba6.gif

支持的关键字有 StartsWith、EndsWith...

添加修改方法

 

2dcc73b5251c392f9706b83438c2c853.gif

修改方法必须添加 Modifying 注解,避免异常
使用该方式书写JPQL 语句时,应先选择 Add update value assignment ,在选择 Add Query Condition ,可根据个人习惯自行调整

添加范围查询

 

2d7e17b1fb080b7571d89d1616e38539.gif

添加排序方法

 

7f6fb65bb730651acc1f6ab0dd0a7423.gif

可以向方法中添加 Sort 参数自定义排序规则

添加删除方法

 

4ec2ea47466b576388a31bb2eda3234d.gif

添加关联查询

 

deb53d327449ae7fb9b483090a5199f0.gif

EntityGraph 可以优雅的解决懒加载异常和 N + 1 问题

添加分页查询

 

c80db8fcfb1d0140ff5f2f0d649c3952.gif

真正的测试需要使用 assert 语句或 mock 语句,这里仅作演示

提取查询语句

 

05b68d0290ae394b09fe32910182cf51.gif

重载字符串方法

 

d9e61a3651c681f44e5939658d2cdd4b.gif

JPA Buddy 生成的 toString 方法并不包含关联属性,从而避免懒加载异常
在 Add Lifecycle Callback method 除了 toString 方法外还有 equals方法、hashCode方法和生命周期方法

映射到数据定义语言

 

d73d5a1c0d5e62c3abeef9ea464ebef7.gif

其他

* 不同数据库的默认隔离级别不同,多数据库环境下应查阅相关文档
* CrudRepository 中的 save 方法在是通过数据库中的主键执行更新操作
* CrudRepository 中的 save 方法既可以执行插入操作也可以执行更新操作
* CrudRepository 中的 save 方法执行更新前会进行一次查询操作,来确定是执行插入操作还是更新操作
* Spring Data JPA 完成了对 Hibenate 的抽象,减少了 Hibernate 和 JPA 配置的繁琐,提高了开发效率

悲观锁

//  由于自动提交的存在在 ORM 中较为难以演示,此处给出代码
public interface OrderRepository extends JpaRepository<Order, Integer> {
    @Lock(LockModeType.PESSIMISTIC_WRITE)    //  相当于 for update
    @Transactional(isolation = Isolation.SERIALIZABLE)    //  for update 通常搭配序列化事务隔离级别
    List<Order> findByIdBetween(Integer idStart, Integer idEnd);
}    //  更新失败抛出:PessimisticLockingFailureException


//-------------------------------------------------//
public interface OrderRepository extends JpaRepository<Order, Integer> {
    @Lock(LockModeType.PESSIMISTIC_READ)    //  相当于 for share
    @Transactional(isolation = Isolation.REPEATABLE_READ)    //  for update 通常搭配可重复读事务隔离级别
    List<Order> findByIdBetween(Integer idStart, Integer idEnd);
}    //  更新失败抛出:PessimisticLockingFailureException

锁的降级

* 在 JPA 中锁按照以下顺序降级 PESSIMISTIC_WRITE --> PESSIMISTIC_FORCE_INCREMENT --> PESSIMISTIC_READ --> OPTIMISTIC_FORCE_INCREMENT --> OPTIMISTIC --> READ --> NONE

不使用乐观锁

 

f3f9aac5c0d8ab957a4de1092a2612a1.gif

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值