Я совсем не согласен с этой реализацией.
Во-первых, DAO следует предоставлять информацию о подключении службам, которые владеют единицами работы и транзакций.
Во-вторых, я не вижу интерфейса.
В-третьих, я не вижу объекты модели или домена.
В-четвертых, подготовленные заявления должны быть только частью внутренней реализации. Если они выходят из вашего DAO, вы делаете это неправильно.
В-пятых, передача подготовленного утверждения из объекта делает ответственность за его закрытие и очистку гораздо менее ясной. Ваш DAO умрет в результате утечки ресурса.
Вот интерфейс для общего DAO. Вы заметите, что это все операции CRUD, без упоминания о соединениях или каких-либо интерфейсах из пакета java.sql:
package persistence;
import java.io.Serializable;
import java.util.List;
public interface GenericDao<T, K extends Serializable>
{
T find(K id);
List<T> find();
List<T> find(T example);
List<T> find(String queryName, String [] paramNames, Object [] bindValues);
K save(T instance);
void update(T instance);
void delete(T instance);
}
Вы можете пройти долгий путь с этим. Это лучшая абстракция. T
- это тип вашего бизнес-объекта, а K
- это первичный ключ.