编程资料集中营
 | 网站首页 | 文章中心 | 编程资料2 | 软件下载 | BT下载 | 八卦星闻 | 音乐在线 | 在线游戏 | 免费电影 | 进入问吧 | 
Hibernate 上手篇,发布者:发布时间:2007-01-12第一章在Tomcat中快速上手1.1.开始Hibernate之旅这份教程描述如何在ApacheTomcatservlet容器中为web应用程序配置Hibernate3.0(我们使用Tomcat4.1版本,与5.0版本差别很小)。Hibernate在大多数主流J2EE应用服务器的运行环境中都可以工作良好,甚至也可以在独立Java应用程序中使用。在本教程中使用的示,
您现在的位置: 编程资料,学习资料,c,c++,vc,vc++,java,jsp,j2ee,j2me,asp,php >> 文章中心 >> JAVA 专区 >> Hibernate 技术 >> 文章正文
【字体:
Hibernate 上手篇   进入问吧

本站地址:http://www.bajiao123.com

作者:本站    文章来源:网络    点击数:    更新时间:2007-1-31    

Hibernate 上手篇

            s = sessionFactory.openSession();

            session.set(s);

        }

        return s;

    }

 

    public static void closeSession() {

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

        if (s != null)

            s.close();

        session.set(null);

    }

}

这个类不但在它的静态初始器中使用了SessionFactory,还使用了一个ThreadLocal变量来保存Session做为当前工作线程。在你使用这个辅助类之前,请确保你理解了thread-local变量这个Java概念。你可以在CaveatEmptor(http://caveatemptor.hibernate.org/)上找到一个更加复杂和强大的 HibernateUtil。

 

SessionFactory是安全线程,可以由很多线程并发访问并获取到Sessions。单个Session不是安全线程对象,它只代表与数据库之间的一次操作。Session通过SessionFactory获得并在所有的工作完成后关闭。在你servlet的process()中可以象是这么写的(省略了异常情况处理):

 

Session session = HibernateUtil.currentSession();

 

Transaction tx= session.beginTransaction();

 

Cat princess = new Cat();

princess.setName("Princess");

princess.setSex('F');

princess.setWeight(7.4f);

 

session.save(princess);

tx.commit();

 

HibernateUtil.closeSession();

在一个Session中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。我们使用Hibernate的Transaction API来从底层的事务策略中(本例中是JDBC事务)脱身出来。这样,我们就不需要更改任何源代码,就可以把我们的程序部署到一个由容器管理事务的环境中去(使用JTA)。

 

这样你就可以随心所欲的多次调用HibernateUtil.currentSession();,你每次都会得到同一个当前线程的Session。不管是在你的servlet代码中,或者在servlet filter中还是在HTTP结果返回之前,你都必须确保这个Session在你的数据库访问工作完成后关闭。这样做还有一个好处就是可以容易的使用延迟装载(lazy initialization):Session在渲染view层的时候仍然打开着的,所以你在遍历当前对象图的时候可以装载所需的对象。

 

Hibernate有不同的方法用来从数据库中取回对象。最灵活的方式就是使用Hibernate查询语言(HQL),这是一种容易学习的语言,是对SQL的面向对象的强大扩展。

 

Transaction tx= session.beginTransaction();

 

Query query = session.createQuery("select c from Cat as c where c.sex = :sex");

query.setCharacter("sex", 'F');

for (Iterator it = query.iterate(); it.hasNext();) {

    Cat cat = (Cat) it.next();

    out.println("Female Cat: " + cat.getName() );

}

 

tx.commit();

Hibernate也提供一种面向对象的按条件查询API,可以执行简洁安全类型的查询。当然,Hibernate在所有与数据库的交互中都使用PrepatedStatement和参数绑定。你也可以使用Hibernate的直接SQL查询特性,或者在特殊情况下从Session获取一个原始的JDBC连接。

 

1.5. 结语

在这个短小的教程中,我们对Hib

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页

   

进入问吧

本站地址:http://www.bajiao123.com

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 编程资料集中营