Opensessioninview 模式: 执行原理: •一进来就打开session ,进入servlet执行进入dao中获取数据。Dao 中的session对应当前的session ,所以要获取当前的session ,如 : Session session = sessionFactory.getCurrentSession(); •获取数据之后来到filter中执行china.doFilter(request,response)语句。 •来到jsp页面显示数据之后返回拦截器filter关闭session doFilter()方法的具体实现: Public void doFilter(HttpServletRequest request,HtppServletResponse response, …) { Session session = null; Transaction tx = null; Session = sessionFactory.getCurrentSession (); tx = session.beginTransation(); Chian.doFilter(request,response); Tx.commit(); Session.close(); } 使用过滤器方式: 好处: 在不同页面中需要或不需要数据,可以通过延迟关闭session来获取页面中所需要的数据。 缺点:导致session的开启和关闭的时间太长,占用线程,如果网络的并发量很大,等待线程的session会出现列队现象。 线程thread: 线程解决事物问题,两个SQL语句确定 打开session的两种方式: •Session session = sessionFactory.OpenSession(); •设置Hibernate.cfg.xml文件属性方式: <property name = “hibernate.current_session_context_class“ >thread</property> Hibernate 中的HQL查询 Hibernate 中的查询方式分为两种: •HQL查询 面向对象的查询方式,Can not transit Object . Attribute come scratch •对象查询(Criteria)