前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >把头像图片以二进制形式保存到数据库(Hibernate实现)

把头像图片以二进制形式保存到数据库(Hibernate实现)

作者头像
张张
发布2019-12-26 16:17:24
1.3K0
发布2019-12-26 16:17:24
举报

我们把头像直接保存到数据库,而不是保存一个地址。 使用Hibernate自动创建表方式,数据库photo字段的数据类型是CLOB,这是针对MySQL,其他数据库可能不一样。 1、Hibernate环境搭建、建立工程略。 2、首先我们新建一个User类,储存一些用户信息字段,在Java中photo字段要申明为应该byte[]类型

User.java:

代码语言:javascript
复制
public class User {
    private int id;
    private String name;
    private Integer age;
    private Date birthday; // 生日
    private String desc; // 一大段说明
    private byte[] photo; // 头像图片
    //省略getter and setter Method...
}

3、然后配置User的映射文件 User.hbm.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.c_hbm_property">
    <!-- name属性:哪个类
	 table属性:对应哪个表,如果不写,默认的表名就是类的简单名称
    -->
    <class name="User" table="t_user">
	<id name="id" type="int" column="id">
        <generator class="native"/>
    </id>
	<!-- 普通的属性(数据库中的基本类型,如字符串、日期、数字等) 
    	name属性:对象中的属性名,必须要有。
	     type属性:类型,如果不写,Hibernate会自动检测。
	     可以写Java中类的全名。
	     或是写hibernate类型。
	     column属性:对应表中的列名,如果没有,默认为属性名。
	     length属性:长度,不是所有的类型都有长度属性,比如varchar有,但int没有,如果不写默认为255
	     not-null属性:非空约束,默认为false
	 -->
	 <!-- 
	      <property name="name"/>
	 -->
	 <property name="name" type="string" column="name" length="20" not-null="true"/>
	 <property name="age" type="int" column="age_"/>
		
	 <property name="birthday" type="date" column="birthday_"/>
	 <!-- 当列表与关键字冲突时,可以通过column属性指定一个其他的列名。
	      或是使用反引号包围起来。
	      指定使用text类型时,最好再指定length,以确定生成的SQL类型是能够存放指定数量的字符的。
              <property name="desc">
                  <column name="desc_" length="5000" sql-type="text"/>
              </property>		
	 -->
	 <property name="desc" type="text" length="5000" column="`desc`" ></property>
	 <!-- 头像,二进制类型,最好指定长度 -->
	 <property name="photo" type="binary" length="102400"></property>
    </class>
</hibernate-mapping>

4、测试类测试新增User信息

photoTest.java

代码语言:javascript
复制
public class photoTest{
    private static SessionFactory sessionFactory;
    static {
	sessionFactory = new Configuration()//
	    .configure()// 读取配置文件
	    .addClass(User.class)//
	    .buildSessionFactory();
    }
    @Test
    public void testSave() throws Exception {
        // 读取图片文件
        InputStream in = new FileInputStream( "c:/test.png");
        byte[] photo = new byte[in.available()];
        in.read(photo);
        in.close();
		
        // 创建对象实例
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        user.setBirthday(new Date());
        user.setDesc("一大段的说明,此处省略5000字……");
        user.setPhoto(photo);
        // 保存
        Session session = sessionFactory.openSession(); // 打开一个新的Session
        Transaction tx = session.beginTransaction(); // 开始事务
        session.save(user);
        tx.commit(); // 提交事务
        session.close(); // 关闭Session,释放资源
    }
}

上面代码就是把c盘根目录的test.png图片保存到了数据库。 通过SQL查询该字段可看到是二进制数据,那么证明保存成功。

5、我们再把图片读取出来放在D盘下,取名copy.png

photoTest.testGet():

代码语言:javascript
复制
@Test
public void testGet() throws Exception
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    User user = (User) session.get(User.class, 1); // 获取
    System.out.println(user.getId());
    System.out.println(user.getName());
    System.out.println(user.getDesc());
    System.out.println(user.getPhoto());
		
    OutputStream out = new FileOutputStream("D:/copy.png");
    out.write(user.getPhoto());
    out.close();
    tx.commit();
    session.close();
}

经测试成功运行………..

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档