📜  Struts 2和Hibernate集成

📅  最后修改于: 2020-11-11 05:08:42             🧑  作者: Mango


Hibernate是一种高性能的对象/关系持久性和查询服务,已根据开源GNU较小通用公共许可证(LGPL)许可,可以免费下载。在这一章当中。我们将学习如何实现与Hibernate的Struts 2集成。如果您不熟悉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.cfg.xml,这是hibernate的配置文件。





   
      c
         om.mysql.jdbc.Driver
      
      
      
         jdbc:mysql://www.tutorialspoint.com/struts_tutorial
      
      
      root
      
      
      
      10
      
      true
      
      
         org.hibernate.dialect.MySQLDialect
      
      
      update
      
      
   
 

让我们浏览一下休眠配置文件。首先,我们声明我们正在使用MySQL驱动程序。然后,我们声明了用于连接数据库的jdbc url。然后,我们声明连接的用户名,密码和池大小。我们还指出,我们希望通过将“ show_sql”设置为true来查看日志文件中的SQL。请仔细阅读休眠教程,以了解这些属性的含义。

最后,我们将在本章中创建的映射类设置为com.tutorialspoint.hibernate.Student。

环境设置

接下来,您需要为该项目准备很多罐子。附件是所需的JAR文件完整列表的屏幕截图-

支撑杆和冬眠罐

大多数JAR文件都可以作为struts发行版的一部分获得。如果您安装了应用程序服务器,例如glassfish,websphere或jboss,则可以从appserver的lib文件夹中获取剩余的大多数jar文件。如果没有,您可以单独下载文件-

其余文件,您应该可以从Struts2发行版中获取。

休眠类

现在让我们为休眠集成创建所需的Java类。以下是Student.java的内容-

package com.tutorialspoint.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.tutorialspoint.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 getStudents() {
      List students = new ArrayList();
      
      try {
         students = session.createQuery("from Student").list();
      } catch(Exception e) {
         e.printStackTrace();
      }
      return students;
   }

   public void addStudent(Student student) {
      session.save(student);
   }
}

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

动作班

以下文件AddStudentAction.java定义了我们的操作类。我们这里有两个操作方法-execute()和listStudents()。 execute()方法用于添加新的学生记录。我们使用dao的save()方法来实现此目的。

另一种方法listStudents()用于列出学生。我们使用dao的列表方法来获取所有学生的列表。

package com.tutorialspoint.struts2;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.tutorialspoint.hibernate.Student;
import com.tutorialspoint.hibernate.StudentDAO;

public class AddStudentAction extends ActionSupport implements ModelDriven {

   Student student  = new Student();
   List students = new ArrayList();
   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 getStudents() {
      return students;
   }

   public void setStudents(List students) {
      this.students = students;
   }
    
}

您会注意到我们正在实现ModelDriven接口。当您的动作类正在处理具体的模型类(例如Student)而不是单个属性(例如firstName,lastName)时,将使用此方法。 ModelAware接口要求您实现一种方法以返回模型。在我们的例子中,我们将返回“学生”对象。

创建查看文件

现在让我们创建具有以下内容的student.jsp视图文件-

Hello World
      





First Name Last Name Marks

student.jsp非常简单。在顶部,我们有一个提交给“ addStudent.action”的表单。它接受firstName,lastName和标记。由于addStudent动作与ModelAware的“ AddSudentAction”相关联,因此将自动创建一个带有firstName,lastName值和自动填充标记的学生bean。

在底部,我们浏览学生列表(请参阅AddStudentAction.java)。我们遍历列表,并在表中显示名字,姓氏和标记的值。

支撑配置

让我们使用struts.xml将它们放在一起-





   
   

      
         
            listStudents
         
      

      
         /students.jsp
      

   

这里要注意的重要一点是我们的软件包“ myhibernate”扩展了名为“ hibernate-default”的struts2默认软件包。然后,我们声明两个动作-addStudent和listStudents。 addStudent调用AddStudentAction类上的execute(),然后在成功时调用listStudents操作方法。

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

现在,右键单击项目名称,然后单击导出> WAR文件以创建War文件。然后,将此WAR部署在Tomcat的webapps目录中。最后,启动Tomcat服务器并尝试访问URL http:// localhost:8080 / HelloWorldStruts2 / student.jsp 。这将产生以下屏幕-

Struts和休眠结果

在顶部,我们获得一个表格,用于输入新学生记录的值,而底部则列出数据库中的学生。继续并添加新的学生记录,然后按提交。每次单击提交时,屏幕将刷新并显示更新的列表。