Чтобы сохранить изображение в базу данных, вам необходимо определить столбец таблицы как тип данных blob в MySQL или эквивалентный двоичный тип в других базах данных. В режиме гибернации вы можете объявить переменную массива байтов для хранения данных изображения.
Вот проект Maven для использования режима гибернации для сохранения изображения в таблице MySQL ‘ аватар ‘.
1. Создание таблицы
Скрипт создания таблицы аватаров в MySQL.
CREATE TABLE `mkyong`.`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. Зависимость от Maven
Добавьте зависимость Hibernate и MySQL.
Добавьте зависимость Hibernate и MySQL.
4.0.0 com.mkyong.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. Модель Аватара
Создайте класс модели для хранения данных аватара. Тип данных изображения – массив байтов.
Тип данных изображения – массив байтов.
package com.mkyong.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. Файл сопоставления
Создайте файл отображения гибернации для аватара. Тип данных для изображения – двоичный.
Тип данных для изображения – двоичный.
5. Файл конфигурации гибернации
Файл конфигурации гибернации для определения подключения к базе данных и файла сопоставления гибернации.
Файл конфигурации гибернации для определения подключения к базе данных и файла сопоставления гибернации.
false com.mysql.jdbc.Driver password jdbc:mysql://localhost:3306/mkyong root org.hibernate.dialect.MySQLDialect true
6. Утилита гибернации
Служебный класс гибернации для подключения к базе данных.
Служебный класс гибернации для подключения к базе данных.
package com.mkyong.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. Запустите его
Прочитать файл ” C:\\mavan-hibernate-image-mysql.gif “и сохраните его в базе данных, позже получите его из базы данных и сохраните в другом файле изображения” C:\\test.gif “.
package com.mkyong.common; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.hibernate.Session; import com.mkyong.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(); } }
Сделано.
Оригинал: “https://mkyong.com/hibernate/hibernate-save-image-into-database/”