Struts 2 ve Hibernate Entegrasyonu

Hibernate, açık kaynak GNU Kısıtlı Genel Kamu Lisansı (LGPL) altında lisanslanan ve indirmesi ücretsiz olan yüksek performanslı bir Nesne / İlişkisel kalıcılık ve sorgu hizmetidir. Bu bölümde. Hibernate ile Struts 2 entegrasyonunun nasıl sağlanacağını öğreneceğiz. Hazırda Bekletme konusuna aşina değilseniz, Hazırda Bekletme eğitimimize göz atabilirsiniz .

Veritabanı Kurulumu

Bu eğitim için, "struts2_tutorial" MySQL veritabanını kullanacağım. Bu veritabanına makinemde "root" kullanıcı adını kullanarak ve parola olmadan bağlanıyorum. Öncelikle aşağıdaki betiği çalıştırmanız gerekiyor. Bu komut dosyası adında yeni bir tablo oluştururstudent ve bu tabloda birkaç kayıt oluşturur -

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);

Hazırda Bekletme Yapılandırması

Daha sonra hazırda bekletme modunun yapılandırma dosyası olan hibernate.cfg.xml dosyasını oluşturalım.

<?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>

Hazırda bekleme yapılandırma dosyasını gözden geçirelim. Öncelikle MySQL sürücüsü kullandığımızı ilan ettik. Daha sonra veritabanına bağlanmak için jdbc url'sini ilan ettik. Ardından bağlantının kullanıcı adını, şifresini ve havuz boyutunu açıkladık. Ayrıca "show_sql" öğesini true olarak etkinleştirerek SQL'i günlük dosyasında görmek istediğimizi belirttik. Bu özelliklerin ne anlama geldiğini anlamak için lütfen hazırda bekletme eğitimini okuyun.

Son olarak, mapping sınıfını bu bölümde oluşturacağımız com.tutorialspoint.hibernate.Student olarak ayarladık.

Çevre Kurulumu

Daha sonra bu proje için çok sayıda kavanoz gerekiyor. Ekte, gerekli JAR dosyalarının tam listesinin bir ekran görüntüsü bulunmaktadır -

JAR dosyalarının çoğu, destek dağıtımınızın bir parçası olarak edinilebilir. Glassfish, websphere veya jboss gibi bir uygulama sunucunuz kuruluysa, kalan jar dosyalarının çoğunu appserver'ın lib klasöründen alabilirsiniz. Değilse, dosyaları ayrı ayrı indirebilirsiniz -

  • Hazırda bekletme jar dosyalarını - Hibernate.org

  • Struts hazırda bekletme eklentisi - Struts hibernate plugin

  • JTA dosyaları - JTA dosyaları

  • Dom4j dosyaları - Dom4j

  • log4j dosyaları - log4j

Dosyaların geri kalanı, Struts2 dağıtımınızdan alabilmelisiniz.

Hazırda Bekletme Sınıfları

Şimdi hazırda bekletme entegrasyonu için gerekli java sınıflarını oluşturalım. Aşağıdakilerin içeriğiStudent.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;
   }
}

Bu, bir POJO sınıfıdır. studentHazırda bekletme özelliğine göre tablo. Öğrenci tablosunun sütun adlarına karşılık gelen id, firstName ve lastName özelliklerine sahiptir. Sonra yaratalımStudentDAO.java aşağıdaki gibi dosya -

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 sınıfı, Öğrenci sınıfı için veri erişim katmanıdır. Tüm öğrencileri listelemek ve ardından yeni bir öğrenci kaydı kaydetmek için yöntemleri vardır.

Eylem Sınıfı

Dosya takip AddStudentAction.javaeylem sınıfımızı tanımlar. Burada iki eylem yöntemimiz var - execute () ve listStudents (). Execute () yöntemi yeni öğrenci kaydını eklemek için kullanılır. Bunu başarmak için dao'nun save () yöntemini kullanıyoruz.

Diğer yöntem olan listStudents () öğrencileri listelemek için kullanılır. Tüm öğrencilerin listesini almak için dao'nun liste yöntemini kullanıyoruz.

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 arayüzünü uyguladığımızı fark edeceksiniz. Bu, eylem sınıfınız tek tek özelliklerin (firstName, lastName gibi) aksine somut bir model sınıfıyla (Öğrenci gibi) ilgilendiğinde kullanılır. ModelAware arabirimi, modeli döndürmek için bir yöntem uygulamanızı gerektirir. Bizim durumumuzda "öğrenci" nesnesini iade ediyoruz.

Görünüm Dosyaları Oluşturun

Şimdi oluşturalım student.jsp aşağıdaki içeriğe sahip dosyayı görüntüleyin -

<%@ 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 oldukça basittir. Üst bölümde, "addStudent.action" a gönderen bir formumuz var. FirstName, lastName ve işaretleri alır. AddStudent eylemi ModelAware "AddSudentAction" a bağlı olduğundan, firstName, lastName değerleri ile otomatik olarak bir öğrenci fasulyesi oluşturulur ve otomatik olarak doldurulur.

Alt bölümde, öğrenciler listesine göz atıyoruz (bkz. AddStudentAction.java). Listeyi yineleriz ve bir tablodaki ad, soyad ve işaretler için değerleri görüntüleriz.

Dikmeler Yapılandırması

Kullanarak hepsini bir araya getirelim 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>

Burada dikkat edilmesi gereken önemli nokta, "myhibernate" paketimizin "hibernate-default" adı verilen struts2 varsayılan paketini genişletmesidir. Daha sonra iki eylem bildiriyoruz - addStudent ve listStudents. addStudent, AddStudentAction sınıfında execute () öğesini çağırır ve ardından başarıya ulaşıldığında listStudents eylem yöntemini çağırır.

ListStudent eylem yöntemi, AddStudentAction sınıfında listStudents () öğesini çağırır ve görünüm olarak student.jsp'yi kullanır.

Şimdi, proje adına sağ tıklayın ve Export > WAR FileSavaş dosyası oluşturmak için. Ardından bu SAVAŞI Tomcat'in webapps dizinine yerleştirin. Son olarak, Tomcat sunucusunu başlatın ve URL'ye erişmeyi deneyinhttp://localhost:8080/HelloWorldStruts2/student.jsp. Bu, aşağıdaki ekranı oluşturacaktır -

Üst bölümde, yeni bir öğrenci kaydı için değerleri girmek için bir form alıyoruz ve alt bölüm, öğrencileri veritabanında listeliyor. Devam edin ve yeni bir öğrenci kaydı ekleyin ve gönder düğmesine basın. Gönder'i her tıkladığınızda ekran yenilenecek ve size güncellenmiş bir liste gösterecektir.