用hibernate存入和写出Blob、Clob

Person .java

package www.csdn.net.blank.bean;

import java.io.Serializable;
import java.sql.Blob;
import java.sql.Clob;

public class Person  implements Serializable{
    /**
	 * 
	 */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private Blob image;
    private Clob intro;
    
	public Person() {
		super();
	}

	public Person(Integer id, Blob image, Clob intro) {
		super();
		this.id = id;
		this.image = image;
		this.intro = intro;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Blob getImage() {
		return image;
	}

	public void setImage(Blob image) {
		this.image = image;
	}

	public Clob getIntro() {
		return intro;
	}

	public void setIntro(Clob intro) {
		this.intro = intro;
	}    
    
}

Person.hbm.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="www.csdn.net.blank.bean">
     <!-- name代表对应哪个类,table表名 -->
    <class name="Person" table="person">
       <id name="id" column="id">
           <!-- 主键的生成策略 -->
           <generator class="native"/> 
       </id> 
     <!-- name对应类中的字段,表中的字段,
                  类型type="blob"是hibernate中的写法,type="java.sql.Blob "是java中的写法-->  
       <property name="image" column="image" type="blob"/>
       <property name="intro" column="intro" type="clob"/>
    </class>

</hibernate-mapping>


BaseDao.java

package www.csdn.net.blank.dao;

import java.io.Serializable;
import java.util.List;


@SuppressWarnings("rawtypes")
public interface BaseDao {


	/**
	 * 保存实体对象
	 * 
	 * @param entity
	 */
	public void saveObject(Object entity);

	/**
	 * 更新实体对象
	 * 
	 * @param entity
	 */
	public void updateObject(Object entity);

	/**
	 * 删除实体对象
	 * 
	 * @param entity
	 */
	public void deleteObject(Object entity);

	/**
	 * 根据id删除实体对象
	 * 
	 * @param clazz
	 * @param id
	 */
	public void deleteObjectById(Class clazz,Serializable id);

	/**
	 * 根据id查询实体对象
	 * 
	 * @param clazz
	 * @param id
	 * @return
	 */
	public Object loadObjectById(Class clazz, Serializable id);

	/**
	 * 根据id查询实体对象
	 * 
	 * @param clazz
	 * @param id
	 * @return
	 */
	public Object getObjectById(Class clazz, Serializable id);

	/**
	 * 查询所有的操作
	 * 
	 * @param clazz
	 * @return
	 */
	public List getObjects(Class clazz);

}

BaseDaoImpl.java

package www.csdn.net.blank.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import www.csdn.net.blank.dao.BaseDao;
import www.csdn.net.blank.util.BaseHibernateDaoImpl;

@SuppressWarnings("rawtypes")
public class BaseDaoImpl extends BaseHibernateDaoImpl implements BaseDao {

	@Override
	public void saveObject(Object entity) {

		// 获取session对象
		Session session = getSessionObject();
		// 打开事务
		Transaction ts = session.beginTransaction();
		try {
			// 保存
			session.save(entity);
			// 提交事务
			ts.commit();
		} catch (Exception e) {
			ts.rollback();
		}
	}

	@Override
	public void updateObject(Object entity) {
		// 获取session对象
		Session session = getSessionObject();
		// 打开事务
		Transaction ts = session.beginTransaction();
		try {
			// 保存
			session.update(entity);
			// 提交事务
			ts.commit();
		} catch (Exception e) {
			ts.rollback();
		}
	}

	@Override
	public void deleteObject(Object entity) {
		// 获取session对象
		Session session = getSessionObject();
		// 打开事务
		Transaction ts = session.beginTransaction();
		try {
			// 保存
			session.delete(entity);
			// 提交事务
			ts.commit();
		} catch (Exception e) {
			ts.rollback();
		}

	}

	@Override
	public void deleteObjectById(Class clazz, Serializable id) {
		// 获取session对象
		Session session = getSessionObject();
		// 打开事务
		Transaction ts = session.beginTransaction();
		try {
			// 保存
			session.delete(getObjectById(clazz, id));
			// 提交事务
			ts.commit();
		} catch (Exception e) {
			ts.rollback();
		}

	}

	@Override
	public Object loadObjectById(Class clazz, Serializable id) {
		return null;
	}

	@Override
	public Object getObjectById(Class clazz, Serializable id) {

		Object obj = null;
		Session session = getSessionObject();
		Transaction ts = session.beginTransaction();
		try {
			obj = session.get(clazz, id);
			ts.commit();
		} catch (Exception e) {
			ts.rollback();
		}
		return obj;
	}

	@Override
	public List getObjects(Class clazz) {
		List list =  new ArrayList();
		Session session = getSessionObject();
		Transaction ts = session.beginTransaction();
		try {
			list = session.createQuery("from "+clazz.getName()).list();
			ts.commit();
		} catch (Exception e) {
			ts.rollback();
		}
		return list;
	}

}

HiberUtil.java

package www.csdn.net.blank.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HiberUtil {

	static Configuration cfg;
	static ServiceRegistry serviceRegistry;
	static SessionFactory sessionFactory;
	
	static{
		//创建Configuration对象  调用.configure()方法 ,默认class/hibernate.cfg.xml
		cfg = new Configuration().configure();
		
		//创建服务对象
		serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
		
		//创建sessionFactory工厂
		sessionFactory = cfg.buildSessionFactory(serviceRegistry);
	}
	
	
	/**
	 * 获取session对象
	 * @return
	 */
	public static Session openSession(){
		return sessionFactory.getCurrentSession();
	}
	
}

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
	<!-- 数据库的驱动 -->
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<!-- 数据库的URL -->
	<property name="connection.url">
		jdbc:mysql://localhost:3306/hiber3?useUincode=true&characterEncoding=UTF-8
	</property>
	<!-- 数据库的用户名 -->
	<property name="connection.username">root</property>
	<!-- 数据库的密码 -->
	<property name="connection.password">root</property>
	<!-- 数据库的方言 -->
	<property name="hibernate.dialect">
		org.hibernate.dialect.MySQLDialect
	</property>

	<!-- Enable Hibernate's automatic session context management -->
	<property name="current_session_context_class">thread</property>

	<!-- 显示操作的sql语句 -->
	<property name="hibernate.show_sql">true</property>
	<!-- 格式sql语句 -->
	<property name="hibernate.format_sql">false</property>
	<!-- 自动创建和更新表结构 -->
	<property name="hibernate.hbm2ddl.auto">update</property>



	<!-- 映射文件引入 -->
	<mapping resource="www/csdn/net/blank/bean/Person.hbm.xml" />
</session-factory>

</hibernate-configuration>

PersonTest.java

package www.csdn.net.blank.junit;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;

import org.hibernate.Hibernate;
import org.junit.Test;

import www.csdn.net.blank.bean.Person;
import www.csdn.net.blank.dao.BaseDao;
import www.csdn.net.blank.dao.impl.BaseDaoImpl;
import www.csdn.net.blank.util.HiberUtil;

public class PersonTest {
	private BaseDao baseDao = new BaseDaoImpl();

	@Test
	public void save() throws Exception {
		Person person = new Person();
		File file = new File("F:\\资料\\Pictures\\人物 (2)\\200.jpg");

		FileInputStream fis = new FileInputStream(file);

		File file1 = new File(
				"D:\\闫梅\\csdn\\hibernate课程\\代码\\hiber7=1\\src\\自定义标签.txt");

		Reader reader = new FileReader(file1);
		//第一种方法: 针对 session 是通过sessionFactory.getCurrentSession(); 处理操作
		person.setImage(Hibernate.getLobCreator(HiberUtil.openSession())
				.createBlob(fis, file.length()));
		person.setIntro(Hibernate.getLobCreator(HiberUtil.openSession())
				.createClob(reader, file1.length()));
		//第二种方法:必须开启事务 
		   /*Session session = HiberUtil.openSession();
			//Transaction ts = session.beginTransaction();
			person.setImage(session.getLobHelper().createBlob(fis, file.length()));
			person.setDescription(session.getLobHelper().createClob(reader,file1.length()));
		
			//ts.commit();
		   */
		
		baseDao.saveObject(person);

	}
	@Test
	public void getObject() throws Exception{
		//根据id查询对象
		Person person=(Person) baseDao.getObjectById(Person.class, 1);
		//判读对象是否为null
		if(person!=null){
			//获取Blob字段
	    	Blob blob=person.getImage();
	    	//根据blob对象的getBinaryStream()方法 获取输入流 对象
	    	InputStream is=blob.getBinaryStream();
	    	//定义写出的文件
	    	File file=new File("D:\\12.jpg");
	    	//写出的输出流
	    	FileOutputStream fos=new FileOutputStream(file);
	    	//缓冲区
	    	byte[] buffer=new byte[1024];
	    	//读取的长度
	    	int len=0;
	    	//循环读取,直到文件结尾
	    	while((len=is.read(buffer))!=-1){
	    		//写出
	    		fos.write(buffer,0,len);
	    	}
	    	//关闭流
	    	fos.close();
	    	is.close();
	    	
	    	//获取Clob字段
	    	Clob clob=person.getIntro();
	    	//根据clob对象的getCharacterStream() 获取字符输入流
	    	Reader r=clob.getCharacterStream();
	    	//定义写出的文件
	    	File file1=new File("D:\\12.txt");
	    	//创建输出流对象
	    	FileWriter fileWriter=new FileWriter(file1);
	    	//缓冲区
	    	char[] cbuf=new char[1024];
	    	
	    	//读取长度
			int len1=0;
			//循环读取,直到文件结尾
			while((len1=r.read(cbuf))!=-1){
				//写出
				fileWriter.write(cbuf, 0, len1);
			}
			
			//关闭流
			fileWriter.close();
			r.close();
	    }
	}
}
执行save方法后的结果:

执行getObject方法后的结果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值