关键代码:
Java
// 大文本
private String content;
// 二进制类型
private Blob image;
// 时间类型
private Date postTime;
Markup
<!-- 映射大文本对象
可以在property节点设置type="java.sql.Blob"(相对来说不这么精确)
也可以在property.column直接设置数据库类型(够精确)
-->
<property name="content" >
<column name="CONTENT" sql-type="mediumtext"/>
</property>
<!-- 映射时间 -->
<property name="postTime" type="java.util.Date">
<column name="POSTTIME" ></column>
</property>
<!-- 映射二进制对象 -->
<property name="image" >
<column name="IMAGE" sql-type="mediumblob"></column>
</property>Q
详细:
News.java:
Java
package com.shuoeasy.test;
import java.sql.Blob;
import java.util.Date;
public class News {
private int id;
private String title;
// 大文本
private String content;
// 二进制类型
private Blob image;
// 时间类型
private Date postTime;
public News(){}
public News(String title, String content) {
super();
this.title = title;
this.content = content;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPostTime() {
return postTime;
}
public void setPostTime(Date postTime) {
this.postTime = postTime;
}
public Blob getImage() {
return image;
}
public void setImage(Blob image) {
this.image = image;
}
@Override
public String toString() {
return "News [id=" + id + ", title=" + title + ", content=" + content + ", image=" + image + ", postTime="
+ postTime + "]";
}
}
News.hbm.xml:
Markup
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-6-25 14:50:51 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.shuoeasy.test.News" table="NEWS">
<id name="id" type="int">
<column name="ID" />
<!-- 指定主键的生成方式,native:使用数据库本地方式 -->
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<!-- 映射大文本对象
可以在property节点设置type="java.sql.Blob"(相对来说不这么精确)
也可以在property.column直接设置数据库类型(够精确)
-->
<property name="content" >
<column name="CONTENT" sql-type="mediumtext"/>
</property>
<!-- 映射时间 -->
<property name="postTime" type="java.util.Date">
<column name="POSTTIME" ></column>
</property>
<!-- 映射二进制对象 -->
<property name="image" >
<column name="IMAGE" sql-type="mediumblob"></column>
</property>
</class>
</hibernate-mapping>
AppTest.java
Java
package com.shuoeasy.test;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.SQLException;
import java.util.Date;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest {
Session session;
SessionFactory sf;
@Before
public void init() {
Configuration conf = new Configuration().configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
sf = conf.buildSessionFactory((org.hibernate.service.ServiceRegistry) sr);
session = sf.openSession();
session.beginTransaction();
System.out.println("init");
}
@After
public void destory() {
session.getTransaction().commit();
session.close();
sf.close();
System.out.println("dectory");
}
@Test
public void testInsert() throws IOException{
News news = new News("标题","内容");
// 保存时间数据
news.setPostTime(new Date());
// 保存二进制数据
InputStream stream = new FileInputStream("data/1.jpg");
Blob image = Hibernate.getLobCreator(session).createBlob(stream, stream.available());
news.setImage(image);
session.save(news);
}
@Test
public void testGet() throws SQLException {
News news = (News) session.get(News.class, 1);
// 读取二进制文件
Blob image = news.getImage();
InputStream stream = image.getBinaryStream();
// 保存文件代码略
System.out.println(stream);
System.out.println(news);
}
}