rek*_*nuc 5 java generics spring dao hibernate
我的Spring + Hibernate配置文件很小而且非常紧凑.我使用自动扫描来查找我的模型实体/ daos.
我不想在我的层次结构中为每个实体编写DAO + DAOImpl.
有些人可能有资格拥有自己的,如果他们与其他实体有复杂的关系,并且需要的不仅仅是基本的CRUD功能.但其余的......
有没有办法规避事实上的标准?
说,像通用DAO,ex:
http://www.ibm.com/developerworks/java/library/j-genericdao/index.html
然后我可以做类似的事情
GenericDao dao = appContext.getBean("genericDao");
dao.save(car);
dao.save(lease);
Run Code Online (Sandbox Code Playgroud)
这可能带注释吗?我不想在xml中配置任何东西.如果我不能在上面做,是否仍然可以有一个类似的GenericDaoImpl.java:
@Repository("carDao")
@Repository("leaseDao")
class GenericDaoImpl extends CustomHibernateDaoSupport implements GenericDao {
...
}
Run Code Online (Sandbox Code Playgroud)
然后
GenericDao dao = appContext.getBean("carDao");
dao.save(car);
dao = appContext.getBean("leaseDao"); //carDao is garbage coll.
dao.save(lease);
Run Code Online (Sandbox Code Playgroud)
这有用吗?
使用泛型,您可以尝试这样的事情:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
内容可能不同,但总体思路是适用的.
您应该能够使用控制器和服务类在控制器和服务类中自动装配DAO
@Autowired
private GenericDAO<Car> carDao;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2160 次 |
| 最近记录: |