Spring Boot Generic DAO - PullRequest
       7

Spring Boot Generic DAO

0 голосов
/ 12 мая 2018

Я реализую общий слой дао в приложении для спокойных веб-сервисов, построенном с использованием Spring Boot и Jersey.У меня есть несколько идентичных контроллеров ресурсов, поэтому, чтобы избежать дублирования одних и тех же методов, я хочу создать контроллеры GenericControllers или GenericResources.У меня возникла проблема при вводе genericDao в эти контроллеры.Для этих общих ресурсов мне не нужны специальные услуги.

public interface IGenericDAO<T extends Serializable> {
    T findOne(final Integer id);

    List<T> findAll();

    T create(final T entity);

    void update(final T entity);

    void delete(final T entity);

    void deleteById(final Integer id);
}

public abstract class AbstractGenericDAO<T extends Serializable> implements IGenericDAO<T> {

    private final Class<T> clazz;

    @SuppressWarnings("unchecked")
    public AbstractGenericDAO() {
        this.clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

    /**
     * getSession() from EntityManager which is already configured in spring-boot-starter-data-jpa. 
     * We inject EntityManager instead of SessionFactory
     */
    @Autowired
    private EntityManager entityManager;

    protected Session getCurrentSession() {
        return this.entityManager.unwrap(Session.class);
    }

    @Override
    public T findOne(Integer id) {
        // TODO Auto-generated method stub
        return (T) getCurrentSession().get(this.clazz, id);
    }

    @Override
    public List<T> findAll() {
        // TODO Auto-generated method stub
        CriteriaQuery<T> cq = getCurrentSession().getCriteriaBuilder().createQuery(this.clazz);
        cq.from(this.clazz);
        return getCurrentSession().createQuery(cq).getResultList();
    }

    @SuppressWarnings("unchecked")
    @Override
    public T create(T entity) {
        // TODO Auto-generated method stub
        return ((T) getCurrentSession().save(entity));
    }

    @Override
    public void update(T entity) {
        // TODO Auto-generated method stub
        getCurrentSession().saveOrUpdate(entity);
    }

    @Override
    public void delete(T entity) {
        // TODO Auto-generated method stub
        getCurrentSession().delete(entity);
    }

    @Override
    public void deleteById(Integer id) {
        // TODO Auto-generated method stub
        T entity = this.findOne(id);
        this.delete(entity);
    }
}

И вот моя проблема.Я хочу ресурсы дженериков здесь:

public class GenericResource<T extends Serializable> extends AbstractGenericDAO<T> {


    /*@GET
    @Secured({"ROLE_ADMIN"})
    public Response list() {
        return Response.ok().entity(dao.findAll()).build();
    }*/
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...