⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hibernate.doc

📁 hibernate配置的心得体会 希望对大家有些帮组
💻 DOC
📖 第 1 页 / 共 2 页
字号:
下面编写业务逻辑类,新建一个名为CourseBean的JavaBean,并且CourseBean继承HibernateBase类,代码如例程6所示。

例程6 CourseBean.java





package com.hellking.study.hibernate;



import net.sf.hibernate.*;

import net.sf.hibernate.cfg.*;

import java.util.*;



/**

 *和course相关的业务逻辑

 */

public class CourseBean extends HibernateBase

{

	public CourseBean()throws HibernateException

	{

		super();

	}

	/**

	 *增加一个Course

	 */

	public void addCourse(Course st)throws HibernateException

	{

		beginTransaction();

         session.save(st);         

         endTransaction(true);

    }

    

    /**

     *查询系统中所有的Course,返回的是包含有Course持久对象的Iterator。

     */

    public Iterator getAllCourses()throws HibernateException

    {

     	String queryString = "select courses from Course as courses";

        beginTransaction();

        Query query = session.createQuery(queryString);

        Iterator it= query.iterate();

        return it;

    }

    

    /**

     *删除给定ID的course

     */

    public void deleteCourse(String id)throws HibernateException

    {

     	beginTransaction();    	

     	Course course=(Course)session.load(Course.class,id);    	

     	session.delete(course);

     	endTransaction(true);

     }

    

    /**

     *按course的名字进行模糊查找,返回的是包含有Course持久对象的Iterator。

     */

    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;

    }    	

}


在CourseBean封装了4个业务方法,你可以根据情况增加其它的业务方法。在CourseBean中,通过Hibernate来操作潜在的数据库资源。

要保存Course数据到数据库,可以通过:





session.save(Course);


方法来保存,它相当于使用在JDBC中执行以下语句:





Connection con=…

Statement stmt=con.createStatement();

stmt.executeUpdate("insert into courses values(''"+course.getId(),+"'',''"+course.getName()+"'')");

con.close();


可以看出,通过使用Hibernate,可以大大减少数据访问的复杂度。

在JSP中调用业务逻辑

添加数据

CourseBean这个业务对象封装了和Hibernate的交互关系,从而使JSP和Hibernate关系的解藕。我们来看测试主页面的部分代码,如例程7所示。

例程7 测试Hibernate开发的应用(course.jsp)





<%@ page import="java.sql.*,java.util.*" errorPage="error.jsp"%> 

<jsp:useBean id="course" class="com.hellking.study.hibernate.Course" scope="page">

<jsp:setProperty name="course" property="*"/>

</jsp:useBean>

<jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>

<html><body><center>

<%  

  try

  {

  if(course.getId().equals(null)||course.getId().equals(""));

  else courseBusiness.addCourse(course);

  

  %>

成功添加了Course:<br>

name:<%=course.getName()%>

Id:<%=course.getId()%>

<%

}

  catch(Exception e)

  {

  }  

%> 



<hr>

<br>::增加一个course::<br>

<form action="course.jsp" method="get" name="add">

id:<input type=text name="id"><br>

name:<input type=text name="name"><br>

<input type=submit value="submit"><br>

</form>

<hr>

::按名字模糊查找::<br>

<form action="queryCourse.jsp" method="get" name="queryByName">

name:<input type=text name="name"><br>

<input type=submit value="query"><br>

</form>

<hr>

::删除一个Course::<br>

<form action="deleteCourse.jsp" method="get" name="queryByName">

id:<input type=text name="id"><br>

<input type=submit value="delete"><br>

</form>

<hr>

<a href=viewAll.jsp>::查看所有Course::<a>

</body>

</html>


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

查询


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

例程8 按名字模糊查找Course





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

<jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>


<% try

{

   Iterator it=courseBusiness.getSomeCourse((String)request.getParameter("name"));

   while(it.hasNext())

   {

     Course temp=(Course)it.next();

     out.println("<tr><td>"+temp.getId()+"</td>");

     out.println("<td>"+temp.getName()+"</td></tr>");

   }

  }

  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






<jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>


<% try

{

   Iterator it=courseBusiness.getAllCourses();

   while(it.hasNext())

   {

     Course temp=(Course)it.next();

     out.println("<tr><td>"+temp.getId()+"</td>");

     out.println("<td>"+temp.getName()+"</td></tr>");

   }

  }

  catch(Exception e)

  {

    out.println(e.getMessage());

   }

%>



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

删除数据

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

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





<jsp:useBean id="courseBusiness" class="com.hellking.study.hibernate.CourseBean" scope="page"/>


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



<% 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来为复杂的数据表进行映射,并且维护它们之间的关系。

本新闻发表于:2004-5-26 8:12:25



?2004-2005 mouse. 版权所有.?技术支持 浩子

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -