Arazzo Apache - Hibernate

In questo capitolo discuteremo dell'integrazione di BeanEditForm e Grid componentcon Hibernate. Hibernate si integra nell'arazzo tramite il modulo hibernate. Per abilitare il modulo di ibernazione, aggiungi la dipendenza tapestry-hibernate e facoltativamentehsqldb nel pom.xmlfile. Ora, configura l'ibernazione tramitehibernate.cfg.xml file posizionato nella radice della cartella delle risorse.

pom.xml (parziale)

<dependency> 
   <groupId>org.apache.tapestry</groupId> 
   <artifactId>tapestry-hibernate</artifactId> 
   <version>${tapestry-release-version}</version> 
</dependency>  

<dependency> 
   <groupId>org.hsqldb</groupId> 
   <artifactId>hsqldb</artifactId> 
   <version>2.3.2</version> 
</dependency>

Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC 
   "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
   <session-factory> 
      <property name = "hibernate.connection.driver_class">
         org.hsqldb.jdbcDriver
      </property> 
      <property name = "hibernate.connection.url">
         jdbc:hsqldb:./target/work/sampleapp;shutdown = true
      </property> 
      <property name = "hibernate.dialect">
         org.hibernate.dialect.HSQLDialect
      </property> 
      
      <property name = "hibernate.connection.username">sa</property> 
      <property name = "hibernate.connection.password"></property> 
      <property name = "hbm2ddl.auto">update</property>
      <property name = "hibernate.show_sql">true</property> 
      <property name = "hibernate.format_sql">true</property> 
   </session-factory> 
</hibernate-configuration>

Vediamo come creare il file employee add page utilizzando il componente BeanEditForm e il employee list pageutilizzando il componente Grid. Il livello di persistenza è gestito dal modulo Hibernate.

Crea una classe dipendente e decorala con l'annotazione @Entity. Quindi, aggiungi l'annotazione di convalida per i campi pertinenti e l'ibernazione correlata @Id e @GeneratedValue per il campo id. Inoltre, crea il genere come tipo di enumerazione.

Employee.java

package com.example.MyFirstApplication.entities;  

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id;  
import org.apache.tapestry5.beaneditor.NonVisual; 
import org.apache.tapestry5.beaneditor.Validate;  

@Entity 
public class Employee {  
   @Id 
   @GeneratedValue(strategy = GenerationType.IDENTITY) 
   @NonVisual 
   public Long id;  

   @Validate("required") 
   public String firstName;  
 
   @Validate("required") 
   public String lastName; 

   @Validate("required") 
   public String userName;  

   @Validate("required") 
   public String password;  

   @Validate("required") 
   public String email;  
   public String phone;  

   @Validate("required") 
   public String Street;  

   @Validate("required") 
   public String city;  

   @Validate("required") 
   public String state;  

   @Validate("required,regexp=^\\d{5}(-\\d{4})?$") 
   public String zip; 
} 
Gender.java (enum)  
package com.example.MyFirstApplication.data;  

public enum Gender { 
   Male, Female 
}

Crea la pagina dell'elenco dei dipendenti, ListEmployee.java nella nuova cartella dipendente sotto le pagine e il file modello corrispondente ListEmployee.tml all'indirizzo /src/main/resources/pages/employeecartella. Tapestry fornisce un breve URL per le sottocartelle rimuovendo i dati ripetuti.

Ad esempio, è possibile accedere alla pagina ListEmployee tramite un normale URL - (/ dipendente / listemployee) e tramite l'URL breve - (/ dipendente / list).

Iniettare la sessione Hibernate nella pagina elenco utilizzando l'annotazione @Inject. Definisci una proprietàgetEmployeesnella pagina dell'elenco e popolarla con i dipendenti utilizzando l'oggetto sessione iniettato. Completare il codice per la classe dipendente come mostrato di seguito.

ListEmployee.java

package com.example.MyFirstApplication.pages.employee;  

import java.util.List;  
import org.apache.tapestry5.annotations.Import; 
import org.apache.tapestry5.ioc.annotations.Inject;  
import org.hibernate.Session; 
import com.example.MyFirstApplication.entities.Employee; 
import org.apache.tapestry5.annotations.Import;  
@Import(stylesheet="context:mybootstrap/css/bootstrap.css") 

public class ListEmployee { 
   @Inject 
   private Session session; 
   
   public List<Employee> getEmployees() { 
      return session.createCriteria(Employee.class).list(); 
   } 
}

Crea il file modello per la classe ListEmployee. Il modello avrà due componenti principali, che sono:

  • PageLink - Crea pagina di collegamento dei dipendenti.

  • Grid- Utilizzato per visualizzare i dettagli del dipendente. Il componente griglia ha attributi di origine per inserire l'elenco dei dipendenti e includere attributi per includere i campi da visualizzare.

ListEmployee.tml (elenca tutti i dipendenti)

<html t:type = "simplelayout" title = "List Employee" 
   xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd"> 
   <h1>Employees</h1> 
   
   <ul> 
      <li><t:pagelink page = "employee/create">Create new employee</t:pagelink></li> 
   </ul>  
   <t:grid source = "employees" 
      include = "userName,firstName,lastName,gender,dateOfBirth,phone,city,state"/>  
</html>

Crea un file modello di creazione dei dipendenti e includi il componente BeanEditForm. Il componente ha i seguenti attributi:

  • object - Include la fonte.

  • reorder - Definisce l'ordine dei campi da renderizzare.

  • submitlabel - Il messaggio del pulsante di invio del modulo

La codifica completa è la seguente:

<html t:type = "simplelayout" title = "Create New Address" 
   xmlns:t = "http://tapestry.apache.org/schema/tapestry_5_4.xsd">  
   <t:beaneditform  
      object = "employee"  
      submitlabel = "message:submit-label" 
      reorder = "userName,password,firstName,lastName,
      dateOfBirth,gender,email,phone,s treet,city,state,zip" />  
</html>

Creare la classe di creazione del dipendente e includere la sessione, la proprietà del dipendente, la pagina dell'elenco (collegamento di navigazione) e definire l'evento OnSuccess (luogo per aggiornare i dati) del componente. I dati della sessione vengono mantenuti nel database utilizzando la sessione di ibernazione.

La codifica completa è la seguente:

package com.example.MyFirstApplication.pages.employee;  

import com.example.MyFirstApplication.entities.Employee; 
import com.example.MyFirstApplication.pages.employee.ListEmployee; 
import org.apache.tapestry5.annotations.InjectPage; 
import org.apache.tapestry5.annotations.Property;  
import org.apache.tapestry5.hibernate.annotations.CommitAfter; 
import org.apache.tapestry5.ioc.annotations.Inject; 
import org.hibernate.Session;  

public class CreateEmployee { 
   @Property 
   private Employee employee;  
   @Inject 
   private Session session;  
   @InjectPage 
   private ListEmployee listPage;  
   @CommitAfter 
   Object onSuccess() { 
      session.persist(employee);  
      return listPage; 
   } 
}

Aggiungi il CreateEmployee.propertiesfile e includere il messaggio da utilizzare nelle convalide del modulo. Il codice completo è il seguente:

zip-regexp=^\\d{5}(-\\d{4})?$ 
zip-regexp-message = Zip Codes are five or nine digits. Example: 02134 or 901251655. 
submit-label = Create Employee

Lo screenshot della pagina di creazione dei dipendenti e della pagina di elenco sono mostrati di seguito: