关键代码:

// 大文本
private String content;
// 二进制类型
private Blob image;
// 时间类型
private Date postTime;
<!-- 映射大文本对象 
可以在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:

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:

<?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

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);
	}
	
}


你可能感兴趣的文章