我一直在想,Spring 里的 HibernateTemplate 已经做得很完善了,为什么我们的实现不也继承他呢?
我们的DAO也可以继承HibernateOperations接口,这样一来,我们是不是不用再重复写HibernateOperations接口里所有的方法了呢?
如果要扩展我们自己的方法可以写在Manager里,而Manager又可以继承我们的DAO,然后ManagerImpl可以再继承DAOImpl的。
这只是一个想法,也在实施中出错了。
一般的实现我们都会继承HibernateDaoSupport,然后再通过this.getHibernateTemplate()....
先不说那么多了,贴一下我的代码:
接口BaseDAO
public interface BaseDAO extends HibernateOperations {
}
实现BaseDAOImpl,并试图用HibernateDaoSupport里的方法在实现里注入sessionFactory
public class BaseDAOImpl extends HibernateTemplate implements BaseDAO {
/**
* Set the Hibernate SessionFactory to be used by this DAO.
* Will automatically create a HibernateTemplate for the given SessionFactory.
* @see #createHibernateTemplate
* @see #setHibernateTemplate
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.createHibernateTemplate(sessionFactory);
}
/**
* Create a HibernateTemplate for the given SessionFactory.
* Only invoked if populating the DAO with a SessionFactory reference!
* <p>Can be overridden in subclasses to provide a HibernateTemplate instance
* with different configuration, or a custom HibernateTemplate subclass.
* @param sessionFactory the Hibernate SessionFactory to create a HibernateTemplate for
* @return the new HibernateTemplate instance
* @see #setSessionFactory
*/
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
return new HibernateTemplate(sessionFactory);
}
/**
* Return the Hibernate SessionFactory used by this DAO.
*/
public SessionFactory getSessionFactory() {
return super.getSessionFactory();
}
}
接口BaseManager ,这里用来扩展我们需要的方法,如分页。
public interface BaseManager extends BaseDAO {
/**
* 通过持久化对象类型,和输入参数,开始记录和查询记录数,返回查询列表
* @param entityClass Class
* @param firstResult int
* @param maxResult int
* @return List
*/
public List findToPage(Class entityClass, int firstResult, int maxResult);
}
实现BaseManagerImpl ,这里注入BaseDAO
public class BaseManagerImpl extends BaseDAOImpl implements BaseManager {
private BaseDAO baseDAO ;
public BaseDAO getBaseDAO() {
return baseDAO;
}
public void setBaseDAO(BaseDAO baseDAO) {
this.baseDAO = baseDAO;
}
public List findToPage(Class entityClass, int firstResult, int maxResult) {
baseDAO......
}
}
我的代码就是这些,但是我在启动服务器时,告诉我注入sessionFactory注入错误,然后我又看了HibernateDaoSupport里面注入sessionFactory,接着拷贝,然后提示sessionFactory和baseDAO无法注入。
javaeye里的各位大哥们,我想实现这样的想法,需要怎么做呢?
这样的想法是否是对的,是不是DAO太大了?
分享到:
相关推荐
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
标题中的“系统配置文件 dao350和dao360”指的是Microsoft Office系统中的数据库访问对象(DAO,Database Access Objects)版本350和360。DAO是Microsoft Jet数据库引擎的一部分,主要用于与Access数据库或其他Jet...
从DAO过渡到ADO(ActiveX Data Objects)是后来的一个趋势,因为ADO提供了更多的功能和更广泛的数据库支持。 通过DAO3.6中文参考,学习者可以深入了解如何使用DAO进行数据库编程,掌握Access 97中数据库操作的基本...
本文将详细介绍Idea的Mybatis插件及其如何帮助我们从DAO层直接进入Mapper文件,从而实现更便捷的Mybatis相关DAO到Mapper的开发。 MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis...
在SSH项目中,可以创建一个基类`HibernateDAO`,包含如`save()`, `update()`, `delete()`, `getById()`等基本操作,然后其他特定业务的DAO继承自这个基类,以实现通用性和重用性。 3. **设计模式的应用**:通用DAO...
Java中的DAO(Data Access Object)模式是一种常用的软件设计模式,用于封装对数据库的操作,使得业务逻辑层与数据访问层解耦。在这个实例中,我们将深入探讨DAO模式的原理、实现方式以及它在实际项目中的作用。 ...
3. 安装过程中,系统会自动检测并修复DAO相关组件的问题,或者将缺失的组件安装到系统中。 4. 完成安装后,可能需要重启计算机以使更改生效。 5. 验证DAO是否正常工作,可以通过编写简单的VBA代码(Visual Basic for...
**JDBC中的DAO模式** DAO(Data Access Object)模式是一种常用的设计模式,它在Java编程中用于处理数据库交互。DAO的主要目标是将业务逻辑与数据访问层进行解耦,提高代码的可重用性和可测试性。在JDBC中,DAO模式...
DAO3.5是DAO的一个特定版本,它在Windows 95和Windows 98时代非常流行,但在后来的系统中逐渐被ADO(ActiveX Data Objects)取代。 DAO3.5数据库引擎是MCGS(Made in China Generating System)组态软件进行数据...
DAO 3.5是DAO的一个版本,它在Windows操作系统中广泛使用,尤其是在16位和32位应用程序中。这个压缩包文件"dao3.5数据库+引擎.zip"包含了两个重要的组件:DAO 3.5数据库安装程序和DAO 3.5数据库引擎文件。 1. DAO ...
安装完成后,DAO库将被添加到开发环境中,供编写数据库驱动的应用程序时使用。 请注意,随着技术的发展,DAO已被ADO(ActiveX Data Objects)所取代,后者提供了更强大的功能和对更多数据库系统的支持。然而,在...
- **易维护**:修改数据访问逻辑时,只需改动DAO实现类,不会影响到业务层代码。 - **事务管理**:DAO层方便进行事务控制,确保数据的一致性。 **4. DAO的实现方式** - **JDBC DAO**:直接使用Java的JDBC API实现,...
当你的计算机上缺失这个组件时,依赖DAO接口来访问Jet数据库的应用程序可能会出现问题,例如描述中提到的"无法对DAO/Jet db引擎进行初始化"的错误。这个问题通常意味着系统缺少必要的DLL文件或者注册表项没有正确...
**DAO(Data Access Object)模式**是软件设计模式中用于处理数据访问的一种方式,它将业务逻辑与数据访问层分离,提高代码的可重用性和可维护性。在Java领域,尤其是在企业级应用开发中,DAO模式常与ORM(Object-...
在Java Web开发中,DAO(Data Access Object)模式是一种常用的设计模式,用于封装对数据库的操作,使得业务逻辑层与数据访问层分离,提高代码的可重用性和可维护性。本资源“Hibernate_通用DAO模式”提供了一种适用...
这样,DAO 对象中继承自 HibernateDaoSupport 的属性并没有被正确地初始化,导致 getHibernateTemplate() 方法返回空值。 解决这个问题的方法是,从 Spring 配置文件中获取 ApplicationContext 对象,然后从中获取 ...
标题“使用junit测试ssh中的dao”涉及到的是Java开发中的单元测试技术,特别是针对SSH(Struts2、Spring、Hibernate)框架中的数据访问对象(DAO)进行测试。SSH是Java Web开发中常用的三大开源框架,它们协同工作以...
DAO35资源比是数据库访问对象(DAO)与磁盘空间占用比例的一个术语,主要出现在早期的Microsoft Access数据库系统中。DAO(Database Access Objects)是Microsoft Jet数据库引擎的一部分,用于在Visual Basic等编程...
DAO(Data Access Object)设计模式是一种在软件工程中常见的用于处理数据访问的模式,它将业务逻辑和数据访问逻辑分离,使得系统更加模块化,提高了代码的可复用性和可测试性。在这个“DAO设计模式(工厂+代理)”...