编程资料集中营
 | 网站首页 | 文章中心 | 编程资料2 | 软件下载 | BT下载 | 八卦星闻 | 音乐在线 | 在线游戏 | 免费电影 | 进入问吧 | 
使用Hibernate的一个完整例子,,
您现在的位置: 编程资料,学习资料,c,c++,vc,vc++,java,jsp,j2ee,j2me,asp,php >> 文章中心 >> JAVA 专区 >> Hibernate 技术 >> 文章正文
【字体:
使用Hibernate的一个完整例子   进入问吧

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

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

使用Hibernate的一个完整例子


id:






::查看所有Course::




首先通过一个值对象Course(这个类正好是Hibernate使用的持久对象,这里作为值对象来传递数据)接收获得的参数,然后CourseBean的addCourse(Course)方法把数据保存到数据库。可以看出,通过使用Hibernate,把数据从表单中添加到数据库非常简单。



查询


下面来看模糊查找的JSP代码,如例程8所示。



例程8 按名字模糊查找Course





<%@ page import="java.sql.*,java.util.*,com.hellking.study.hibernate.Course" errorPage="error.jsp"%>


<% try
{
Iterator it=courseBusiness.getSomeCourse((String)request.getParameter("name"));
while(it.hasNext())
{
Course temp=(Course)it.next();
out.println(""+temp.getId()+"");
out.println(""+temp.getName()+"");
}
}
catch(Exception e)
{
out.println(e.getMessage());
}
%>
….



它实际上调用的是CourseBean的Iterator getSomeCourse(String name)方法。我们来回顾一下这个方法中的代码:






/**
*按course的名字进行模糊查找
*/
public Iterator getSomeCourse(String name)throws HibernateException
{
String queryString = "select c from Course as c where c.name like :name" ;
beginTransaction();
Query query = session.createQuery(queryString);
query.setString("name", "%"+name+"%");
Iterator it= query.iterate();
return it;
}



在查询前,首先调用beginTransaction方法启动新的Hibernate事务,然后创建一个Query对象,在创建这个对象时,同时指定查询的语句。



注意,在查询语句:






select c from Course as c where c.name like :name"



中,它虽然和普通的SQL语句相似,但是不同,在数据库中,使用的表的名字是Courses,而在这个查询语句中使用的是Course,它和持久对象的名字一致,也就是说,这个查询的概念是查询持久对象,而不是数据库的记录。



创建了查询对象Query后,需要设置查询的参数,它和在JDBC中PreparedStatement对象中设置参数的方法相似。通过"Iterator it= query.iterate()"语句来执行查询,并且返回一个Iterator对象。在这里使用了Hibernate提供的查询机制,一般的JDBC查询返回的是ResultSet对象,而这里返回的是包含了CourseBean对象的Iterator。



要查询系统中所有的Course,也同样非常简单,可以通过例程9所示的代码实现。



例程9 查询数据库中所有的Course








<% try
{
Iterator it=courseBusiness.getAllCourses();
while(it.hasNext())
{
Course temp=(Course)it.next();
out.println(""+temp.getId()+"");
out.println(""+temp.getName()+"");
}
}
catch(Exception e)
{
out.println(e.getMessage());
}
%>



实际上调用的是CourseBean的getAllCourses方法,它和getSomeCourse方法机制一样,就不再介绍了。



删除数据



在JSP中,使用以下的代码来执行删除操作。



例程10 删除数据库中Courses表的记录







删除id为:<%=request.getParameter("id")%>的course::::


<% try
{
courseBusiness.deleteCourse(request.getParameter("id"));
out.println("删除成功");
}
catch(Exception e)
{
out.println("不存在这个记录");
}
%>



我们来看CourseBean中执行删除操作的具体代码:






/**
*删除给定ID的course
*/
public void deleteCourse(String id)throws HibernateException
{
beginTransaction();
Course course=(Course)session.load(Course.class,id);
session.delete(course);
endTransaction(true);
}

 

在这个方法中,首先开始一个事务,然后通过session.load(Course.class,id)方法来装载指定ID的持久对象,接下来通过"session.delete(course)"来删除已经装载的course,并且结束Hibernate事务。



总结


下面总结一下使用Hibernate的开发过程:



1、 配置Hibernate(一次即可);



2、 确定数据表;



3、 创建持久对象;



4、 编写对象和数据表的映射描述;



5、 编写和业务逻辑。



实际上,上面的过程和使用EJB没有什么区别:在使用EJB时,首先当然也是配置环境,初始化数据表;然后创建实体Bean(对象于Hibernate的持久对象);接下来编写部署描述符(ejb-jar.xml,厂商专有的部署描述),在这些部署描述符里,指定了EJB和数据表的映射关系,如果多个实体Bean存在关联关系,需要描述它们之间的关系,这些描述对应于Hibernate中持久对象的描述,如Course.hbm.xml;往往我们并不在应用程序中直接操作实体Bean,而是通过业务对象(如会话Bean)来操作,这里的会话Bean可以简单的和Hibernate中执行业务逻辑的JavaBean对应。这里只是简单的类比,不是绝对的,比如我们同样可以在会话Bean中访问Hibernate持久对象,也就是说使用Hibernate,同样可以把业务逻辑放在会话Bean中。



通过本文的学习,相信读者对Hibernate已经有了初步的认识,并且能够使用Hibernate开发简单的应用。在下一篇中,我们将学习怎么使用Hibernate来为复杂的数据表进行映射,并且维护它们之间的关系。





参考资料



  • http://www.apache.org 下载Tomcat。



  • Hibernate的官方网站,http://hibernate.bluemars.net/ ,包含了Hibernate最新资料。





  • Hibernate中文论坛,hibernate.fankai.com包含了Hibernate较多的参考资料。





  • 包含了Hibernate技术讨论网站,www.jdon.com,





  • 于Hibernate、JDO、CMP等技术的热烈讨论1:



    http://www.jdon.com/jive/thread.jsp?forum=16&thread=6062&start=0&msRange=15





  • 于Hibernate、JDO、CMP等技术的热烈讨论2:



    http://www.theserverside.com/discussion/thread.jsp?thread_id=19732





  • Hibernate2 Reference Documentation,可以从Hibernate官方网站获得,非常好的参考资料。





  • Hibernate In Action,一本非常专业的Hibernate参考书,由Hibernate项目主要开发人员Gavin King 等著,Manning出版社出版。您可以从 http://www.theserverside.com 获得本书的部分章节。















关于作者


陈亚强:北京华园天一科技有限公司高级软件工程师,擅长J2EE技术,曾参与多个J2EE项目的设计和开发,对Web服务有很大的兴趣并且有一定的项目经验。热爱学习,喜欢新技术,曾参与多本图书的写作。好交朋友,您可以通过 cyqcims@mail.tsinghua.edu.cn 和他联系。


上一页  [1] [2] [3] 

   

进入问吧

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

文章录入:admin    责任编辑:admin 
编程资料集中营