【20150407】使用spring注入Hibernate的sessionFactory
Hibernate没有自己的配置文件,使用spring的applicationContext.xml进行配置
方法1:
applicationContext.xml不需要特别配置
在xxxAction里:
private SessionFactory sessionFactory;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
} 。。。。。。 Session session=sessionFactory.openSession();
String hql="from User u where u.userName=? and u.userPass=?";
Query query=session.createQuery(hql);
同样的代码在DAO中无法使用,报错session为空
方法2:
applicationContext中,
xxxDAO IMPL,
public class RightColumnDAOImpl extends SuperDaoSupport implements RightColumnDAO {
private static HibernateTemplate hibernateTemplate;public HibernateTemplate getHibernateTemplate() {return hibernateTemplate;}public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;} 。。。
。。。
List list = this.getHibernateTemplate().find(hql);
。。。
----------此方法需要每个xxxDAO IMPL类都 先声明HibernateTemplate,不如方法3更方便
方法3:
先同方法2配置applicationContext,public class SuperDaoSupport{
@Resource
private static HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
xxxDAO IMPL
public class RightColumnDAOImpl extends SuperDaoSupport implements RightColumnDAO {
。。。
List list = this.getHibernateTemplate().find(hql);
。。。
}
实现DAO类也可:
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query query = session.createQuery(hql);
List list = query.list();
或者:
Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();
此报错:
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
---------全部extends父类,无法 再继承其它类
?方法4:
其它都同方法3,xxxDAO IMPL中代码
Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query = session.createQuery(hql);
List list = query.list();
报错:
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
6、
getCurrentSession 与 openSession() 的区别
http://blog.csdn.net/loveyout/article/details/4193894
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭