Учебники

Struts 2 и Hibernate Integration

Hibernate — это высокопроизводительная служба объектной / реляционной персистентности и запросов, которая лицензируется по открытой общедоступной лицензии GNU Lesser (LGPL) с открытым исходным кодом и бесплатна для загрузки. В этой главе. мы собираемся узнать, как добиться интеграции Struts 2 с Hibernate. Если вы не знакомы с Hibernate, то вы можете проверить наш учебник Hibernate .

Настройка базы данных

Для этого урока я собираюсь использовать базу данных MySQL «struts2_tutorial». Я подключаюсь к этой базе данных на своем компьютере, используя имя пользователя «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.

<?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. Затем мы объявили URL-адрес jdbc для подключения к базе данных. Затем мы объявили имя пользователя, пароль и размер пула соединения. Мы также указали, что хотели бы видеть SQL в файле журнала, включив «show_sql» в true. Пожалуйста, ознакомьтесь с руководством по гибернации, чтобы понять, что означают эти свойства.

Наконец, мы устанавливаем класс отображения на com.tutorialspoint.hibernate.Student, который мы создадим в этой главе.

Настройка Envrionment

Далее вам нужно много банок для этого проекта. Приложенный снимок экрана полного списка необходимых файлов JAR —

Струсы и баночки для спячки

Большинство файлов JAR можно получить как часть вашего дистрибутива Struts. Если у вас установлен сервер приложений, такой как glassfish, websphere или jboss, вы можете получить большинство оставшихся jar-файлов из папки lib сервера приложений. Если нет, вы можете скачать файлы по отдельности —

Файлы банок HibernateHibernate.org

Struts Hibernate плагин — Struts Hibernate плагин

JTA файлы — JTA файлы

Dom4j файлы — Dom4j

файлы log4jlog4j

Остальные файлы вы сможете получить из своего дистрибутива 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<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 () используется для добавления новой записи студента. Для этого мы используем метод save ().

Другой метод, listStudents (), используется для составления списка студентов. Мы используем метод списка дао, чтобы получить список всех студентов.

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. Это используется, когда ваш класс действий имеет дело с конкретным классом модели (например, Student), а не с отдельными свойствами (такими как firstName, lastName). Интерфейс 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», автоматически создается компонент ученика со значениями для 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» расширяет пакет по умолчанию struts2, называемый «hibernate-default». Затем мы объявляем два действия — addStudent и listStudents. addStudent вызывает execute () для класса AddStudentAction, а затем при успешном выполнении вызывает метод действия listStudents.

Метод действия listStudent вызывает метод listStudents () класса AddStudentAction и использует student.jsp в качестве представления.

Теперь щелкните правой кнопкой мыши имя проекта и выберите « Экспорт»> «Файл WAR», чтобы создать файл «War». Затем разверните эту WAR в каталоге веб-приложений Tomcat. Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // localhost: 8080 / HelloWorldStruts2 / student.jsp . Это создаст следующий экран —

Struts и Hibernate Результат

В верхнем разделе мы получаем форму для ввода значений для новой записи студента, а в нижнем разделе перечислены студенты в базе данных. Идите вперед и добавьте новую запись студента и нажмите отправить. Экран будет обновляться и отображать обновленный список при каждом нажатии кнопки «Отправить».