在Hibernate中,可以直接對Blob、Clob作映射。
DDL如下:
- CREATE TABLE user (
- id INT(11) NOT NULL auto_increment PRIMARY KEY,
- name VARCHAR(100) NOT NULL default '',
- age INT,
- photo BLOB,
- resume TEXT
- );
注意:由于BLOB字段大小不可預計,有時需要增大BLOB字段的大小,可在數據庫中改用MEDIUMBLOB甚至LONGBLOB。
User.java
- package com.hb3.pack_07.model;
- import java.sql.Blob;
- import java.sql.Clob;
- public class User {
- private Integer id;
- private String name;
- private Integer age;
- private Blob photo;
- private Clob resume;
- public User() {
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public Blob getPhoto() {
- return photo;
- }
- public void setPhoto(Blob photo) {
- this.photo = photo;
- }
- public Clob getResume() {
- return resume;
- }
- public void setResume(Clob resume) {
- this.resume = resume;
- }
- }
User.hbm.xml文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.hb3.pack_07.model.User" table="user">
- <id name="id" column="id" type="java.lang.Integer">
- <generator class="native"/>
- </id>
- <property name="name" column="name" type="java.lang.String"/>
- <property name="age" column="age" type="java.lang.Integer"/>
- <property name="photo" column="photo" type="java.sql.Blob"/>
- <property name="resume" column="resume" type="java.sql.Clob"/>
- </class>
- </hibernate-mapping>
修改hibernate.cfg.xml文件如下:
......
<mapping resource="com/hb3/pack_07/model/User.hbm.xml" />
......
測試代碼如下:
- package com.hb3.pack_07;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.Blob;
- import java.sql.Clob;
- import java.sql.SQLException;
- import org.hibernate.Hibernate;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import com.hb3.pack_07.model.User;
- public class BusinessService {
- public static void main(String[] args) throws IOException, SQLException {
- Configuration config = new Configuration().configure();
- SessionFactory sessionFactory = config.buildSessionFactory();
- Session session = sessionFactory.openSession();
- FileInputStream fileInputStream = new FileInputStream("c:\\sunset.jpg");
- Blob photo = Hibernate.createBlob(fileInputStream);
- Clob resume = Hibernate.createClob("Bla....Bla....resume text!!");
- User user = new User();
- user.setName("shenbin");
- user.setAge(new Integer(28));
- user.setPhoto(photo);
- user.setResume(resume);
- Transaction tx = session.beginTransaction();
- session.save(user);
- tx.commit();
- session.close();
- session = sessionFactory.openSession();
- user = (User) session.load(User.class, new Integer(1));
- System.out.print(user.getAge() + "\t" +
- user.getName() + "\t");
- String str_resume = user.getResume().getSubString(1, (int) user.getResume().length());
- System.out.println(str_resume);
- InputStream inputStream = user.getPhoto().getBinaryStream();
- FileOutputStream fileOutputStream = new FileOutputStream("c:\\sunset_save.jpg");
- byte[] buf = new byte[1];
- int len = 0;
- while((len = inputStream.read(buf)) != -1) {
- fileOutputStream.write(buf, 0, len);
- }
- inputStream.close();
- fileOutputStream.close();
- System.out.println("save photo to c:\\sunset_save.jpg");
- session.close();
- sessionFactory.close();
- }
- }
在MySQL中對BLOB以及CLOB類型的使用還是比較簡單的,如果在Oracle DB中則相對復雜一些,計劃在以后章節加以說明。
ExtJS教程- Hibernate教程-Struts2 教程-Lucene教程