gpt4 book ai didi

java - 使用注解在 Spring Hibernate 中编写更少的 DAO

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:15 25 4
gpt4 key购买 nike

我的 Spring+Hibernate 配置文件很小而且非常紧凑。我使用自动扫描来查找我的模型实体/daos。

我不想为层次结构中的每个实体都编写 DAO + DAOImpl。

有些人可能有资格拥有自己的,例如,如果他们与其他实体有复杂的关系并且需要的不仅仅是基本的 CRUD 功能。但对于其余的...

有没有办法规避事实标准?

比如说,类似于通用 DAO 的东西,例如:

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 {
...
}

然后

  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);
}

}

内容可能不同,但总体思路是适用的。

然后您应该能够通过使用在您的 Controller 和服务类中 Autowiring DAO

@Autowired
private GenericDAO<Car> carDao;

关于java - 使用注解在 Spring Hibernate 中编写更少的 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8233734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com