것은 우리는 당신이 갈 수있는 것보다 더 일반적인 방법으로 이야기하는 경우 :
public interface GenericDao<D>{
public D get(Long id);// as Id use Long instead of Integer, Ids can be very large numbers, Int can be not enough
public Collection<D> getList(SearchCriteria crit); //for retrieving more than one element
public void remove(Long id);
public void update(D entity); // remember that updated record should have already id inside, you can add assert inside
public void create(D entity); // assert that id is null
}
마지막 단계는 방법 (옵션)를 저장하여 추가/교체 갱신 할 수 있습니다.
당신은 제네릭을 사용하고, D는 getId() 메소드가 어떤 인터페이스를 구현 할 수 있습니다, 이것은 부모로서, 코드 :
public interface Model implement Serializable{
Long getId();
}
을 줄일 수, 모든 DAO에 대해 하나 개의 클래스를 작성하는 데 도움이됩니다 youd가 DAO의 내부에, 당신은이를 작성합니다
public interface UserDAO <D extends Model>{
...
을이 시점에서 당신이 당신의 GenericDaoImpl의 내부하는 모든 CRUD 작업을 구현할 수 있습니다. 그리고 UserDao와 같은 모든 DAO는 단순히 GenericDaoImpl을 확장 할 것이고, UserDao와 같은 Dao 인터페이스는 GenericDao 인터페이스를 확장 할 것입니다.
일반 클래스 내에서 일반적인 로직을 숨기고 이메일, 사용자 이름 또는 나이별로 사용자를 가져 오는 것과 같이 특정 Dao에만 특정 메소드를 추가합니다. :) 코드가보다 깨끗하고 읽기 쉽습니다.
재미있는 ..
당신은 또한 기능의 이러한 유형을 추가 할 수 있으므로 인터페이스는 프로젝트에서 사용자의 모든 종류에 액세스하는 데 사용할 수 있습니다 또한 당신은 같은 당신의 필요에 따라 더 CRUD 기능을 추가 할 수 있습니다 . 엔티티의 Collection을 가져 오기 위해 getList 메소드와 같은 메소드를 추가해야합니까? – user3663882
API를 만들 때 모든 사용자를 나열 할 수있는 목록보기가 있어야하므로 매우 일반적입니다. 편집을 위해서 당신은 get (id) 메쏘드 등을 사용합니다. – Beri
저는 (generics와 함께)이 패턴을 사용했고 제 DAO 클래스는 generic 메인 클래스를 확장하기 때문에 코드 중복이 거의 없습니다. – Beri