Hibernate 操作Blob Clob
来源:互联网 发布:七月算法视频pan 编辑:程序博客网 时间:2024/05/16 12:17
Photo.java
Photo.hbm.xml
伦理片 http://www.dotdy.com/
PhotoManagerImpl.java
其中继承了BaseDao类,这是一个通用Hibernate 泛型DAO工具类
BaseDaoBlobClobTest.java
其中用到了JUnitBase_svc类,作用是加载spring的配置文件
- import java.sql.Blob;
- import java.sql.Clob;
- import java.util.Date;
- /**
- * @author IBM 这是一个用于测试Hibernate大对象操作的PO
- *
- * 这是一个测试POJO, 属性有多种类型
- */
- public class Photo {
- private Long id;
- private String fileName="";// 文件名
- private Date date = new Date(); // 主库时间,默认值是当前时间
- private Blob photo;// 相片的二进制形式,大对象
- private Clob text;// 文字说明,大对象
- private byte[] bin;//字节数组
- }
Photo.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 package="test.com.base">
- <class name="Photo" table="test_Photo">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="fileName" />
- <property name="date" />
- <property name="photo" />
- <property name="text" />
- <property name="bin" />
- </class>
- </hibernate-mapping>
伦理片 http://www.dotdy.com/
PhotoManagerImpl.java
其中继承了BaseDao类,这是一个通用Hibernate 泛型DAO工具类
- package test.com.base;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.Reader;
- import java.nio.CharBuffer;
- import java.sql.Clob;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import com.base.dao.BaseDao;
- @Transactional
- @Service
- public class PhotoManagerImpl extends BaseDao<Photo,Long> {
- //空
- }
BaseDaoBlobClobTest.java
其中用到了JUnitBase_svc类,作用是加载spring的配置文件
- package test.com.base;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.Reader;
- import java.sql.Blob;
- import java.sql.Clob;
- import javax.annotation.Resource;
- import org.hibernate.Hibernate;
- import org.hibernate.LockMode;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import org.junit.Test;
- import com.base.dao.BaseDao;
- /**
- * 通过个单元测试,演示了<br/>
- * 1: 如何操作大象<br/>
- * 2:懒加载的一种解决方案<br/>
- */
- public class BaseDaoBlobClobTest extends JUnitBase_svc {
- @Resource
- private PhotoManagerImpl photoManagerImpl;
- /**
- * 测试保存大对象
- */
- @Test
- public void TestSaveBlob() {
- // ----------456.jpg 转成Blob--------------------
- InputStream in = this.getClass().getResourceAsStream("phtot.jpg");
- Blob blob = null;
- try {
- blob = Hibernate.createBlob(in);
- } catch (IOException e) {
- e.printStackTrace();
- }
- // ----------文字 转成Clob--------------------
- Clob clob = Hibernate.createClob("文字 转成Clob");
- // ------------------------------------------
- Photo photo = new Photo();
- photo.setFileName("haha.jpg");
- photo.setPhoto(blob);
- photo.setText(clob);
- photoManagerImpl.save(photo);
- }
- /**
- * 测试取得大对象,没有使用懒加载,
- */
- @Test
- public void TestGetBlob() {
- Photo photo = photoManagerImpl.get(3L);// 执行Hibername的get方法,会马上执行SQL查询
- int len = 0;
- byte[] buf = new byte[1024];
- try {
- String path = "d:\\abc.jpg";// 取出图片后保存的位置
- InputStream in = photo.getPhoto().getBinaryStream();
- OutputStream out = new FileOutputStream(new File(path));
- while ((len = in.read(buf)) > 0) {
- out.write(buf, 0, len);
- }
- out.close();
- in.close();
- System.out.println("读出的图片放在了:" + path);
- Clob clob = photo.getText();
- Reader reader = clob.getCharacterStream();
- char[] cb = new char[1024];
- StringBuffer sb = new StringBuffer();
- len = 0;
- while ((len = reader.read(cb)) > 0) {
- sb.append(cb, 0, len);
- }
- System.out.println(sb.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 测试取得大对象,使用了懒加载,
- *
- * 并且是在事务已提交,session已关闭后才通过Hibernate代理查出的目标对象
- *
- * 这是懒加载的一种解决方案,很重要,特此说明
- */
- @Test
- public void TestLoadBlob() {
- // 执行的是load方法,会延迟加载,返回Hibernate代理对象之后session已关闭
- Photo photo = photoManagerImpl.load(3L);
- //打开一个新Session,不能使用getCurrentSession()方法
- Session session = photoManagerImpl.getNewSession();
- System.out.println("Session是打开的吗:"+session.isOpen());
- // 把Hibernate代理对象重新关联到一个session对象
- session.lock(photo, LockMode.NONE);
- //开启事务
- Transaction t=session.beginTransaction();
- int len = 0;
- byte[] buf = new byte[1024];
- try {
- String path = "d:\\abc.jpg";// 取出图片后保存的位置
- //这时才发出sql语句,执行查询,达到了懒加载的目的
- InputStream in = photo.getPhoto().getBinaryStream();
- OutputStream out = new FileOutputStream(new File(path));
- while ((len = in.read(buf)) > 0) {
- out.write(buf, 0, len);
- }
- out.close();
- in.close();
- System.out.println("读出的图片放在了:" + path);
- Clob clob = photo.getText();
- Reader reader = clob.getCharacterStream();
- char[] cb = new char[1024];
- StringBuffer sb = new StringBuffer();
- len = 0;
- while ((len = reader.read(cb)) > 0) {
- sb.append(cb, 0, len);
- }
- ;
- System.out.println(sb.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println(t==session.getTransaction());
- //提交事务
- session.getTransaction().commit();
- //关闭
- session.close();
- }
- }
0 0
- Hibernate 操作Blob Clob
- Hibernate 操作Blob Clob
- hibernate对clob和blob的操作
- Hibernate对BLOB CLOB操作详解
- hibernate 写入 clob, Blob
- Hibernate Blob和Clob
- jdbc操作blob,clob
- JDBC CLOB\BLOB操作
- 操作BLOB、CLOB、BFILE
- jdbc操作blob,clob
- 通过JDBC和Hibernate对Clob和Blob的操作
- 通过JDBC和Hibernate对Clob和Blob的操作
- hibernate clob/blob的处理
- hibernate映射clob blob字段
- Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析
- Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析
- Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析
- JDBC操作Clob,Blob字段
- Java Convert String & Int
- 浅谈Activity的启动模式
- Hibernate二级缓存 ---- 入门示例
- ICPC 6834 Shopping
- windows下成功编译Cairo,Compiling Cairo for Windows
- Hibernate 操作Blob Clob
- android学习笔记(16)广播事件处理
- 电视“分辨率”与“线”
- 游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
- 第一天 如何设计程序?
- 基数排序(Radix Sort)
- Criteria查询,DetachedCriteria离线查询 --做综合查询
- iOS开发之多线程-- NSOperation使用简介(个人笔记)
- 网络模拟:丢包,延迟,乱序