闹笑话了。。

今天老师让做Hibernate的Criteria的查询,也让我们顺便在熟悉下SSH框架,我就翻倒出来我一直准备的一个框架,开始在上面上敲ing,期间老师也给我们发了一个网址(也就是JE上的),让我们看看,我就结合着文章开始了做了起来,建起了数据库,生成了POJO,紧接着测试了DAO,但是老师报空指针异常,开了会,又测了测还是空,就让老师帮我调了一下。老师过来点开了错误行数,一看 Session sess = null; Criteria crit = sess.createCriteria(Cat.class); (JS写多了把,怎么会出这个笑话,笨!)
老师就笑了,“闹笑话了这是,session是空怎么取值”,当时就楞了,以为直接拿过来session就能用呢,结果必须得到session才行,也就是Session sess = this.getSession();或者用getHibernateTemplate()模板去得到session 。 想想真惭愧啊,真是闹笑话了,基础实在太烂了,再不补就烂泥收不起来了。我希望我把我每次犯下的错误都写到博文上,铭记自己的过失,并攒下来我的失败经验,把他们变成宝贵的成功果实,一点一滴。
我也查了下hibernate session 的所有创建方式 特此提醒自己:

开发J2EE项目时会常常考虑到Session对象创建的问题,一般有以下几种使用方法: 
      1、类的某个方法中创建一个对象。

      2、创建一个工具类,负责创建Session对象,要获取Session对象时调用方法获取即可。
         a、工具类中是采用单例模式。

         b、static{}中加入SessionFactory对象,表示整个应用程序只创建一次。

         c、提供一个getSesssion()方法,使用户获取对象。

      3、在应用程序Tomcat服务器启动时就创建对象。

       以下代码使用第三种方式创建Session对象。

二、在Tomcat启动的时,利用Filter进行Session的创建及关闭:

    1、创建一个Filter文件:HibernateFilter.java
public class HibernateFilter implements Filter {

private static ThreadLocal threadLocal=new ThreadLocal();

private static SessionFactory sessionFactory=null;

public void destroy() {

}

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {

try{

getSession();

}finally{

Session session=(Session)threadLocal.get();

if(session!=null){

if(session.isOpen()){

session.close();

}

threadLocal.remove();

}

}

}

public void init(FilterConfig arg0) throws ServletException {

Configuration cfg=new Configuration().configure();

sessionFactory=cfg.buildSessionFactory();

}

public  static Session getSession(){

Session session=(Session)threadLocal.get();

if(session==null){

session=sessionFactory.getCurrentSession();

}

return session;

}

}

   优点:Session的打开和关闭统一由Filter进行管理。

2、配置文件中配置Filter:(web.xml)
<filter>

.........

</filter>

3、测试

   在程序中调用HibernateFilter类获取一个Session对象。

你可能感兴趣的:(tomcat,Hibernate,框架,ssh,笑话)