- 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://127.0.0.1/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)
广告