问题描述
我的BaseDaoHibernateextendsHibernateDaoSupportimplementsApplicationContextAware可是子类UsersDAO调用getHibernateTemplate()方法总返回空;getJdbcTemplate也返回空/***ClassBaseDaoHibernate**@authorlgsun*@version$Revision:1.0.0,$Date:2011-4-6*/packagecom.lgsun.common;importjavax.sql.DataSource;importorg.apache.tomcat.dbcp.dbcp.BasicDataSource;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.context.ApplicationContext;importorg.springframework.context.ApplicationContextAware;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;publicclassBaseDaoHibernateextendsHibernateDaoSupportimplementsApplicationContextAware{protectedfinalLoglog=LogFactory.getLog(getClass());privatestaticApplicationContextapplicationContext=null;publicvoidsetApplicationContext(ApplicationContextapplicationContext){if(BaseDaoHibernate.applicationContext==null){BaseDaoHibernate.applicationContext=applicationContext;}}publicstaticJdbcTemplategetJdbcTemplate(){DataSourcedataSource=(BasicDataSource)BaseDaoHibernate.applicationContext.getBean("springappDataSource");JdbcTemplatejdbcTemplate=newJdbcTemplate(dataSource);returnjdbcTemplate;}}
/***ClassUsersDAO**@authorlgsun*@version$Revision:1.0.0,$Date:2011-3-31*/packagecom.lgsun.dao;importjava.util.List;importorg.hibernate.HibernateException;importorg.hibernate.Query;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.springframework.orm.hibernate3.HibernateTemplate;importcom.lgsun.beans.User;importcom.lgsun.common.BaseDaoHibernate;@SuppressWarnings("all")publicclassUsersDAOextendsBaseDaoHibernate{publicListgetUsersByJDBC()throwsHibernateException{Stringsql="select*fromusers";System.out.println(getJdbcTemplate());Listtemp=getJdbcTemplate().queryForList(sql);returntemp;}publicListgetUsersByHibernate(){SessionFactorysessionFactory=this.getSessionFactory();Stringsql="fromUsers";HibernateTemplatehib=getHibernateTemplate();if(hib==null){System.out.println("HibernateTemplateisnull");}Listtemp=getHibernateTemplate().find(sql);returntemp;}}
配置文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"><beans><!--数据库连接池--><beanid="springappDataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="oracle.jdbc.driver.OracleDriver"/><propertyname="url"value="jdbc:oracle:thin:@localhost:1521:ORCL"/><propertyname="username"value="test"/><propertyname="password"value="test"/></bean><beanid="appSessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"ref="springappDataSource"/><propertyname="mappingResources"><list><value>com/lgsun/beans/Users.hbm.xml</value></list></property><propertyname="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop><!--<propkey="hibernate.show_sql">true</prop><propkey="hibernate.jdbc.use_streams_for_binary">true</prop>--></props></property></bean><beanid="usersDAO"class="com.lgsun.dao.UsersDAO"><propertyname="sessionFactory"><reflocal="appSessionFactory"/></property></bean><!--action注入--><beanid="logonAction"class="com.lgsun.action.LogonAction"></bean></beans>
附Oracle数据库建表sql及测试数据DROPTABLEUsers;CREATETABLEUsers(IDVARCHAR(20),usernameVARCHAR(20),PASSWORDVARCHAR(30),emailVARCHAR(30));INSERTINTOUsersVALUES('0001','admin','admin','admin@oo.xx');SELECT*FROMusers;
工程源代码下载:
解决方案
解决方案二:
试下将:<beanid="appSessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"ref="springappDataSource"/><propertyname="mappingResources"><list><value>com/lgsun/beans/Users.hbm.xml</value></list></property><propertyname="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop><!--<propkey="hibernate.show_sql">true</prop><propkey="hibernate.jdbc.use_streams_for_binary">true</prop>--></props></property></bean>appSessionFactory改成sessionFactory,其他的类似修改看看~还有web.xml要加载application-Context.xml文件
解决方案三:
引用1楼hpjianhua的回复:
试下将:<beanid="appSessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"ref="springappDataSource"/><propertyna……
web.xml要加载application-Context.xml文件,这个我确定我做到了,否则会抛出无法找到xml的异常的,至于appSessionFactory改成sessionFactory,我感觉没有必要吧,我上面的bean定义什么名字,下面就用什么名字引用呗,有啥关系吗?
解决方案四:
自己顶顶吧,为啥就没人帮忙看看呢