Struts 2와 Hibernate 통합

Hibernate는 오픈 소스 GNU Lesser General Public License (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 구성

다음으로 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>

최대 절전 설정 파일을 살펴 보겠습니다. 먼저 MySQL 드라이버를 사용하고 있다고 선언했습니다. 그런 다음 데이터베이스에 연결하기위한 jdbc URL을 선언했습니다. 그런 다음 연결의 사용자 이름, 암호 및 풀 크기를 선언했습니다. 또한 "show_sql"을 true로 설정하여 로그 파일에서 SQL을보고 싶다고 표시했습니다. 이러한 속성의 의미를 이해하려면 최대 절전 모드 자습서를 참조하십시오.

마지막으로이 장에서 생성 할 매핑 클래스를 com.tutorialspoint.hibernate.Student로 설정합니다.

환경 설정

다음으로이 프로젝트에는 많은 항아리가 필요합니다. 첨부는 필요한 JAR 파일의 전체 목록의 스크린 샷입니다.

대부분의 JAR 파일은 struts 배포의 일부로 얻을 수 있습니다. glassfish, websphere 또는 jboss와 같은 응용 프로그램 서버가 설치되어있는 경우 응용 프로그램 서버의 lib 폴더에서 나머지 jar 파일 대부분을 가져올 수 있습니다. 그렇지 않은 경우 파일을 개별적으로 다운로드 할 수 있습니다.

  • Hibernate jar 파일 -Hibernate.org

  • Struts Hibernate 플러그인 − Struts Hibernate 플러그인

  • JTA 파일 -JTA 파일

  • Dom4j 파일 -Dom4j

  • log4j 파일 -log4j

나머지 파일은 Struts2 배포판에서 가져올 수 있습니다.

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 ()의 두 가지 작업 메서드가 있습니다. 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 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.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 및 마크에 대한 값이 자동으로 채워지는 학생 빈이 자동으로 생성됩니다.

하단 섹션에서 학생 목록을 살펴 봅니다 (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.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의 두 가지 작업을 선언합니다. addStudent는 AddStudentAction 클래스에서 execute ()를 호출 한 다음 성공하면 listStudents 작업 메서드를 호출합니다.

listStudent 작업 메서드는 AddStudentAction 클래스에서 listStudents ()를 호출하고 student.jsp를보기로 사용합니다.

이제 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 Export > WAR FileWar 파일을 만듭니다. 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다. 마지막으로 Tomcat 서버를 시작하고 URL에 액세스하십시오.http://localhost:8080/HelloWorldStruts2/student.jsp. 다음 화면이 생성됩니다.

상단 섹션에는 새 학생 기록에 대한 값을 입력하는 양식이 있고 하단 섹션에는 데이터베이스의 학생이 나열됩니다. 계속해서 새 학생 기록을 추가하고 제출을 누르십시오. 제출을 클릭 할 때마다 화면이 새로 고쳐지고 업데이트 된 목록이 표시됩니다.