转载

Struts2和Hibernate集成

 上一篇

Hibernate是一个高性能的对象/关系持久性和查询服务许可下的开源GNU通用公共许可证(LGPL),并免费下载。在这一章中,我们要学习如何实现Struts2与Hibernate集成。如果你不熟悉与Hibernate,那么可以查看我们的Hibernate教程。

数据库设置:

在本教程中,我会使用“struts2_tutorial”MySQL数据库。我连接到我的机器上使用这个数据库的用户名“root”,并且没有密码。首先,你需要运行下面的脚本。此脚本创建称为student ,并创建一个新的表,此表中的记录数:

 CREATE TABLE IF NOT EXISTS `student` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `first_name` varchar(40) NOT NULL,   `last_name` varchar(40) NOT NULL,   `marks` int(11) NOT NULL,   PRIMARY KEY (`id`) );  -- -- Dumping data for table `student` --  INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)    VALUES(1, 'George', 'Kane', 20); INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)    VALUES(2, 'Melissa', 'Michael', 91); INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)    VALUES(3, 'Jessica', 'Drake', 21);

Hibernate的配置:

接下来让我们创建这是Hibernate的配置文件hibernate.cfg.xml中。

 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  <hibernate-configuration> <session-factory>    <property name="hibernate.connection.driver_class">c       om.mysql.jdbc.Driver    </property>    <property name="hibernate.connection.url">       jdbc:mysql://www.yiibai.com/struts_tutorial    </property>    <property name="hibernate.connection.username">root</property>    <property name="hibernate.connection.password"></property>    <property name="hibernate.connection.pool_size">10</property>    <property name="show_sql">true</property>    <property name="dialect">       org.hibernate.dialect.MySQLDialect    </property>    <property name="hibernate.hbm2ddl.auto">update</property>    <mapping class="com.yiibai.hibernate.Student" /> </session-factory> </hibernate-configuration> 

让我们通过hibernate的配置文件。首先,我们正在使用的MySQL驱动程序。然后,我们声明 JDBC URL连接到数据库。然后,声明连接的用户名,密码以及池的大小。我们也表示,我们希望“show_sql”转向真正看到SQL的日志文件中。请经过Hibernate教程,了解这些属性是什么意思。最后,我们设置了的映射类com.yiibai.hibernate.Student,我们将本章中创建。

环境设置:

接下来,这个项目需要一大堆的jar文件。附所需的JAR文件的完整列表的截图:

Struts2和Hibernate集成

大部分的JAR文件可以作为Struts的分布的一部分。如果有一个如GlassFish应用服务器,WebSphere或JBoss安装,那么可以得到的大部分jar文件从应用服务器的lib文件夹。如果没有,可以单独下载的文件:

  • Hibernate jar files - Hibernate.org

  • Struts hibernate plugin - Struts hibernate plugin

  • JTA files- JTA files

  • Dom4j files - Dom4j

  • SLF4J files - SLF4J

  • log4j files - log4j

其余的文件,应该能够从struts2的分发得到。

Hibernate 类:

现在让我们来创建Hibernate集成所需的Java类。以下内容Student.java:

 package com.yiibai.hibernate;  import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table;  @Entity @Table(name="student") public class Student {      @Id    @GeneratedValue    private int id;    @Column(name="last_name")    private String lastName;    @Column(name="first_name")    private String firstName;    private int marks;    public int getId() {     return id;    }    public void setId(int id) {     this.id = id;    }    public String getLastName() {       return lastName;    }    public void setLastName(String lastName) {       this.lastName = lastName;    }    public String getFirstName() {       return firstName;    }    public void setFirstName(String firstName) {       this.firstName = firstName;    }    public int getMarks() {       return marks;    }    public void setMarks(int marks) {       this.marks = marks;    } }

这是一个POJO类,Hibernate的规范表。它拥有属性id,firstName和lastName学生表中的列名对应。接下来让我们创建StudentDAO.java文件如下:

 package com.yiibai.hibernate;  import java.util.ArrayList; import java.util.List;  import org.hibernate.Session; import org.hibernate.Transaction;  import com.googlecode.s2hibernate.struts2.plugin./                      annotations.SessionTarget; import com.googlecode.s2hibernate.struts2.plugin./                      annotations.TransactionTarget;  public class StudentDAO {      @SessionTarget    Session session;     @TransactionTarget    Transaction transaction;     @SuppressWarnings("unchecked")    public List<Student> getStudents()    {       List<Student> students = new ArrayList<Student>();       try       {          students = session.createQuery("from Student").list();       }       catch(Exception e)       {          e.printStackTrace();       }       return students;    }     public void addStudent(Student student)    {       session.save(student);    } }

StudentDAO类,学生类是数据访问层。它有一些方法来列出所有学生,然后保存一个新的学生记录。

动作类:

以下文件AddStudentAction.java定义我们的动作类。我们这里有两个动作方法 - execute() 和 listStudents()。 execute()方法是用来添加新的学生记录。使用DAO的save()方法来实现这一目标。另一种方法,listStudents()用来列出学生。我们使用DAO的的列表方法得到所有学生的名单。 

 package com.yiibai.struts2;  import java.util.ArrayList; import java.util.List;  import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.yiibai.hibernate.Student; import com.yiibai.hibernate.StudentDAO;  public class AddStudentAction extends ActionSupport              implements ModelDriven<Student>{     Student student  = new Student();    List<Student> students = new ArrayList<Student>();    StudentDAO dao = new StudentDAO();    @Override    public Student getModel() {       return student;    }     public String execute()    {       dao.addStudent(student);       return "success";    }     public String listStudents()    {       students = dao.getStudents();       return "success";    }     public Student getStudent() {       return student;    }     public void setStudent(Student student) {       this.student = student;    }     public List<Student> getStudents() {       return students;    }     public void setStudents(List<Student> students) {       this.students = students;    }   }

实现ModelDriven接口你会注意到,这是用来当你的操作类处理一个具体的模型类(如学生),而不是个人属性(如名字,姓氏)。的ModelAware接口需要实现的方法,以返回到模型。在我们的例子中,我们返回“学生”对象。

创建视图文件:

现在让我们创建student.jsp视图文件包含以下内容:

 <%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Hello World</title> <s:head /> </head> <body>    <s:form action="addStudent">    <s:textfield name="firstName" label="First Name"/>    <s:textfield name="lastName" label="Last Name"/>    <s:textfield name="marks" label="Marks"/>    <s:submit/>    <hr/>    <table>       <tr>          <td>First Name</td>          <td>Last Name</td>          <td>Marks</td>       </tr>       <s:iterator value="students">           <tr>             <td><s:property value="firstName"/></td>             <td><s:property value="lastName"/></td>             <td><s:property value="marks"/></td>            </tr>       </s:iterator>     </table>    </s:form> </body> </html>

非常简单student.jsp。在上面的部分,我们有一个形式提交到“addStudent.action”。这需要在名字,姓氏和备注。因为addStudent 动作,自动绑到ModelAware的“AddSudentAction”,将创建一个学生bean的名字,姓氏和标记自动填充的值。

在底部,我们去通过的学生名单(见AddStudentAction.java)。我们遍历列表和显示的值在表中的姓氏,名称和备注。

Struts 配置:

让我们把它放在一起使用struts.xml:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>    <constant name="struts.devMode" value="true" />     <package name="myhibernate" extends="hibernate-default">        <action name="addStudent" method="execute"          class="com.yiibai.struts2.AddStudentAction">          <result name="success" type="redirect">                listStudents          </result>       </action>        <action name="listStudents" method="listStudents"          class="com.yiibai.struts2.AddStudentAction">          <result name="success">/students.jsp</result>       </action>  </package>  </struts>

这里要注意的最重要的事情是,我们包函“myhibernate”扩展Struts2默认包称为“hibernate-default”。然后我们声明两个动作 - addStudent和listStudents。 addStudent调用execute()上AddStudentAction类,然后,它调用listStudents操作方法successs。

listStudent动作方法调用listStudents()上AddStudentAction类作为视图,并使用student.jsp

现在右击项目名称,并单击Export > WAR 文件创建一个WAR文件。然后部署这个WAR在Tomcat的webapps目录下。最后,启动Tomcat服务器和尝试访问URL http://localhost:8080/HelloWorldStruts2/student.jsp。这会给你以下画面: 

Struts2和Hibernate集成

在上面的部分,我们得到的一种形式,进入一个新的学生记录和底部列出了学生在数据库中的值。继续并添加一个新的学生记录,按提交。屏幕将刷新并显示您的更新列表。

 上一篇
正文到此结束
Loading...