Single DAO & generic CRUD methods (JPA/Hibernate + Spring)

前端 未结 5 460
你的背包
你的背包 2020-11-28 18:26

Following my previous question, DAO and Service layers (JPA/Hibernate + Spring), I decided to use just a single DAO for my data layer (at least at the beginning) in an appli

5条回答
  •  醉酒成梦
    2020-11-28 18:58

    Here is an example interface:

    public interface GenericDao {
        T create(T t);
        T read(PK id);
        T update(T t);
        void delete(T t);
    }
    

    And an implementation:

    public class GenericDaoJpaImpl 
        implements GenericDao {
    
        protected Class entityClass;
    
        @PersistenceContext
        protected EntityManager entityManager;
    
        public GenericDaoJpaImpl() {
            ParameterizedType genericSuperclass = (ParameterizedType) getClass()
                 .getGenericSuperclass();
            this.entityClass = (Class) genericSuperclass
                 .getActualTypeArguments()[0];
        }
    
        @Override
        public T create(T t) {
            this.entityManager.persist(t);
            return t;
        }
    
        @Override
        public T read(PK id) {
            return this.entityManager.find(entityClass, id);
        }
    
        @Override
        public T update(T t) {
            return this.entityManager.merge(t);
        }
    
        @Override
        public void delete(T t) {
            t = this.entityManager.merge(t);
            this.entityManager.remove(t);
        }
    }
    

提交回复
热议问题