Hibernate数据库写入图片

一、实体类文件Students

import java.sql.Blob;
import java.util.Date;

public class Students {

    // 1.公有的类
    // 2.提供公有的不带参数的默认的构造方法
    // 3.属性私有
    // 4.属性setter/getter封装

    private int sid;// 学号
    private String sname;// 姓名
    private String gender;// 性别
    private Date birthday;// 出生日期
    private String address;// 地址
    private Blob picture;//照片 Blob 大数据存储对象

}

二、Students.hbm.xml文件

<hibernate-mapping>
    <class name="Students" table="STUDENTS">
        <id name="sid" type="int">
            <column name="SID" />
            <generator class="assigned" />
        </id>
        <property name="sname" type="java.lang.String">
            <column name="SNAME" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="GENDER" />
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="BIRTHDAY" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="ADDRESS" />
        </property>
        <property name="picture" type="java.sql.Blob">
            <column name="PICTURE" />
        </property>
    </class>
</hibernate-mapping>

三、hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>
        <!-- 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>


        <property name="show_sql">true</property><!-- 输出sql语句到控制台 -->
        <property name="format_sql">true</property><!-- 对sql语句排版 -->
        <property name="hbm2ddl.auto">update</property><!-- 生成数据库表结构策略 create每次创建新的数据库表 update在原有的表上更新数据 -->

        <!-- getCurrent()方法获取session时添加<property name="hibernate.current_session_context_class">thread</property> -->

        <mapping resource="Students.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

junit测试类

public class StudentsTest {

    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

    @Before
    public void init(){
        //创建配置对象 用于读取配置文档hibernate.cfg.xml 目的创建sessionFactory
        Configuration config = new Configuration().configure();
        //获得服务注册对象
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        //创建会话工厂对象 创建SessionFactory对象时会加载里面的Students.hbm.xml等文件 目的创建Session对象
        sessionFactory = config.buildSessionFactory(serviceRegistry);
        //会话对象 Session对象类似jdbc中的connection
        session = sessionFactory.openSession();
        //开启事务
        transaction = session.beginTransaction();
    }

    @After
    public void destory(){
        transaction.commit();// 提交事务
        session.close();//关闭会话
        sessionFactory.close();//关闭会话工厂
    }

    @Test
    public void testSaveStudents(){
        Students s = new Students(2, "张三丰", "男", new Date(), "武当");
        session.save(s);//保存对象进入数据库
    }

    @Test
    public void testWriteBlob() throws Exception{
        Students s = new Students(1, "张三丰", "男", new Date(), "武当");
        //先获得照片文件
        File f = new File("D:"+File.separator+"ceshi.jpg");
        //获得照片文件的输入流
        InputStream input = new FileInputStream(f);
        //创建一个Blob对象
        Blob image = Hibernate.getLobCreator(session).createBlob(input, input.available());
        //设置照片属性
        s.setPicture(image);
        //保存学生
        session.save(s);
    }

    @Test
    public void testReadBlob() throws Exception{
        Students s = (Students)session.get(Students.class, 1);
        //获得Blob对象
        Blob image = s.getPicture();
        //获得输入流
        InputStream input = image.getBinaryStream();
        //创建输出流
        File f = new File("D:"+File.separator+"sss.jpg");
        //获得输出流
        OutputStream output = new FileOutputStream(f);
        //创建缓冲区
        byte[] buff = new byte[input.available()];
        input.read(buff);
        output.write(buff);
        input.close();
        output.close();
    }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值