- 浏览: 710911 次
- 来自: ...
文章分类
最新评论
-
ranguisheng:
可以加点注释,代码不便于阅读.
用java实现数据库连接池的一个简单示例 -
abcd880129:
这样写的话,还要用专门的下载工具,不然,只能下到一个为空的ex ...
ZK下载文件时,不在服务器生成文件直接下载 -
234369425:
同上,是20
java计算阶乘 -
CodeToMyLaw:
如果目录中含有中文呢?
[^\x00-\xff] 中文的 ...
js验证文件目录格式的正确性 -
yanzhoupuzhang:
加了,还是报那个错误!
org.apache.commons.dbcp.BasicDataSource的解决方法
一般网站在处理用户上传图片时通常采用两种策略:一是直接把图片存入数据库中的Blob字段;二是数据库中只存储图片的在服务器上的路径信息?,图片存放在分门别类的文件中,使用的时候从数据库读取路径信息到页面img元素即可.在此不讨论两种方案的优劣,我只是写了个hibernate的例子来实现第一种策略.例子很简单,t_user表主要两个字段,name和photo,其中photo字段类型为Blob.在此例中数据库我采用mysql, oracle的Blob字段比较特殊,你必须自定义类型,具体的请自行搜索,这方面的资料很多.
类User有3个属性,id,name,photo,相应的getter和setter方法以及一个无参构造函数.应该注意的是photo的类型java.sql.Blob
相应的user.hbm.xml应该如下:
对应的hibernate.cfg.xml配置文件,不再列出,请参照hibernate文档自行设定.
OK,做了这一步,我们写个测试类来进行单元测试:
我们读取C盘目录下的test.gif并存储到数据库中,然后再取出来写入C:/out目录,此时你可以查看下数据表中photo显示为blob,表示已经成功存入.值的注意的代码片段就是:
FileInputStream in=new FileInputStream("C://test.gif");
Blob photo=Hibernate.createBlob(in);
我们这里是从磁盘中读取图片,实际应用中你可以利用上传组件得到图片的2进制数据流,并利用Hibernate.createBlob方法来构造相应的Blob对象.而取图片则使用
InputStream in=photo.getBinaryStream();
这只是个简单的测试类,如果我想从数据库中取出图片并现实在页面上该如何做呢?其实也很简单,我们先要写一个servlet,在它的service方法中取出图片,并"画"到指定页面上.
通过response.getOutputStream取得输出流,其他就与上段代码一致.servlet写好了,怎么在页面调用呢?那就更简单啦,直接在页面的img标签的src属性上调用该servlet即可,如:
<img id="test" src="/servlet/Test"/>
简单的例子,希望对初学者有帮助.
附记:如果不希望在servlet(或者action之类)中进行保存操作,希望在DAO进行此操作,那么InputStream的关闭问题可以通过hibernate的interceptor机制解决
//User.java package com.denny_blue.hibernate; import java.io.Serializable; import java.sql.Blob; public class User implements Serializable{ private Integer id; private String name; private Blob photo; /** * @return the id */ public User(){ } public Integer getId() { return id; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the photo */ public Blob getPhoto() { return photo; } /** * @param photo the photo to set */ public void setPhoto(Blob photo) { this.photo = photo; } }
类User有3个属性,id,name,photo,相应的getter和setter方法以及一个无参构造函数.应该注意的是photo的类型java.sql.Blob
相应的user.hbm.xml应该如下:
<?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="com.denny_blue.hibernate"> <class name="com.denny_blue.hibernate.User" table="t_user" dynamic-update="true" dynamic-insert="true" batch-size="3"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <property name="name" column="name" type="java.lang.String" lazy="true"/> <property name="photo" column="photo" type="java.sql.Blob"/> </class> </hibernate-mapping>
对应的hibernate.cfg.xml配置文件,不再列出,请参照hibernate文档自行设定.
OK,做了这一步,我们写个测试类来进行单元测试:
package com.denny_blue.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Blob; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.denny_blue.hibernate.User; import junit.framework.TestCase; public class HibernateTest extends TestCase { private Session session; protected void setUp() throws Exception { try{ Configuration config=new Configuration().configure(); SessionFactory sf=config.buildSessionFactory(); session=sf.openSession(); }catch(HibernateException e){ e.printStackTrace(); } } protected void tearDown() throws Exception { try{ session.close(); }catch(HibernateException e){ e.printStackTrace(); } } public void testSave()throws FileNotFoundException,IOException{ User user=new User(); user.setName("jordan"); FileInputStream in=new FileInputStream("C://test.gif"); Blob photo=Hibernate.createBlob(in); user.setPhoto(photo); Transaction tx=null; try{ tx=session.beginTransaction(); session.saveOrUpdate(user); tx.commit(); }catch(HibernateException e){ if(tx!=null) tx.rollback(); e.printStackTrace(); }finally{ in.close(); } } public void testLoad()throws Exception{ try{ User user=(User)session.load(User.class, new Integer(1)); Blob photo=user.getPhoto(); InputStream in=photo.getBinaryStream(); FileOutputStream out=new FileOutputStream("C://out//test2.gif"); byte [] buf=new byte[1024]; int len; while((len=in.read(buf))!=-1){ out.write(buf, 0, len); } in.close(); out.close(); }catch(HibernateException e){ e.printStackTrace(); } } }
我们读取C盘目录下的test.gif并存储到数据库中,然后再取出来写入C:/out目录,此时你可以查看下数据表中photo显示为blob,表示已经成功存入.值的注意的代码片段就是:
FileInputStream in=new FileInputStream("C://test.gif");
Blob photo=Hibernate.createBlob(in);
我们这里是从磁盘中读取图片,实际应用中你可以利用上传组件得到图片的2进制数据流,并利用Hibernate.createBlob方法来构造相应的Blob对象.而取图片则使用
InputStream in=photo.getBinaryStream();
这只是个简单的测试类,如果我想从数据库中取出图片并现实在页面上该如何做呢?其实也很简单,我们先要写一个servlet,在它的service方法中取出图片,并"画"到指定页面上.
package com.easyjf.asp.action; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.denny)blue.hibernate.User; public class Test extends HttpServlet { /** * Destruction of the servlet. <br> */ private Session session; public void destroy() { try{ session.close(); }catch(HibernateException e){ e.printStackTrace(); } } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occure */ public void init() throws ServletException { try{ Configuration config=new Configuration().configure(); SessionFactory sf=config.buildSessionFactory(); session=sf.openSession(); }catch(HibernateException e){ e.printStackTrace(); } } public void doGet(HttpServletRequest request,HttpServletResponse response) { try{ User user=(User)session.load(User.class, new Integer(1)); Blob photo=user.getPhoto(); InputStream in=photo.getBinaryStream(); OutputStream out=response.getOutputStream(); byte [] buf=new byte[1024]; int len; while((len=in.read(buf))!=-1){ out.write(buf, 0, len); } in.close(); out.close(); }catch(Exception e){ e.printStackTrace(); } } }
通过response.getOutputStream取得输出流,其他就与上段代码一致.servlet写好了,怎么在页面调用呢?那就更简单啦,直接在页面的img标签的src属性上调用该servlet即可,如:
<img id="test" src="/servlet/Test"/>
简单的例子,希望对初学者有帮助.
附记:如果不希望在servlet(或者action之类)中进行保存操作,希望在DAO进行此操作,那么InputStream的关闭问题可以通过hibernate的interceptor机制解决
发表评论
-
Hibernate事务与并发问题处理
2013-08-03 17:11 632数据库事务,是指作为单个逻辑工作单元执行的一系列操作。事务处理 ... -
Hibernate数据查询
2009-05-27 17:57 1722转载:http://blog.csdn.net/l ... -
Hibernate中级联操作cascade选项
2009-05-27 17:42 969转载:http://blog.csdn.net/lenotan ... -
Hibernate QBC高级查询
2009-05-27 17:39 1521转载:http://blog.csdn.net/l ... -
hibernate实体N对N映射实例(1)
2009-04-30 17:21 1240转载:http://hi.baidu.com/yuanquan ... -
hibernate中hql简介
2009-04-30 17:17 1243传统的SQL语言采用的是结构化的查询方法,而这种方法对于查询以 ... -
HQL查询及语法
2009-03-31 09:56 1245转载:http://blog.chinaunix.net ... -
Hibernate的主键生成方式
2009-03-26 16:53 905Hibernate中,<id>标签下的可选< ... -
Hibernate3.2对sqlserver2005查询分页的处理
2009-03-26 16:49 1291对Hibernate的查询分页,想必大家都比较熟悉了。setF ... -
Hibernate之---实体映射
2009-03-26 12:17 930转载:http://hi.baidu.com/javajava ... -
Hibernate之---复合主键
2009-03-26 12:16 1360转载:http://hi.baidu.com/javajava ... -
Hibernate过滤器
2009-03-26 12:12 1059import java.io.IOException; ... -
HibernateUtil.java
2009-03-26 12:11 2377import javax.naming.InitialCo ... -
HibernateDAO.java
2009-03-26 12:10 1266import java.util.List; /** ... -
Hibernate配置文件中配置各种数据库的driver、URL
2009-03-26 12:07 8951hibernate.properties ##### ... -
hql的几种常见形式
2009-03-23 18:52 1586session.createQuery(hql); Hibe ... -
Hibernate查询实体对象
2009-03-23 18:51 2224n+1问题:在默认情况下,使用query.iterator() ... -
Hibernate的缓存
2009-03-23 18:49 977转载:http://hi.baidu.com/javajava ... -
转一个hibernate泛型DAO的例子
2009-02-27 17:34 3832转载:http://blog.csdn.net/dingx ... -
HibernateTemplate相关方法
2009-02-27 17:21 3110转载:http://blog.csdn.net/m ...
相关推荐
这个“Hibernate学习代码示例”压缩包文件为初学者提供了丰富的学习资源,帮助他们理解并掌握Hibernate的核心概念和实际应用。 首先,让我们详细探讨一下Hibernate的基础知识。Hibernate是一个开源的ORM框架,它的...
在本示例中,我们将探讨如何使用 Hibernate 进行基本的数据存取操作。 **环境准备** 在开始 Hibernate 示例之前,我们需要确保以下组件已经准备就绪: 1. JDK:确保安装了 Java 开发环境,并设置好 `JAVA_HOME` ...
### Hibernate 存取 Oracle 的 CLOB 在 Java 开发中,使用 Hibernate 框架进行数据库操作是非常常见的。其中,处理 Oracle 数据库中的 CLOB 类型数据是一项重要的技能。CLOB(Character Large Object)是一种用于...
在Java的数据库编程中,有时我们需要处理存储大量二进制数据的情况,比如图片、音频或视频文件等。这种数据通常会被存储在BLOB(Binary Large Object)类型的字段中。本篇将详细介绍如何使用JDBC(Java Database ...
在运行示例前,你需要创建对应的数据库和表,并配置项目的数据库连接信息,以确保数据能正确地存取。 总的来说,这个"Struts2+Spring3+Hibernate3学习示例"是一个完整的Java Web开发基础架构,它展示了如何集成这三...
测试类会创建并操作持久化对象,调用辅助类的方法,验证数据是否正确地存取到数据库中。例如,创建一个新的User对象,保存到数据库,然后查询验证其是否成功存储。 5. **配置文件(Hibernate.cfg.xml)**:每个...
标题中的“hibernate存取json数据的代码分析”指的是在Java开发中,使用Hibernate框架来存储和检索JSON格式的数据。Hibernate是一个强大的ORM(对象关系映射)框架,它允许开发者将Java对象直接映射到数据库表,但在...
在多表操作中,这三个框架协同工作,使得数据的存取和业务逻辑的处理变得更加便捷。以下将详细介绍如何利用Struts2、Hibernate和Spring进行多表操作: 1. **Struts2**:作为前端控制器,Struts2接收用户的HTTP请求...
在Java世界中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑,而不是底层的数据存取。Eclipse作为一款强大的Java集成开发环境(IDE),为开发者提供了丰富的插件...
标题"spring+hibernate整合demo"表明这是一个示例项目,展示了如何将Spring和Hibernate这两个框架结合使用。整合Spring和Hibernate可以使应用程序更易于管理,因为Spring可以控制Hibernate的生命周期,并提供事务...
Hibernate 是一款强大的Java持久化框架,它简化了数据库操作,使得开发者能够更加专注于业务逻辑,而不是繁琐的数据存取。这个“Hibernate简单的demo”是为了帮助初学者理解并快速上手Hibernate框架而设计的。 **...
这里我们可以理解为,这是一个关于Hibernate框架的示例项目,它使用了Microsoft SQL Server 2008作为后端数据库。Hibernate是Java开发中常用的一个对象关系映射(ORM)框架,它能够将Java类与数据库表进行映射,简化...
例如,一个在线聊天室应用,用户发送的消息通过WebSocket实时传递给其他在线用户,同时这些消息在数据库中的存取则由Spring和Hibernate协同完成。 5. **源码和工具**: 标签“源码”意味着这个示例可能包含实际的...
在这个例子中,我们可能会看到如何创建实体类、配置Hibernate的XML映射文件,以及如何在代码中使用SessionFactory和Session来存取数据。 【标签解析】 "Hibernate"标签明确了讨论的主题,即Hibernate ORM框架。这个...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程模型来操作数据库,从而简化了Java应用程序中的数据存取工作。在Java世界中,Hibernate 已经成为了开发人员处理数据库交互的标准...
在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得开发者能够更加专注于业务逻辑,而不是底层的数据存取细节。本教程将深入探讨如何使用Hibernate构建一个完整的CRUD(创建、读取、...
通过ORM技术,Hibernate能够在Java对象和关系数据库之间建立一种映射关系,使得开发人员可以直接操作Java对象来进行数据的存取,而无需编写复杂的SQL语句。 #### 二、为什么选择Hibernate? 1. **减少SQL编写**:...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程模型来操作数据库,从而简化了Java应用程序中的数据存取工作。在Java世界里,Hibernate 已经成为了开发人员处理数据库交互的标准...
在"Hibernate 参考实例"中,我们将深入探讨如何使用Hibernate进行数据存取,包括基本的配置、实体类的创建、映射文件的编写、Session的使用以及查询操作。下面将详细介绍这些关键知识点。 1. **基本配置**: 使用...
1. **Hibernate存取JSON数据(换一种思路来存取数据)** 在某些场景下,如订单系统中存储优惠信息,这些信息可能是只读且不需频繁变更的文本数据。传统的做法可能涉及创建关联表,但这可能导致不必要的复杂性。一个...