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