Если мы говорим в более общих методов, чем вы могли бы пойти с:
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(), это поможет написать один класс для всех DAO, как родитель, уменьшит ваш код :)
public interface Model implement Serializable{
Long getId();
}
И внутри Youd DAO, можно было бы написать так:
public interface UserDAO <D extends Model>{
...
С этого момента вы можете в ваших GenericDaoImpl выполнять все операции Crud. И все ваши dao, такие как UserDao, просто расширят интерфейс GenericDaoImpl, а интерфейсы Dao, такие как UserDao, расширят интерфейс GenericDao.
Таким образом, вы будете скрывать общую логику внутри общих классов и добавлять определенные методы только к некоторому Дао, например, к выбору пользователей по электронной почте, имени пользователя или возрасту :). Ваш код будет более чистым и читаемым.
Интересно, поэтому интерфейс может быть использован для доступа любого рода пользователей в проекте , Должны ли мы добавить метод, подобный методу getList, для получения коллекции объектов? – user3663882
Когда вы создаете какой-либо API, вы, вероятно, будете иметь список, в котором вы хотите перечислить всех пользователей, поэтому список очень распространен. Для редактирования вы используете метод get (id) и т. Д. – Beri
Я использую этот шаблон (с дженериками), и мои классы DAO расширяют общий основной класс, поэтому дублирование кода почти нулевое. – Beri