快速业务通道

混合Eclipse、WTP、Struts和Hibernate - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
etFirstName()而不是预读全部客户数据时,才会从数据库读取数据。当读取大量数据,或希望推迟进行开销昂贵的数据库操作时,这样做或许会带来好处。在我们的例子中,我们只读取少量客户信息,不会在以后进行其他操作或数据库访问。例如,如果在数据库会话关闭后,我们仍然试图调用lazy方法,Hibernate就会抛出异常。

配置完Hibernate之后,我们必须对CommandExecutor类稍作修改以使用该框架,并删除硬编码的SQL代码。该类被作为单元素,用于存储数据源并获得数据库连接。首先,我们添加实例变量以存储Hibernate会话工厂。Hibernate会话工厂类似于数据源,不同的是,我们从Hibernate会话工厂获得的不是数据库连接,而是Hibernate数据库会话。实例变量看上去类似于:

private SessionFactory sessionFactory = null;

接下来,为实例变量创建一个访问方法,请参见清单9。这样做可以保存封装的对象状态,同时允许使用延迟初始化技术(只在需要时访问数据)。

清单9:新的会话工厂访问方法

// get hibernate session factorypublic SessionFactory getSessionFactory() { if (sessionFactory == null)  {   sessionFactory = new Configuration().configure().buildSessionFactory(); } return sessionFactory; }

在该方法中,我们首次初始化一个会话工厂。Hibernate的Configuration对象被用于从类路径读取配置文件,从而初始化框架。

在开始使用Hibernate进行数据库操作之前,我们已经使用了executeDatabaseCommand()方法:使用需要executeDatabaseOperation()方法的DatabaseCommand接口。由于现在希望使用Hibernate,我们将分别介绍使用DatabaseCommand接口和CommandExecutor单元素对象的其他方法。这种方法通过Hibernate框架执行所有的数据库操作(请参见清单10)。

清单10:执行Hibernate命令

// execute a particular hibernate commandpublic Object executeHibernateCommand(DatabaseCommand c) throws Exception { Session session = null; try {   session = getSessionFactory().openSession();   Object o = c.executeHibernateOperation(session);   return o; } catch (SQLException e) {   throw e; } finally {   if (session != null) {   session.flush();   session.close();   } } }

看上去,它和executeDatabaseCommand()方法非常相似,不同之处在于我们使用的是Hibernate会话对象,而不是普通的JDBC连接。接下来,将下述存根方法添加到DatabaseCommand接口:

public Object executeHibernateOperation(Session session) throws SQLException;

在向接口添加新方法后,Eclipse工作台中所有实现该接口的类均被标上红色标记,因为这些实现该接口的类还必须实现它所需的所有方法。我们有四种实现数据库命令接口的类。

public class CreateCustomer implements DatabaseCommand

public class CreateOrder implements DatabaseCommand

public class ListCustomers implements DatabaseCommand

public class ListCustomerOrders implements DatabaseCommand

混合Eclipse、WTP、Struts和Hibernate(7)

时间:2010-12-31 bea Boris Minkin

因此,我们必须向这四种类中分别添加executeHibernateOperation()实现方法。首先我们来看看CreateCustomer类。该类的executeDatabaseOperation()方法如清单11所示。

清单11:CreateCustomer类的executeDatabaseOperation()方法

public Object executeDatabaseOperation(Connection conn) throws SQLException {   PreparedStatement sta = conn.prepareStatement   ("INSERT INTO CUSTOMER (ID, FIRST_NAME, LAST_NAME, ADDRESS) VALUES (?, ?, ?, ?)&qu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号