ssh2怎么样在dao层获得session
--------------------编程问答--------------------Map session = ActionContext.getContext().getSession();--------------------编程问答--------------------
/**当你需要使用的Session 方法没有在HibernateTemplate 中提供时,可以通过下面提供的基于回调的方案来实现,--------------------编程问答-------------------- http://blog.csdn.net/zmhinzaghi/article/details/7091629 --------------------编程问答-------------------- 我是想获得hibernate中的session,而不是页面的。 --------------------编程问答-------------------- sessionFactory.getCurrentSession();
* 程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,
* 解决了Spring封装Hibernate后灵活不足的缺陷, 通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,
* 方法doInHibernate就是Spring执行的持久化操作,封装了对异常的处理和对事务的一些处理,这里比find()方法更方便设置每页显示的数量
* **/
你别告诉我你连sessionFactory都不知道 --------------------编程问答-------------------- 想看看你的dao层怎么写的?如果你继承了HibernateDaoSupport,父类是有提供方法获取session的,如果没有,就是楼上的方法,原理都是一样的,从sessionFactory中去获取。 --------------------编程问答-------------------- sessionFactory.getCurrentSession()
如果楼主的代码觉得麻烦,那说明你的spring,hibernate结合的不好.
配置文件,没有把spring很好的配置进去;或者没有把sessionFactory注入进需要的地方 --------------------编程问答-------------------- 简单查询
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) {--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 从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
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public List<Master> getAllMaster(){
String hql = "from Master";
List<Master> list = this.hibernateTemplate.find(hql);
return list;
}
--------------------编程问答-------------------- 可以用SessionFactory.getCurrentSession()获取当前Session,如果是Hibernate4的话,因为去除了HIbernateTemplate这个东西,就可以这样获取当前的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);
}
}
--------------------编程问答--------------------
+1,这么引用!
补充:Java , Java EE