- Hibernate 教程
- Hibernate - 首頁
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架構
- Hibernate - 環境配置
- Hibernate - 配置
- Hibernate - 會話 (Sessions)
- Hibernate - 持久化類
- Hibernate - 對映檔案
- Hibernate - 對映型別
- Hibernate - 例子
- Hibernate - O/R 對映
- Hibernate - 級聯型別
- Hibernate - 註解
- Hibernate - 查詢語言 (HQL)
- Hibernate - Criteria 查詢
- Hibernate - 原生 SQL
- Hibernate - 快取
- Hibernate - 實體生命週期
- Hibernate - 批次處理
- Hibernate - 攔截器
- Hibernate - ID 生成器
- Hibernate - 儲存圖片
- Hibernate - log4j 整合
- Hibernate - Spring 整合
- Hibernate - Struts 2 整合
- Hibernate - Web 應用
- 對映表示例
- Hibernate - 基於層次結構的表對映 (Table Per Hierarchy)
- Hibernate - 基於具體類的表對映 (Table Per Concrete Class)
- Hibernate - 基於子類的表對映 (Table Per Subclass)
- Hibernate 有用資源
- Hibernate - 問答
- Hibernate - 快速指南
- Hibernate - 有用資源
- Hibernate - 討論
Hibernate - 儲存圖片
我們經常需要將圖片或大型文件儲存到資料庫中。資料庫提供將字元或影像檔案作為BLOB(二進位制大型物件)或CLOB(字元大型物件)儲存的功能。在資料庫中,型別通常為BLOB/LONGBLOB, LONGTEXT 等。
為了指示實體具有一個需要儲存為BLOB,CLOB的欄位,可以使用@Lob註解。例如,考慮以下程式碼片段:
@Entity
@Table(name = "save_image")
public class LobEntity {
...
@Lob
@Column(name = "image")
private byte[] image;
...
}
讓我們詳細討論一下在Hibernate中儲存圖片,並透過一個例子進行說明。
建立對映類
讓我們建立一個POJO類,其資料將持久化到資料庫中。
LobEntity.java
package com.tutorialspoint;
import javax.persistence.*;
@Entity
@Table(name = "save_image")
public class LobEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Lob
@Column(name = "image")
private byte[] image;
public byte [] getImage() {
return image;
}
public void setImage(byte[] imageData) {
this.image = imageData;
}
}
建立Hibernate配置檔案
現在建立一個Hibernate配置檔案,用於資料庫和其他細節。
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 5.3//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hbm2ddl.auto">update</property>
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
<property name="connection.url">jdbc:mysql:///TUTORIALSPOINT</property>
<property name="connection.username">root</property>
<property name="connection.password">guest123</property>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<mapping class="com.tutorialspoint.LobEntity"/>
</session-factory>
</hibernate-configuration>
注意,在檔案中,mapping元素使用class而不是resource。並且將hbm2ddl.auto屬性設定為update會自動建立表(如果表不存在)。
建立應用程式類
最後,我們將建立一個包含main()方法的應用程式類來執行應用程式。我們將使用此應用程式來測試基於層次結構的表對映。
SaveBlob.java
package com.tutorialspoint;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import java.io.*;
public class SaveBlob {
public static void main(String[] args) throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("C:\\Users\\Saikat\\OneDrive\\Pictures\\almoural_castle.jpg");
byte[] bytes = new byte[fis.available()];
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
SessionFactory factory = meta.getSessionFactoryBuilder().build();
Session session = factory.openSession();
Transaction t = session.beginTransaction();
LobEntity lob = new LobEntity();
lob.setImage(bytes);
session.save(lob);
session.getTransaction().commit();
fis.close();
System.out.println("Successfully inserted image in table.");
}
}
編譯和執行
執行SaveBlob二進位制檔案以執行程式。
輸出
您將得到以下結果,並且記錄將被建立到save_image表中。
$java SaveBlob Successfully inserted image in table.
如果您檢查您的save_image表,它應該包含以下記錄:
mysql> select id from save_image; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec) mysql> desc save_image; +-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | id | bigint | NO | PRI | NULL | auto_increment | | image | longblob | YES | | NULL | | +-------+----------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)
廣告