我的应用程序的dao层需要一个hibernate引用。
所以所有的dao bean都需要它。
我配置每个,如果有一种方法可以在春天为一组bean注入一个bean,我会徘徊吗?喜欢切入点表达。
答案 0 :(得分:1)
有关问题的Hibernate特定部分,请参阅“Don't repeat the DAO!”。该设计与8年前一样有效。它的要点是不重复你的DAO逻辑。而是创建一个包含重复CRUD和会话管理逻辑的通用DAO父类。它通常需要两个类型参数,一个用于它管理的实体类型,另一个用于实体@Id
的类型。
这是文章中的粘贴。这是界面
public interface GenericDao <T, PK extends Serializable> {
/** Persist the newInstance object into database */
PK create(T newInstance);
/** Retrieve an object that was previously persisted to the database using
* the indicated id as primary key
*/
T read(PK id);
/** Save changes made to a persistent object. */
void update(T transientObject);
/** Remove an object from persistent storage in the database */
void delete(T persistentObject);
}
这是父类
public class GenericDaoHibernateImpl <T, PK extends Serializable>
implements GenericDao<T, PK>, FinderExecutor {
private Class<T> type;
public GenericDaoHibernateImpl(Class<T> type) {
this.type = type;
}
public PK create(T o) {
return (PK) getSession().save(o);
}
public T read(PK id) {
return (T) getSession().get(type, id);
}
public void update(T o) {
getSession().update(o);
}
public void delete(T o) {
getSession().delete(o);
}
// Not showing implementations of getSession() and setSessionFactory()
}
或者更好的是,只需使用Spring Data JPA。
答案 1 :(得分:1)
为此,您可以将bean(Hibernate引用)的自动装配用于dao层。您可以使用自动装配byName,以便一个名称适用于所有。这是引入自动装配的灵魂目的,这样您就不必在每个bean中反复注入它们。