hibernate3学习笔记(十四)|Blob、Clob

在Hibernate中,可以直接对Blob、Clob作映射。

DDL如下:

1.CREATE TABLE user (<br />2.    id INT(11) NOT NULL auto_increment PRIMARY KEY,<br />3.    name VARCHAR(100) NOT NULL default '',<br />4.    age INT,<br />5.    photo BLOB,<br />6.    resume TEXT<br />7.);

注意:由于BLOB字段大小不可预计,有时需要增大BLOB字段的大小,可在数据库中改用MEDIUMBLOB甚至LONGBLOB。

User.java

1.package com.hb3.pack_07.model;<br />2.<br />3.import java.sql.Blob;<br />4.import java.sql.Clob;<br />5.6.public class User {<br />7.8.    private Integer id;<br />9.    private String name;<br />10.    private Integer age;<br />11.    private Blob photo;<br />12.    private Clob resume;<br />13.<br />14.    public User() {<br />15.    }<br />16.17.    public Integer getId() {<br />18.        return id;<br />19.    }<br />20.    public void setId(Integer id) {<br />21.        this.id = id;<br />22.    }<br />23.    public String getName() {<br />24.        return name;<br />25.    }<br />26.    public void setName(String name) {<br />27.        this.name = name;<br />28.    }<br />29.    public Integer getAge() {<br />30.        return age;<br />31.    }<br />32.    public void setAge(Integer age) {<br />33.        this.age = age;<br />34.    }<br />35.    public Blob getPhoto() {<br />36.        return photo;<br />37.    }<br />38.    public void setPhoto(Blob photo) {<br />39.        this.photo = photo;<br />40.    }<br />41.    public Clob getResume() {<br />42.        return resume;<br />43.    }<br />44.    public void setResume(Clob resume) {<br />45.        this.resume = resume;<br />46.    }<br />47.}

User.hbm.xml文件:

1.<?xml version="1.0" encoding="UTF-8"?><br />2.3.<!DOCTYPE hibernate-mapping PUBLIC<br />4.    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />5.    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">6.7.<hibernate-mapping>8.9.    <class name="com.hb3.pack_07.model.User" table="user">10.<br />11.        <id name="id" column="id" type="java.lang.Integer"><br />12.            <generator class="native"/><br />13.        </id><br />14.<br />15.        <property name="name" column="name" type="java.lang.String"/><br />16.<br />17.        <property name="age" column="age" type="java.lang.Integer"/><br />18.<br />19.        <property name="photo" column="photo" type="java.sql.Blob"/><br />20.<br />21.        <property name="resume" column="resume" type="java.sql.Clob"/><br />22.<br />23.    </class>24.<br />25.</hibernate-mapping>

修改hibernate.cfg.xml文件如下:

............

测试代码如下:

1.package com.hb3.pack_07;<br />2.<br />3.import java.io.FileInputStream;<br />4.import java.io.FileOutputStream;<br />5.import java.io.IOException;<br />6.import java.io.InputStream;<br />7.import java.sql.Blob;<br />8.import java.sql.Clob;<br />9.import java.sql.SQLException;<br />10.11.import org.hibernate.Hibernate;<br />12.import org.hibernate.Session;<br />13.import org.hibernate.SessionFactory;<br />14.import org.hibernate.Transaction;<br />15.import org.hibernate.cfg.Configuration;<br />16.17.import com.hb3.pack_07.model.User;<br />18.19.public class BusinessService {<br />20.21.    public static void main(String[] args) throws IOException, SQLException {<br />22.<br />23.        Configuration config = new Configuration().configure();<br />24.        SessionFactory sessionFactory = config.buildSessionFactory();<br />25.        Session session = sessionFactory.openSession();<br />26.27.        FileInputStream fileInputStream = new FileInputStream("c://sunset.jpg");<br />28.        Blob photo = Hibernate.createBlob(fileInputStream);<br />29.        Clob resume = Hibernate.createClob("Bla....Bla....resume text!!");<br />30.<br />31.        User user = new User();<br />32.        user.setName("shenbin");<br />33.        user.setAge(new Integer(28));<br />34.        user.setPhoto(photo);<br />35.        user.setResume(resume);<br />36.37.        Transaction tx = session.beginTransaction();<br />38.        session.save(user);<br />39.        tx.commit();<br />40.<br />41.        session.close();<br />42.        session = sessionFactory.openSession();<br />43.<br />44.        user = (User) session.load(User.class, new Integer(1));<br />45.        System.out.print(user.getAge() + "/t" +<br />46.                         user.getName() + "/t");<br />47.        String str_resume = user.getResume().getSubString(1, (int) user.getResume().length());<br />48.        System.out.println(str_resume);<br />49.        InputStream inputStream = user.getPhoto().getBinaryStream();<br />50.        FileOutputStream fileOutputStream = new FileOutputStream("c://sunset_save.jpg");<br />51.        byte[] buf = new byte[1];<br />52.        int len = 0;<br />53.        while((len = inputStream.read(buf)) != -1) {<br />54.            fileOutputStream.write(buf, 0, len);<br />55.        }<br />56.        inputStream.close();<br />57.        fileOutputStream.close();<br />58.        System.out.println("save photo to c://sunset_save.jpg");<br />59.60.        session.close();<br />61.        sessionFactory.close();<br />62.    }<br />63.}

在MySQL中对BLOB以及CLOB类型的使用还是比较简单的,如果在Oracle DB中则相对复杂一些,计划在以后章节加以说明。

可先参阅:http://blog.csdn.net/fhway/archive/2006/11/01/1359482.aspx

想想我的影子,我会在你身后给你一个拥抱;

hibernate3学习笔记(十四)|Blob、Clob

相关文章:

你感兴趣的文章:

标签云: