Дао шаблон Java и спящий - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь создать хороший шаблон для своего приложения. Я хочу максимально сократить дублирующийся код и максимально использовать дженерики. Я создал шаблон для этого, но я хочу знать, есть ли что-то не так с кодом или есть ли другой лучший шаблон для этого.

Интерфейс BaseDao:

public interface BaseDao<T extends DTO> {

    List<T> fetchAll();

}

BaseImplementetion: все классы DAO будут расширять этот класс.

public abstract class BaseDaoImpl<T extends DTO> implements BaseDao {

    private Class<T> clazz;

    public BaseDaoImpl(Class<T> clazz) {
    this.clazz = clazz;

    }

    @Override
    public List<T> fetchAll() {

    List<T> entities = null;
    Session session = null;
    try {
        session = doOpenSession();
        Query<T> query = session.createQuery("from " + clazz.getName());
        entities = query.list();
    } catch (Exception e) {
        throw e;
    } finally {
        session.close();
    }
    return entities;
    }

Интерфейс UserDao:

public interface UserDao extends BaseDao{
    User getUserByUsername(String username);
}

Реализация UserDao:

public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{

    public UserDaoImpl() {
    this(User.class);
    }
    private UserDaoImpl(Class<User> clazz) {
    super(clazz);
    }

    public User getUserByUsername(String name) {

    User user = null;
    try (Session session = HibernateUtils.getSessionFactory().openSession()) {
        String hql = "FROM User u WHERE u.username = :name";
        Query<User> query = session.createQuery(hql).setMaxResults(1);
        query.setParameter("name", name);
        user = query.uniqueResult();
    }
    return user;
    }
}

PS: Итак, я хочу создать все основные операции c (добавить, сохранить, обновить, getAll и c) в моем BaseDaoImpl и после этого все классы DAO наследовать класс.

Как вы думаете, этот подход может принести мне проблемы позже?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...