我正在构建一个包含超过10个域类的Spring Boot应用程序,这些类需要保留在SQL数据库中。
问题是我需要为每个单个域类创建一个接口,因此每个类都需要这样:

public interface BehandelaarRepo extends CrudRepository<BehandelCentrum, Long> {

}


有什么办法可以通过使用某种设计模式或其他方式来减少存储库的数量?有什么建议?

最佳答案

实际上,您可以像使用Spring Data JPA一样使用泛型来使自己更容易一些:

public interface JpaRepository<T extends Serializable, ID extends Serializable> {
    public <S extends T> S save(S object);
}


诀窍是您可以使用所有子类,并且也可以重新获得该类。我总是创建一个超类,因此我摆脱了通用的ID:

@MappedSuperclass
public class JpaObject {
    @Id
    @GeneratedValue
    private Long id;
    (.... created, last updated, general stuff here....)
}


我从此JpaObject创建我的@Entity类作为子类。

第二步:创建我的超级接口,以供将来特殊查询的使用:

@NoRepositoryBean
public interface Dao<T extends JpaObject> extends JpaRepository<T, Long> {
}


下一步:通用的Dao,看起来有些笨拙,并且始终空着

@Repository
public interface GenericDao extends Dao<JpaObject> {
}


现在仔细看一下CrudRepository / JpaRepository中的保存方法:

public <S extends T> S save(S object);


现在,可以将扩展JpaObject(S扩展JpaObject)的任何对象作为参数提供给所有方法,并且returntype与参数属于同一类。

(阿齐兹(Aziz),阿尔·希特·汉格(Al het handiger),荷兰内特兰(Nederlands uitgelegd worden)中的坎·赫特(Kan het ook):P Groet uit Zwolle)

07-26 05:17