Tapiz Apache - Hibernate

En este capítulo, discutiremos sobre la integración de BeanEditForm y Grid componentcon Hibernate. Hibernate está integrado en el tapiz a través del módulo de hibernación. Para habilitar el módulo de hibernación, agregue la dependencia tapestry-hibernate y opcionalmentehsqldb en el pom.xmlarchivo. Ahora, configure hibernación a través delhibernate.cfg.xml archivo ubicado en la raíz de la carpeta de recursos.

pom.xml (parcial)

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

Veamos cómo crear el employee add page utilizando el componente BeanEditForm y el employee list pageutilizando el componente Grid. La capa de persistencia es manejada por el módulo Hibernate.

Crea una clase para empleados y decórala con la anotación @Entity. Luego, agregue la anotación de validación para los campos relevantes y anotación relacionada con hibernación @Id y @GeneratedValue para el campo de identificación. Además, cree género como tipo de enumeración.

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 
}

Cree la página de la lista de empleados, ListEmployee.java en la nueva carpeta empleado en las páginas y el archivo de plantilla correspondiente ListEmployee.tml en /src/main/resources/pages/employeecarpeta. Tapestry proporciona una URL corta para las subcarpetas al eliminar los datos repetidos.

Por ejemplo, se puede acceder a la página ListEmployee mediante una URL normal - (/ employee / listemployee) y mediante la URL corta - (/ employee / list).

Inyecte la sesión de Hibernate en la página de la lista usando la anotación @Inject. Definir una propiedadgetEmployeesen la página de lista y rellénela con los empleados que utilizan el objeto de sesión inyectado. Complete el código para la clase de empleado como se muestra a continuación.

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

Cree el archivo de plantilla para la clase ListEmployee. La plantilla tendrá dos componentes principales, que son:

  • PageLink - Crear página de enlace de empleado.

  • Grid- Se utiliza para representar los detalles del empleado. El componente de cuadrícula tiene atributos de fuentes para inyectar la lista de empleados e incluye atributos para incluir los campos que se van a representar.

ListEmployee.tml (enumere todos los empleados)

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

Cree un archivo de plantilla de creación de empleados e incluya el componente BeanEditForm. El componente tiene los siguientes atributos:

  • object - Incluye fuente.

  • reorder - Define el orden de los campos a renderizar.

  • submitlabel - El mensaje del botón de envío del formulario

La codificación completa es la siguiente:

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

Cree la clase de creación de empleados e incluya sesión, propiedad de empleado, página de lista (enlace de navegación) y defina el evento OnSuccess (lugar para actualizar los datos) del componente. Los datos de la sesión se conservan en la base de datos mediante la sesión de hibernación.

La codificación completa es la siguiente:

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

Añade el CreateEmployee.propertiesarchivo e incluir el mensaje que se utilizará en las validaciones de formularios. El código completo es el siguiente:

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

La captura de pantalla de la página de creación de empleados y la página de listado se muestran a continuación: