有一段时间我一直在服务类中直接使用以下内容:
@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
}
作为替代方案,我可以构建一个由PersonDao扩展的AbstractDao。这些类将使用EntityManager
public abstract class AbstractDao<PK extends Serializable, T> {
private final Class<T> persistentClass;
@SuppressWarnings("unchecked")
public AbstractDao(){
this.persistentClass =(Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];
}
@PersistenceContext
EntityManager entityManager;
public T findByKey(PK key) {
return entityManager.find(persistentClass, key);
}
public List<T> findAll() {
return entityManager.createQuery( "from " + persistentClass.getName()).getResultList();
}
public void save( T entity ){
entityManager.persist( entity );
}
这些方法之间是否有任何功能差异 - 除了后面的更多代码?什么会让我选择一个而不是另一个?
答案 0 :(得分:1)
本案例中的Spring数据将涵盖第二个示例中的内容。其他框架将有类似的方法隐藏EntityManager并为您提供开箱即用的API。
两种方法之间没有区别(仅考虑结果)甚至你的注释除了后面的更多代码?是不正确的,因为我确定任何框架都有吨它背后的代码行来支持操作。 :)