hibernate--对象类型

这里写图片描述
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值