课程表

Struts2 教程

Struts2 标签

Struts2 集成

工具箱
速查手册

Struts2 Hibernate集成

当前位置:免费教程 » Java相关 » Struts2

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

数据库设置

对于本教程,我们将使用“struts2_tutorial”MySQL数据库,使用用户名“root”连接到机器上的这个数据库,不设密码。首先,你需要运行以下脚本。此脚本创建一个名为student的新表,并在此表中创建少量记录:

  1. CREATE TABLE IF NOT EXISTS `student` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `first_name` varchar(40) NOT NULL,
  4. `last_name` varchar(40) NOT NULL,
  5. `marks` int(11) NOT NULL,
  6. PRIMARY KEY (`id`)
  7. );
  8.  
  9. --
  10. -- Dumping data for table `student`
  11. --
  12.  
  13. INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
  14. VALUES(1, 'George', 'Kane', 20);
  15. INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
  16. VALUES(2, 'Melissa', 'Michael', 91);
  17. INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
  18. VALUES(3, 'Jessica', 'Drake', 21);

Hibernate配置

接下来让我们创建hibernate.cfg.xml,它是hibernate配置文件。

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5.  
  6. <hibernate-configuration>
  7. <session-factory>
  8. <property name="hibernate.connection.driver_class">c
  9. om.mysql.jdbc.Driver
  10. </property>
  11. <property name="hibernate.connection.url">
  12. jdbc:mysql://www.w3xue.com/struts_tutorial
  13. </property>
  14. <property name="hibernate.connection.username">root</property>
  15. <property name="hibernate.connection.password"></property>
  16. <property name="hibernate.connection.pool_size">10</property>
  17. <property name="show_sql">true</property>
  18. <property name="dialect">
  19. org.hibernate.dialect.MySQLDialect
  20. </property>
  21. <property name="hibernate.hbm2ddl.auto">update</property>
  22. <mapping class="com.w3xue.hibernate.Student" />
  23. </session-factory>
  24. </hibernate-configuration>

让我们过一下hibernate配置文件。首先,我们声明使用MySQL驱动程序。然后我们声明了jdbc url用于连接到数据库。接着我们声明连接的用户名,密码和池大小。我们还指出希望通过将“show_sql”打开为true来查看日志文件中的SQL。请通过Hibernate教程了解这些属性的含义。最后,我们将映射类设置为在本章中创建的com.w3xue.hibernate.Student。

环境搭建

这个项目需要很多jar文件,以下的是所需的JAR文件的完整列表的屏幕截图:

Struts和Hibernate的jar

大多数JAR文件可以作为struts分发的一部分获取。如果你有安装一个应用程序服务器,如glassfish,websphere或jboss,那么你可以从appserver的lib文件夹中获取大多数剩余的jar文件。如果没有,你可以单独下载文件:

其余的文件,你应该能够从struts2 中分配。

Hibernate类

现在让我们为hibernate集成创建所需的java类。按照Student.java的内容:

  1. package com.w3xue.hibernate;
  2.  
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.Id;
  7. import javax.persistence.Table;
  8.  
  9. @Entity
  10. @Table(name="student")
  11. public class Student {
  12. @Id
  13. @GeneratedValue
  14. private int id;
  15. @Column(name="last_name")
  16. private String lastName;
  17. @Column(name="first_name")
  18. private String firstName;
  19. private int marks;
  20. public int getId() {
  21. return id;
  22. }
  23. public void setId(int id) {
  24. this.id = id;
  25. }
  26. public String getLastName() {
  27. return lastName;
  28. }
  29. public void setLastName(String lastName) {
  30. this.lastName = lastName;
  31. }
  32. public String getFirstName() {
  33. return firstName;
  34. }
  35. public void setFirstName(String firstName) {
  36. this.firstName = firstName;
  37. }
  38. public int getMarks() {
  39. return marks;
  40. }
  41. public void setMarks(int marks) {
  42. this.marks = marks;
  43. }
  44. }

这是一个POJO类,根据Hibernate规范表示的student表。它具有对应于student表列名的属性id,firstName和lastName。接下来让我们创建StudentDAO.java文件,如下所示:

  1. package com.w3xue.hibernate;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import org.hibernate.Session;
  7. import org.hibernate.Transaction;
  8.  
  9. import com.googlecode.s2hibernate.struts2.plugin.
  10. annotations.SessionTarget;
  11. import com.googlecode.s2hibernate.struts2.plugin.
  12. annotations.TransactionTarget;
  13.  
  14. public class StudentDAO {
  15. @SessionTarget
  16. Session session;
  17.  
  18. @TransactionTarget
  19. Transaction transaction;
  20.  
  21. @SuppressWarnings("unchecked")
  22. public List<Student> getStudents()
  23. {
  24. List<Student> students = new ArrayList<Student>();
  25. try
  26. {
  27. students = session.createQuery("from Student").list();
  28. }
  29. catch(Exception e)
  30. {
  31. e.printStackTrace();
  32. }
  33. return students;
  34. }
  35.  
  36. public void addStudent(Student student)
  37. {
  38. session.save(student);
  39. }
  40. }

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

Action类

下面的文件AddStudentAction.java定义了我们的action类。我们在这里有两个action方法:execute()和listStudents()。execute()方法用于添加新的学生记录。我们使用dao的save()方法来实现这一点。另一种listStudents()方法用于列出学生。我们使用dao的列表方法来获取所有学生的列表。

  1. package com.w3xue.struts2;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import com.opensymphony.xwork2.ActionSupport;
  7. import com.opensymphony.xwork2.ModelDriven;
  8. import com.w3xue.hibernate.Student;
  9. import cn.w3xue.hibernate.StudentDAO;
  10.  
  11. public class AddStudentAction extends ActionSupport
  12. implements ModelDriven<Student>{
  13.  
  14. Student student = new Student();
  15. List<Student> students = new ArrayList<Student>();
  16. StudentDAO dao = new StudentDAO();
  17. @Override
  18. public Student getModel() {
  19. return student;
  20. }
  21.  
  22. public String execute()
  23. {
  24. dao.addStudent(student);
  25. return "success";
  26. }
  27.  
  28. public String listStudents()
  29. {
  30. students = dao.getStudents();
  31. return "success";
  32. }
  33.  
  34. public Student getStudent() {
  35. return student;
  36. }
  37.  
  38. public void setStudent(Student student) {
  39. this.student = student;
  40. }
  41.  
  42. public List<Student> getStudents() {
  43. return students;
  44. }
  45.  
  46. public void setStudents(List<Student> students) {
  47. this.students = students;
  48. }
  49. }

你会注意到我们正在实现ModelDriven接口。这是在你的action类处理一个具体的模型类(如Student)而不是个别的属性(如firstName,lastName)时使用。ModelAware接口需要你实现一个方法来返回模型。在我们的例子中,我们返回“student”对象。

创建视图文件

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

  1. <%@ page contentType="text/html; charset=UTF-8"%>
  2. <%@ taglib prefix="s" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title>Hello World</title>
  6. <s:head />
  7. </head>
  8. <body>
  9. <s:form action="addStudent">
  10. <s:textfield name="firstName" label="First Name"/>
  11. <s:textfield name="lastName" label="Last Name"/>
  12. <s:textfield name="marks" label="Marks"/>
  13. <s:submit/>
  14. <hr/>
  15. <table>
  16. <tr>
  17. <td>First Name</td>
  18. <td>Last Name</td>
  19. <td>Marks</td>
  20. </tr>
  21. <s:iterator value="students">
  22. <tr>
  23. <td><s:property value="firstName"/></td>
  24. <td><s:property value="lastName"/></td>
  25. <td><s:property value="marks"/></td>
  26. </tr>
  27. </s:iterator>
  28. </table>
  29. </s:form>
  30. </body>
  31. </html>

student.jsp非常简单。在上面部分,我们有一个提交到“addStudent.action”的表单。它接受firstName,lastName和marks。因为addStudent action绑定到ModelAware的“AddSudentAction”,所以将自动创建一个学生bean,其值自动填充为firstName,lastName和marks。
在下面部分,我们浏览学生列表(参见AddStudentAction.java),并在表中显示firstname,lastname和marks的值。

Struts配置

让我们使用struts.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5.  
  6. <struts>
  7. <constant name="struts.devMode" value="true" />
  8.  
  9. <package name="myhibernate" extends="hibernate-default">
  10.  
  11. <action name="addStudent" method="execute"
  12. class="com.w3xue.struts2.AddStudentAction">
  13. <result name="success" type="redirect">
  14. listStudents
  15. </result>
  16. </action>
  17.  
  18. <action name="listStudents" method="listStudents"
  19. class="com.w3xue.struts2.AddStudentAction">
  20. <result name="success">/students.jsp</result>
  21. </action>
  22.  
  23. </package>
  24.  
  25. </struts>

要注意的要点是,我们的包“myhibernate”扩展了名为“hibernate-default”的struts2默认包。然后我们声明两个action:addStudent和listStudents。addStudent调用AddStudentAction类的execute(),然后在成功时调用listStudents方法。listStudent方法调用AddStudentAction类上的listStudents(),并使用student.jsp作为视图。

现在,右键单击项目名称,然后单击“Export”> “WAR File”以创建WAR文件。然后在Tomcat的webapps目录中部署WAR文件。最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/student.jsp,将显示以下界面:
Struts和Hibernate的集成

在上面部分,我们得到一个表单,输入新学生记录的值,下面部分列出数据库中的学生。继续添加一个新的学生记录,然后按提交。屏幕将刷新,并在每次单击提交时向你显示更新了的列表。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号