Exemple d’intégration Hibernate Struts 2

Exemple d'intégration Struts 2 + Hibernate

Téléchargez-le -Struts2-Hibernate-Integration-Example.zip

Dans Struts2, il n'y a pas de plugins officiels pour intégrer le framework Hibernate. Mais, vous pouvez contourner les étapes suivantes:

  1. Enregistrez unServletContextListener personnalisé.

  2. Dans la classeServletContextListener, initialisez lesHibernate session and store it into the servlet context.

  3. Dans la classe d'action,get the Hibernate session from the servlet context, et exécutez la tâche de mise en veille prolongée normalement.

Voir la relation:

Struts 2 <-- (Servlet Context) ---> Hibernate <-----> Database

Dans ce tutoriel, il montre un module client simple (fonction d'ajout et de liste), développé enStruts 2, et effectue l'opération de base de données avecHibernate. La partie intégration utilise le mécanisme indiqué ci-dessus (stocker et récupérer la session Hibernate dans le contexte de servlet).

Cette solution de contournement est très similaire avec lesStruts 1.x and Hibernate integration classiques, seul le Struts 1.x classique utilise les plugins de Struts; Pendant que Struts 2 utilise l'écouteur de servlet générique.

1. Structure du projet

Voir cette structure de dossier de projet complète.

Struts 2 Hibernate integration example

2. Script de table MySQL

Créez une table client pour la démonstration. Voici le script de table SQL.

DROP TABLE IF EXISTS `example`.`customer`;
CREATE TABLE  `example`.`customer` (
  `CUSTOMER_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(45) NOT NULL,
  `ADDRESS` varchar(255) NOT NULL,
  `CREATED_DATE` datetime NOT NULL,
  PRIMARY KEY (`CUSTOMER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

3. Dépendance

Obtenez les bibliothèques de dépendance Struts2, Hibernate et MySQL.

//...
    
    
            org.apache.struts
        struts2-core
        2.1.8
        

    
    
        mysql
        mysql-connector-java
        5.1.9
    

    
    
        org.hibernate
        hibernate
        3.2.7.ga
    

    
    
        dom4j
        dom4j
        1.6.1
    

    
        commons-logging
        commons-logging
        1.1.1
    

    
        commons-collections
        commons-collections
        3.2.1
    

    
        cglib
        cglib
        2.2
    
    

    
    
        antlr
        antlr
        2.7.7
    
    
//...

4. Hibernate Stuffs

Le modèle Hibernate et les éléments de configuration.

Customer.java - Crée une classe pour la table client.

package com.example.customer.model;

import java.util.Date;

public class Customer implements java.io.Serializable {

    private Long customerId;
    private String name;
    private String address;
    private Date createdDate;

    //getter and setter methods
}

Customer.hbm.xml - Fichier de mappage Hibernate pour le client.



    

        
            
            
        
        
            
        
        
            
        
        
            
        
    

hibernate.cfg.xml - Fichier de configuration de la base de données Hibernate.



  
    false
    password
    jdbc:mysql://localhost:3306/example
    root
    org.hibernate.dialect.MySQLDialect
    true
    true
    false
    
  

5. Hibernate ServletContextListener

Créez unServletContextListener et initialisez leHibernate session and store it into the servlet context.

HibernateListener .java

package com.example.listener;

import java.net.URL;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateListener implements ServletContextListener{

    private Configuration config;
    private SessionFactory factory;
    private String path = "/hibernate.cfg.xml";
    private static Class clazz = HibernateListener.class;

    public static final String KEY_NAME = clazz.getName();

    public void contextDestroyed(ServletContextEvent event) {
      //
    }

    public void contextInitialized(ServletContextEvent event) {

     try {
            URL url = HibernateListener.class.getResource(path);
            config = new Configuration().configure(url);
            factory = config.buildSessionFactory();

            //save the Hibernate session factory into serlvet context
            event.getServletContext().setAttribute(KEY_NAME, factory);
      } catch (Exception e) {
             System.out.println(e.getMessage());
       }
    }
}

Enregistrez l'écouteur dans le fichier web.xml.
web.xml




  Struts 2 Web Application

  
    struts2
    
      org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    
  

  
    struts2
    /*
  

  
    
      com.example.listener.HibernateListener
    
  

6. action

Dans la classe Action,get the Hibernate session from the servlet context et exécutez la tâche de mise en veille prolongée normalement.

CustomerAction.java

package com.example.customer.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.struts2.ServletActionContext;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.example.customer.model.Customer;
import com.example.listener.HibernateListener;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class CustomerAction extends ActionSupport
    implements ModelDriven{

    Customer customer = new Customer();
    List customerList = new ArrayList();

    public String execute() throws Exception {
        return SUCCESS;
    }

    public Object getModel() {
        return customer;
    }

    public List getCustomerList() {
        return customerList;
    }

    public void setCustomerList(List customerList) {
        this.customerList = customerList;
    }

    //save customer
    public String addCustomer() throws Exception{

        //get hibernate session from the servlet context
        SessionFactory sessionFactory =
             (SessionFactory) ServletActionContext.getServletContext()
                     .getAttribute(HibernateListener.KEY_NAME);

        Session session = sessionFactory.openSession();

        //save it
        customer.setCreatedDate(new Date());

        session.beginTransaction();
        session.save(customer);
        session.getTransaction().commit();

        //reload the customer list
        customerList = null;
        customerList = session.createQuery("from Customer").list();

        return SUCCESS;

    }

    //list all customers
    public String listCustomer() throws Exception{

        //get hibernate session from the servlet context
        SessionFactory sessionFactory =
             (SessionFactory) ServletActionContext.getServletContext()
                     .getAttribute(HibernateListener.KEY_NAME);

        Session session = sessionFactory.openSession();

        customerList = session.createQuery("from Customer").list();

        return SUCCESS;

    }
}

7. Page JSP

Page JSP pour ajouter et lister le client.

customer.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>





Struts 2 + Hibernate integration example

Add Customer

All Customers

Customer Id Name Address Created Date


8. struts.xml

Liez le tout ~




  

  

    
       pages/customer.jsp
    

    
        pages/customer.jsp
    

  

9. Demo

Struts 2 Hibernate Add Customer

Remplissez les champs de nom et d'adresse, cliquez sur le bouton Soumettre, les détails du client insérés seront immédiatement répertoriés.

Struts2 Hibernate List Customer