在每个模型的不同 DAL 类中实现 JPA 存储库方法时如何避免重复的代码行/代码块

Posted

技术标签:

【中文标题】在每个模型的不同 DAL 类中实现 JPA 存储库方法时如何避免重复的代码行/代码块【英文标题】:How to avoid duplicate lines/blocks of code when implementing JPA repository methods in different DAL classes for every model 【发布时间】:2021-12-10 05:52:54 【问题描述】:

假设我有两个模型,对于每个模型,我都有一个 JPA 存储库接口,如下所示:

public interface IPersonJPARepository extends JpaRepository<Person, Long> 
.....


public interface ICountryJPARepository extends JpaRepository<Country, Long> 
.....


然后我想为每个模型都有一个 DAL 类,我可以在其中使用 ORM 方法进行 CRUD。 示例:

@Repository
public class PersonDal implements IPersonDal 
    @Autowired
    IPersonRepository repo;

    @Override
    public List<Person> getAll() 
        return repo.findAll();
    


@Repository
public class CountryDal implements ICountryDal 
    @Autowired
    ICountryRepository repo;

    @Override
    public List<Country> getAll() 
        return repo.findAll();
    

然后在启动 Sonarqube 分析我的代码时出现了问题,因为毫无疑问,Sonarqube 看到在两个 getAll() 方法中我使用同一行来获取特定模型的所有对象。 所以我的问题是这个 Sonarqube 问题的解决方案是什么?

【问题讨论】:

【参考方案1】:

遵循变量的命名约定。变量名可以是有代表性的名词,而不是一般的词。在您的情况下,更改如下:

@Autowired
ICountryRepository countryRepository; // or countryRepo

 @Autowired
 IPersonRepository personRepository; // or personRepo

如果您确实有重复代码,请将其复制到接口或超类并使用继承扩展/实现父类。

【讨论】:

是的,感谢您的快速回答。以这种方式修复重复实际上非常容易,而且我还获得了更好的可读性以及遵循名称约定。

以上是关于在每个模型的不同 DAL 类中实现 JPA 存储库方法时如何避免重复的代码行/代码块的主要内容,如果未能解决你的问题,请参考以下文章

DAL 中的实体框架存储库模式,如何实现更新功能?

如何在 Linq to SQL 中实现缓存?

spring data jpa中实现JpaRepository接口的repository可以返回sortedset吗?

如何在 JPA 和自定义 UUID 标识符中实现批量插入

如何在 MVC 控制器中实现数据访问层

spring jpa存储库中的子查询