我的 Spring+Hibernate 配置文件很小而且非常紧凑。我使用自动扫描来查找我的模型实体/DAOS。
我不想为层次结构中的每个实体编写 DAO + DAOImpl。
有些可能有资格拥有自己的,例如,如果他们与其他实体有复杂的关系并且需要的不仅仅是基本的 CRUD 功能。但对于其余的...
有什么办法可以规避事实上的标准吗?
比如说,类似于通用 DAO,例如:
http://www.ibm.com/developerworks/java/library/j-genericdao/index.html http://www.ibm.com/developerworks/java/library/j-genericdao/index.html
然后我可以做类似的事情
GenericDao dao = appContext.getBean("genericDao");
dao.save(car);
dao.save(lease);
这可以通过注释实现吗?我不想在 xml 中配置任何内容。如果我不能执行上述操作,是否仍然可以拥有一个 GenericDaoImpl.java ,其中包含以下内容:
@Repository("carDao")
@Repository("leaseDao")
class GenericDaoImpl extends CustomHibernateDaoSupport implements GenericDao {
...
}
and then
GenericDao dao = appContext.getBean("carDao");
dao.save(car);
dao = appContext.getBean("leaseDao"); //carDao is garbage coll.
dao.save(lease);
这实用吗?
使用泛型,你可以尝试这样的事情:
@Repository
@Transactional
public class GenericDAOImpl<T> implements GenericDAO<T> {
@Autowired
private SessionFactory factory;
public void persist(T entity) {
Session session = factory.getCurrentSession();
session.persist(entity);
}
@SuppressWarnings("unchecked")
public T merge(T entity) {
Session session = factory.getCurrentSession();
return (T) session.merge(entity);
}
public void saveOrUpdate(T entity) {
Session session = factory.getCurrentSession();
session.saveOrUpdate(entity);
}
public void delete(T entity) {
Session session = factory.getCurrentSession();
session.delete(entity);
}
}
内容可能不同,但大体思路是适用的。
然后,您应该能够使用以下命令在控制器和服务类中自动装配 DAO
@Autowired
private GenericDAO<Car> carDao;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)