快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
ot;);   sta.setInt(1, cust.getId());   sta.setString(2, cust.getFirstName());   sta.setString(3, cust.getLastName());   sta.setString(4, cust.getAddress());   int rows_updated = sta.executeUpdate();   sta.close();   return new Integer(rows_updated); }

该方法比较冗长,并且要求编码的开发人员对JDBC有所了解:比如,如何创建和执行预处理语句。此外,如果想要将数据库从MySQL转变为其他类型,开发人员需要重新编写SQL,因为不同数据库的SQL也许各不相同。使用Hibernate,只需要更改hibernate.cfg.xml配置文件中的SQL对话。清单12列出了我们的相应executeHibernateOperation()方法。

清单12:CreateCustomer类的executeHibernateOperation()方法

/** * Execute Hibernate operation */ public Object executeHibernateOperation(Session session) throws SQLException { session.save(cust); session.flush(); return 1; }

在清单12中,我们告诉会话对象将类保存到数据库中。不需要SQL,不需要JDBC知识,不必对列和数据库表名称进行硬编码。如果必须更改表或列名称,我们也不必重新编写应用程序中的多行代码。Hibernate知道如何保存对象,不管该对象是否已经存在于数据库中。执行INSERT或UPDATE操作,Hibernate可以以乐观方式进行检查(即尝试执行UPDATE,如果失败,则执行INSERT),或以悲观方式进行检查(即执行SELECT,检查是否存在该行,如果存在,即执行UPDATE,否则执行INSERT)。命令执行后,将刷新会话并确保所有数据库命令都已经被及时执行,框架缓冲区中没有任何剩余。对CreateOrder类执行类似的操作。

首先,我们在JDBC版本中处理的两个操作,CreateCustomer和CreateOrder,是数据库插入操作。然而,想要让应用程序工作,还必须处理数据库查询。我们使用ListCustomers和ListCustomerOrders命令来实现这一功能。我们先来看看如何获取用户列表。

清单13:ListCustomers类的executeDatabaseOperation()方法

public Object executeDatabaseOperation(Connection conn) throws SQLException { // List customers in the database     ArrayList list = new ArrayList();   Statement sta = conn.createStatement();   ResultSet rs = sta.executeQuery("SELECT ID, FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMER");   while(rs.next()) {   Customer cust = new Customer();   cust.setId(rs.getInt(1));   cust.setFirstName(rs.getString(2));   cust.setLastName(rs.getString(3));   cust.setAddress(rs.getString(4));   list.add(cust);   }   rs.close();   sta.close();   return list; }

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

时间:2010-12-31 bea Boris Minkin

清单13包含了大量JDBC调用。首先,创建SQL语句,并使用硬编码的列和表名执行该语句,接下来,检查数据库查询的ResultSet,根据从数据库表读取的行数据,构建一个用户域对象,同时记住列顺序或名称。这些操作都易于出错,同时一旦需要更改数据库表,这些操作都难以维持。而Hibernate正好可以解决这些问题。Hibernate引入了名为Hibernate Query Language (Hibernet查询语言,HQL)的全新语言,在这种语言中,用户不用查询数据库表,只需要查询对象。清单14列出了我们使用的executeHibernateOperation()方法。

清单14:ListCustomers类的executeHibernateOperation()方法

/** * Execute Hibernate select operation */ public Object executeHibernateOperation(Session session) throws SQLException { Query q = session.createQuery("from customer in class domain.Cu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号