当前位置:编程学习 > JAVA >>

ssh2怎么样在dao层获得session

--------------------编程问答--------------------
Map session = ActionContext.getContext().getSession();
--------------------编程问答--------------------
/**当你需要使用的Session 方法没有在HibernateTemplate 中提供时,可以通过下面提供的基于回调的方案来实现,
 * 程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,
 * 解决了Spring封装Hibernate后灵活不足的缺陷, 通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,
 * 方法doInHibernate就是Spring执行的持久化操作,封装了对异常的处理和对事务的一些处理,这里比find()方法更方便设置每页显示的数量
 * **/
--------------------编程问答-------------------- http://blog.csdn.net/zmhinzaghi/article/details/7091629 --------------------编程问答--------------------
引用 1 楼 IT0918liu 的回复:
Java code1Map session = ActionContext.getContext().getSession();
我是想获得hibernate中的session,而不是页面的。 --------------------编程问答-------------------- sessionFactory.getCurrentSession();
你别告诉我你连sessionFactory都不知道 --------------------编程问答-------------------- 想看看你的dao层怎么写的?如果你继承了HibernateDaoSupport,父类是有提供方法获取session的,如果没有,就是楼上的方法,原理都是一样的,从sessionFactory中去获取。 --------------------编程问答-------------------- sessionFactory.getCurrentSession()

如果楼主的代码觉得麻烦,那说明你的spring,hibernate结合的不好.

配置文件,没有把spring很好的配置进去;或者没有把sessionFactory注入进需要的地方 --------------------编程问答-------------------- 简单查询
getHibernateTemplate().find(hql);
就可以了...

callback是用来分页的 --------------------编程问答--------------------
引用 8 楼 wctor 的回复:
简单查询
getHibernateTemplate().find(hql);
就可以了...

callback是用来分页的

顶! --------------------编程问答--------------------


public List findBySQL(final String sql,final Object[] values) {

return super.getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery query=session.createSQLQuery(sql);
if(values!=null&&values.length>0)
{
for(int i=0;i<values.length;i++)
{
query.setParameter(i, values[i]);
}
}
return query.list();
}});
}
--------------------编程问答--------------------
	public void setHibernateTemplate(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public List<Master> getAllMaster(){
String hql = "from Master";
List<Master> list = this.hibernateTemplate.find(hql);
return list;
}
--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 从action层传过去也可以吧 --------------------编程问答-------------------- hibernateTemplate不是提供的有获得hibernateDao的方法吗,然后再一层一层的找get/get,具体忘了,你看一下apI文档 --------------------编程问答-------------------- hibernate session 的工厂类 调用 --------------------编程问答-------------------- 楼主用的是3.5以下的版本可以通过hibernateDao方法一层一层调用,如果是3.5版本以上的话只能调用工厂方法! --------------------编程问答-------------------- sessionFactory.getCurrentSession() --------------------编程问答-------------------- 可以直接由spring注入。 --------------------编程问答-------------------- --------------------编程问答-------------------- 你的DAO类继承HibernateSupport类,然后再application.xml里面配置sessionFactory,将sessionFactory注入到DAO类中(继承了HibernateSupport类,HibernateSupport类有sessionFactory变量),然后再DAO中就可以用this.getHibernateTemple()获得session


public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {

public void saveUser(User user) {
this.getHibernateTemplate().save(user);
}

public void removeUser(User user) {
this.getHibernateTemplate().delete(user);

}

public User findUserById(Integer id) {
User user = (User)this.getHibernateTemplate().get(User.class,id);
return user;
}

@SuppressWarnings("unchecked")
public List<User> findAllUsers() {
String hql = "from User user order by user.id desc" ;
return (List<User>)this.getHibernateTemplate().find(hql);
}

public void updateUser(User user) {
this.getHibernateTemplate().update(user);

}

}



--------------------编程问答-------------------- 可以用SessionFactory.getCurrentSession()获取当前Session,如果是Hibernate4的话,因为去除了HIbernateTemplate这个东西,就可以这样获取当前的Session.
--------------------编程问答--------------------
引用 10 楼 chenshuang_com 的回复:
Java code?1234567891011121314151617public List findBySQL(final String sql,final Object[] values) {                 return super.getHibernateTemplate().executeFind(new HibernateCallback(){……

+1,这么引用!
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,