今天老师让做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对象。
老师就笑了,“闹笑话了这是,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对象。