在数据表对应的实体内中长文本与二进制文件对应的属性为:
- 长文本对应String类型
- 二进制文件对应 Blob类型(java.sql.Blob)
//长文本
private String context;
//二进制
private Blob img;
在配置文件中 通过property标签的 type属性设置:
- 二进制文件 type="blob"
- 长文本 "clob"
- 两者可以通过property标签sql-type属性进行精确指定
<!--二进制 -->
<property name="img" type="blob"></property>
<!-- 长文本 -->
<!-- <property name="context" type="clob"></property> -->
<!-- 长文本 精确指定 -->
<property name="context">
<column name="CONTEXT" sql-type="mediumtext"></column>
</property>
代码中使用:
长文本和普通文本方式一样
- 二进制文件存放数据库
主要解决Blob对象如何得来可以使用Hibernate提供的工具
/**
* test二进制保存
*/
public static void testSaveBlob() {
StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
News news = new News("上海", "好久没有下雨", new Date(new Date().getTime()));
news.setContext("我的长文本");
// 二进制保存
try {
//文件输入流
InputStream stream = new FileInputStream("xxxxx.png");
Blob img = Hibernate.getLobCreator(session).createBlob(stream, stream.available());
news.setImg(img);
} catch (Exception e) {
e.printStackTrace();
}
//保存
session.save(news);
transaction.commit();
session.close();
sessionFactory.close();
}
- 二进制文件从数据库中读取
通过获取数据库Blob对象获取流
/**
* test二进制读取
*/
public static void testGetBlob() {
StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
//获取记录
News news = session.get(News.class, 2);
//获取记录中二进制
Blob img = news.getImg();
try {
//获取对应流
InputStream in = img.getBinaryStream();
System.out.println(in.available());
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 获取流
transaction.commit();
session.close();
sessionFactory.close();
}