实现的是一个用户输入用户名、密码,到数据库中验证有无该用户的功能。程序报错:
java.lang.IllegalArgumentException: No SessionFactory specified:
…
org.snailheart.dao.BaseDAO.openSession(这句出错)
…
简单说一下程序:
1.创建了一个BaseDAO.java,继承了HibernateDaoSupport,代码如下:
package test.dao;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import org.springframework.orm.hibernate.SessionFactoryUtils;
import net.sf.hibernate.Session;
import net.sf.hibernate.Query;
import net.sf.hibernate.HibernateException;
public class BaseDAO extends HibernateDaoSupport {
public Session openSession() {
return SessionFactoryUtils.getSession(getSessionFactory(), false);
}
public Query getQuery(String query) throws HibernateException{
Session session = this.openSession();
return session.createQuery(query);
}
}
2.创建UserDAOHBImpl.java,继承BaseDAO。在其中实现了访问DB的具体
操作,代码如下,为了便于查看,只保留了一个方法:
package test.dao.hibernate;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import net.sf.hibernate.Session;
import net.sf.hibernate.Query;
import net.sf.hibernate.HibernateException;
import test.dao.BaseDAO;
import test.dao.UserDAO;
import test.domain.User;
import test.dto.UserDTO;
public class UserDAOHBImpl extends BaseDAO implements UserDAO {
public User getUser(UserDTO userDTO) {
String userName = userDTO.getUserName();
String pwd = userDTO.getPassword();
String queryStr = "select user from User where User.userName
=:name and User.passwd =:pwd";
Query query = this.getQuery(queryStr);
query.setString("name", userName);
query.setString("pwd", pwd);
List userList = query.list();
if(userList != null) {
user = (User)userList.get(0);
}else {
user = null;
}
}
}
3.在applicationContext.xml中,做相应地配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="oracleDS"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:oradb</value>
</property>
<property name="username">
<value>test</value>
</property>
<property name="password">
<value>test</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="oracleDS"/>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/org/snailheart/domain/hbm</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
net.sf.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="userDAO"
class="org.snailheart.dao.hibernate30.UserDAOHBImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
</beans>
4.在struts的action类中,调用UserDAOHBImpl的方法
getUser(UserDTO userDTO),查询是否存在当前用户,程序报错:
java.lang.IllegalArgumentException: No SessionFactory specified:
…
org.snailheart.dao.BaseDAO.openSession
…