在每个模型的不同 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 存储库方法时如何避免重复的代码行/代码块的主要内容,如果未能解决你的问题,请参考以下文章