hibernate--对象类型

来源:互联网 发布:郁可唯 独家记忆 知乎 编辑:程序博客网 时间:2024/06/08 14:15

这里写图片描述
binary:字节数据
text/clob:文本数据类型
blob:二进制数据类型(音频/视频/图片等)
注:
这里写图片描述(文本长度依次递增)


使用hibernate向数据库中添加一个blob(二进制)类型字段,并向其中添加blob类型数据:
在Students类中添加一个Blob类型属性picture:

 private Blob picture; //照片

Students.hbm.xml中:

<property name="picture" type="java.sql.Blob">            <column name="picture"></column>        </property>

在D盘根目录下存放一个照片:“1.jpg”

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.sql.Blob;import java.util.Date;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.After;import org.junit.Before;import org.junit.Test;//测试类public class StudentsTest {    private SessionFactory sessionFactory;    private Session session;    private Transaction transaction;    @Before    public void init(){  //初始化        //创建配置对象        Configuration config=new Configuration().configure();        //创建服务注册对象        ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();        //创建会话工厂对象        sessionFactory=config.buildSessionFactory(serviceRegistry);        //会话对象,打开会话        session=sessionFactory.openSession();               //打开事务        transaction=session.beginTransaction();    }    @After    public void destory(){ //释放资源        //提交事务        transaction.commit();        //关闭会话        session.close();        //关闭会话工厂        sessionFactory.close();    }    @Test    public void testSaveStudents(){        //生成学生对象//      Students s=new Students(1,"张三丰","男",new Date(),"武当山");        Students s=new Students();//      s.setSid(1);  //native:主键自动增长,无须赋值;若强制赋值无效果        s.setSname("张三丰");        s.setGender("男");        s.setBirthday(new Date());        s.setAddress("武当山");                //保存对象进入数据库        session.save(s);            }    @Test    public void testWriteBlob() throws Exception{ //写入二进制数据        Students s=new Students(1,"张三丰","男",new Date(),"武当山");        //获得照片文件        File f=new File("d:"+File.separator+"1.jpg");        //获得照片文件的输入连        InputStream input=new FileInputStream(f);  //字节流        //创建一个Blob对象        Blob image=Hibernate.getLobCreator(session).createBlob(input, input.available()); //session是会话对象。createBlob方法第一个参数表示从哪个输入流读取,第二个参数表示读取的长度(输入流可用的字节数)。        //设置照片属性        s.setPicture(image);        //保存学生        session.save(s);    }    @Test    public void testReadBlob() throws Exception{ //从数据库读取二进制数据,此时hibernate.cfg.xml中<property name="hbm2ddl.auto">update</property>一定设置为update,否则会清空表中原有数据        //加载一个学生对象        Students s=(Students)session.get(Students.class, 1); //第二个参数是标识符,即表中主键的数据        //获得Blob对象        Blob image=s.getPicture();        //获得照片的输入流        InputStream input=image.getBinaryStream();        //创建输出流,输出到一个文件上        File f=new File("d:"+File.separator+"dest.jpg"); //写到d盘根目录下        //获得输出流        OutputStream output=new FileOutputStream(f);        //创建缓冲区,字节数组        byte[] buff=new byte[input.available()];        input.read(buff);  //读到缓冲区内        output.write(buff);  //写        input.close();        output.close();    }}

数据库中新增加一个字段及数据:
这里写图片描述
从数据库读取二进制数据到D盘中:
这里写图片描述

:从数据库读取二进制数据,此时hibernate.cfg.xml中<property name="hbm2ddl.auto">update</property>一定设置为update,否则会清空表中原有数据

0 0