Hibernate - sauvegarder l’image dans la base de données

Hibernate - enregistrer l'image dans la base de données

Pour enregistrer une image dans la base de données, vous devez définir une colonne de table comme type de données blob dans MySQL, ou type binaire équivalent dans d'autres bases de données. Côté Hibernate, vous pouvez déclarer une variable de tableau d'octets pour stocker les données d'image.

Téléchargez cet exemple -Hibernate-Image-Example.zip

Voici un projet Maven pour utiliser Hibernate pour enregistrer une image dans la table MySQL ‘avatar’.

1. Création de table

Un script de création de table d'avatar dans MySQL.

CREATE TABLE  `example`.`avatar` (
  `AVATAR_ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `IMAGE` blob NOT NULL,
  PRIMARY KEY (`AVATAR_ID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

2. Dépendance Maven

Ajoutez la dépendance Hibernate et MySQL.

pom.xml


  4.0.0
  com.example.common
  HibernateExample
  jar
  1.0-SNAPSHOT
  HibernateExample
  http://maven.apache.org
  

        
               junit
               junit
               3.8.1
               test
        

        
    
        mysql
        mysql-connector-java
        5.1.9
    

    
    
        hibernate
        hibernate3
        3.2.3.GA
    

    
    
        dom4j
        dom4j
        1.6.1
    

    
        commons-logging
        commons-logging
        1.1.1
    

    
        commons-collections
        commons-collections
        3.2.1
    

    
        cglib
        cglib
        2.2
    
    

  

3. Modèle d'avatar

Créez une classe de modèle pour stocker les données d'avatar. Le type de données d'image est un tableau d'octets.

Avatar.java

package com.example.common;

public class Avatar implements java.io.Serializable {

    private Integer avatarId;
    private byte[] image;

    public Avatar() {
    }

    public Avatar(byte[] image) {
        this.image = image;
    }

    public Integer getAvatarId() {
        return this.avatarId;
    }

    public void setAvatarId(Integer avatarId) {
        this.avatarId = avatarId;
    }

    public byte[] getImage() {
        return this.image;
    }

    public void setImage(byte[] image) {
        this.image = image;
    }

}

4. Fichier de mappage

Créez un fichier de mappage Hibernate pour l'avatar. Le type de données pour l'image est binaire.

Avatar.hbm.xml




    
        
            
            
        
        
            
        
    

5. Fichier de configuration de mise en veille prolongée

Fichier de configuration Hibernate pour définir la connexion à la base de données et le fichier de mappage Hibernate.

hibernate.cfg.xml



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

6. Utilitaire de mise en veille prolongée

Une classe d'utilitaire Hibernate pour obtenir la connexion à la base de données.

HibernateUtil.java

package com.example.persistence;

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

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration().configure().buildSessionFactory();
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }

}

7. Exécuter

Lisez un fichier «C:\mavan-hibernate-image-mysql.gif» et enregistrez-le dans la base de données, puis récupérez-le de la base de données et enregistrez-le dans un autre fichier image «C:\test.gif».

package com.example.common;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.hibernate.Session;
import com.example.persistence.HibernateUtil;

public class App
{
    public static void main( String[] args )
    {
        System.out.println("Hibernate save image into database");
        Session session = HibernateUtil.getSessionFactory().openSession();

        session.beginTransaction();

        //save image into database
        File file = new File("C:\\mavan-hibernate-image-mysql.gif");
        byte[] bFile = new byte[(int) file.length()];

        try {
         FileInputStream fileInputStream = new FileInputStream(file);
         //convert file into array of bytes
         fileInputStream.read(bFile);
         fileInputStream.close();
        } catch (Exception e) {
         e.printStackTrace();
        }

        Avatar avatar = new Avatar();
        avatar.setImage(bFile);

        session.save(avatar);

        //Get image from database
        Avatar avatar2 = (Avatar)session.get(Avatar.class, avatar.getAvatarId());
        byte[] bAvatar = avatar2.getImage();

        try{
            FileOutputStream fos = new FileOutputStream("C:\\test.gif");
            fos.write(bAvatar);
            fos.close();
        }catch(Exception e){
            e.printStackTrace();
        }

        session.getTransaction().commit();
    }
}

Terminé.