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.tutorialspoint.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.tutorialspoint.hibernate.Student" />
   </session-factory>
</hibernate-configuration>

Hibernate構成ファイルを見てみましょう。まず、MySQLドライバーを使用していることを宣言しました。次に、データベースに接続するためのjdbcurlを宣言しました。次に、接続のユーザー名、パスワード、およびプールサイズを宣言しました。また、「show_sql」をtrueに設定して、ログファイルにSQLを表示することも指定しました。これらのプロパティの意味を理解するには、Hibernateチュートリアルを実行してください。

最後に、マッピングクラスをこの章で作成するcom.tutorialspoint.hibernate.Studentに設定します。

環境設定

次に、このプロジェクトにはたくさんのjarファイルが必要です。添付されているのは、必要なJARファイルの完全なリストのスクリーンショットです-

ほとんどのJARファイルは、Strutsディストリビューションの一部として取得できます。glassfish、websphere、jbossなどのアプリケーションサーバーがインストールされている場合は、残りのjarファイルの大部分をappserverのlibフォルダーから取得できます。そうでない場合は、ファイルを個別にダウンロードできます-

  • Hibernatejarファイル-Hibernate.org

  • Strutshibernateプラグイン-Strutshibernateプラグイン

  • JTAファイル-JTAファイル

  • Dom4jファイル-Dom4j

  • log4jファイル-log4j

残りのファイルは、Struts2ディストリビューションから取得できるはずです。

Hibernateクラス

ここで、Hibernate統合に必要な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クラスです。 studentHibernate仕様によるテーブル。学生テーブルの列名に対応するプロパティ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<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クラスは、Studentクラスのデータアクセス層です。すべての学生を一覧表示してから、新しい学生レコードを保存する方法があります。

アクションクラス

次のファイル AddStudentAction.javaアクションクラスを定義します。ここには、execute()とlistStudents()の2つのアクションメソッドがあります。execute()メソッドは、新しい学生レコードを追加するために使用されます。これを実現するために、daoのsave()メソッドを使用します。

もう1つのメソッドlistStudents()は、学生を一覧表示するために使用されます。daoのlistメソッドを使用して、すべての学生のリストを取得します。

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 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インターフェースを実装していることに気付くでしょう。これは、アクションクラスが個々のプロパティ(firstName、lastNameなど)ではなく、具象モデルクラス(Studentなど)を処理している場合に使用されます。ModelAwareインターフェースでは、モデルを返すメソッドを実装する必要があります。この場合、「student」オブジェクトを返します。

ビューファイルを作成する

作成しましょう 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」に送信するフォームがあります。firstName、lastName、およびマークを取り込みます。addStudentアクションはModelAwareの「AddSudentAction」に関連付けられているため、firstName、lastName、およびマークの値が自動的に入力された学生Beanが自動的に作成されます。

下部のセクションで、学生リストを確認します(AddStudentAction.javaを参照)。リストを繰り返し処理し、名、姓、マークの値をテーブルに表示します。

ストラット構成

を使用してすべてをまとめましょう 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.tutorialspoint.struts2.AddStudentAction">
         <result name = "success" type = "redirect">
            listStudents
         </result>
      </action>

      <action name = "listStudents" method = "listStudents"
         class = "com.tutorialspoint.struts2.AddStudentAction">
         <result name = "success">/students.jsp</result>
      </action>

   </package>
</struts>

ここで注意すべき重要な点は、パッケージ「myhibernate」が「hibernate-default」と呼ばれるstruts2のデフォルトパッケージを拡張していることです。次に、addStudentとlistStudentsの2つのアクションを宣言します。addStudentは、AddStudentActionクラスでexecute()を呼び出し、成功すると、listStudentsアクションメソッドを呼び出します。

listStudentアクションメソッドは、AddStudentActionクラスのlistStudents()を呼び出し、student.jspをビューとして使用します。

次に、プロジェクト名を右クリックして、 Export > WAR FileWarファイルを作成します。次に、このWARをTomcatのwebappsディレクトリにデプロイします。最後に、Tomcatサーバーを起動し、URLにアクセスしてみますhttp://localhost:8080/HelloWorldStruts2/student.jsp。これにより、次の画面が表示されます-

上のセクションには、新しい学生レコードの値を入力するためのフォームが表示され、下のセクションには、データベース内の学生が一覧表示されます。先に進み、新しい学生レコードを追加して、送信を押します。[送信]をクリックするたびに、画面が更新され、更新されたリストが表示されます。