- 浏览: 648620 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (142)
- Android (38)
- hibernate (12)
- java基础 (18)
- spring (5)
- struts1.x (8)
- struts2.x (7)
- web开发 (11)
- tomact (1)
- jbpm3.2 (2)
- jpa (2)
- strutstest (1)
- js (3)
- WebWork (2)
- 数据库 (5)
- mysql (6)
- myeclipse和eclipse (8)
- java与办公 (2)
- linux (10)
- 性能调优 (2)
- 搜索引擎 (1)
- urlrewritefilter (1)
- Git (3)
- Dos (1)
- Chrome (1)
- PLMN (1)
最新评论
-
3xxx:
你这个靠谱。谢谢。
git push用法和常见问题分析 -
lord_is_layuping:
mark
git push用法和常见问题分析 -
calatustela:
@Resource是名字优先注入,可以用来注入Map之类的常量 ...
spring 注解@Resource 和 @Autowired -
Mr.Cheney:
repo sync 下载耗时太久了, 有没有国内的站可下编译环 ...
使用repo下载google 的android4.4 源码,和编译.运行 -
北极光之吻:
kslinabc 写道请问楼主,4.4下载下来有多大,为啥我这 ...
使用repo下载google 的android4.4 源码,和编译.运行
一般网站在处理用户上传图片时通常采用两种策略:一是直接把图片存入数据库中的Blob字段;二是数据库中只存储图片的在服务器上的路径信息 ,图片存放在分门别类的文件中,使用的时候从数据库读取路径信息到页面img元素即可.在此不讨论两种方案的优劣,我只是写了个hibernate的例子 来实现第一种策略.例子很简单,t_user表主要两个字段,name和photo,其中photo字段类型为Blob.在此例中数据库我采用 mysql,oracle的Blob字段比较特殊,你必须自定义类型,具体的请自行搜索,这方面的资料很多.
//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"/>
发表评论
-
java 向mysql插入blob的图片以及从mysql读取图片并用jsp显示及CLOB
2012-06-09 01:09 9010插入图片:注意如果mysql是gbk编码的要先把mysq ... -
(mysql)update同时更新多个表
2012-06-09 01:10 1780(1) 同时更新的多个表之间没关系的: update ... -
mysql加密解密函数
2012-06-09 01:10 1640mysql下的加密函数有如下几个PASSWORD():创建一个 ... -
MySql数据库编码和ENGINE的配置
2012-06-11 09:18 10911、查看编码 show variables like ... -
关于mysql 前台插入正常,用select 查询显示时乱码的问题
2012-06-11 09:19 1105之前一直是把所有的编码设置为utf8,在网页中插入正 ... -
mysql中limit用法
2012-06-08 14:54 0使用查询语句的时候,经常要返回前几条或者中间某几行数 ... -
hibernate 一对一 和 N-1
2012-06-17 15:15 1787Hibernate 一对一外键单向关联 事实上,单 ... -
Hibernate createQuery(".....")的几种不同用法
2012-06-10 09:27 1959String category = "abc& ... -
Caused by: org.hibernate.MappingException: must specify an identifier type
2012-06-17 15:15 1053Caused by: org.hibernate.Map ... -
Hibernate中的Inverse和cascade属性配置
2012-06-14 18:21 1255Inverse和cascade是Hiberna ... -
hibernate inverse cascade详解
2012-06-12 12:43 1769一直对两者之间的区别不是很清楚,认为既然Inverse似乎 ... -
eclipse从数据库逆向生成Hibernate实体类
2012-06-23 15:47 1358http://blog.csdn.net/wangpeng04 ... -
Hibernate inverse
2012-06-14 18:21 1048inverse 标示是否放弃对java对象关系的维护:inve ... -
Caused by: java.lang.NoClassDefFoundError: javax/persistence/EntityListeners
2012-06-13 16:48 1362SSH整合时报下面的错误提示: org.springf ... -
Caused by: org.dom4j.DocumentException: Connection timed out: connect Nested exc
2012-06-19 11:06 371501 org.hibernate.InvalidMapp ... -
hibernate2和3的区别讲解
2012-05-23 22:47 1164尽管Hibernate 3.0 与Hibernate2.1的源 ... -
hibernate解析映射文件慢
2012-04-20 23:20 1210今天发现自己的web项目启动很慢,8分钟,我急死了啊开始把日子 ...
相关推荐
在本示例中,我们将探讨如何使用 Hibernate 进行基本的数据存取操作。 **环境准备** 在开始 Hibernate 示例之前,我们需要确保以下组件已经准备就绪: 1. JDK:确保安装了 Java 开发环境,并设置好 `JAVA_HOME` ...
在运行示例前,你需要创建对应的数据库和表,并配置项目的数据库连接信息,以确保数据能正确地存取。 总的来说,这个"Struts2+Spring3+Hibernate3学习示例"是一个完整的Java Web开发基础架构,它展示了如何集成这三...
编译并运行`Main.java`,观察控制台输出,确认数据是否成功存取到MySQL数据库中。 通过这个简单的例子,你可以了解到如何在实际项目中使用Hibernate来操作MySQL数据库。随着对Hibernate的深入理解,你可以利用它的...
本文将详细介绍如何利用Struts2框架结合Spring和Hibernate技术栈实现图片的上传、存储至MySQL数据库以及从数据库读取并在Web页面展示的功能。整个过程不涉及Servlet的操作。 #### 需求分析与实现目标 1. **图片...
网上书城系统是一个基于Struts、Hibernate和MySQL的典型企业级应用示例,它展示了如何将这三种技术结合使用来构建一个完整的Web应用程序。在这个系统中,Struts作为MVC(模型-视图-控制器)框架负责处理用户请求并...
在Java世界中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑,而不是底层的数据存取。Eclipse作为一款强大的Java集成开发环境(IDE),为开发者提供了丰富的插件...
Hibernate 是一款强大的Java持久化框架,它简化了数据库操作,使得开发者能够更加专注于业务逻辑,而不是繁琐的数据存取。这个“Hibernate简单的demo”是为了帮助初学者理解并快速上手Hibernate框架而设计的。 **...
标题“Spring2.0+hibernate3.1+log4j+mysql demo”揭示了一个集成开发环境,其中包含了四个核心的技术组件:Spring框架的2.0版本、Hibernate ORM框架的3.1版本、日志工具log4j以及MySQL数据库。这个组合常用于构建...
在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得开发者能够更加专注于业务逻辑,而不是底层的数据存取细节。本教程将详细讲解如何搭建Hibernate开发环境,以便进行高效、便捷的...
【hibernate-demo.zip】是一个压缩包,其中包含了一个使用Eclipse集成开发环境搭建的Hibernate框架访问MariaDB数据库的示例项目。这个项目旨在帮助开发者理解如何在Java应用中运用Hibernate进行数据持久化操作,同时...
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">...
Hibernate支持多种数据库,包括MySQL、Oracle、PostgreSQL等。 **2. Ehcache介绍** Ehcache是一个内存缓存系统,用于存储临时数据,以提高数据检索速度。它可以缓存任何Java对象,并且支持本地和分布式缓存模式。...
Hibernate 是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者可以更加专注于业务逻辑,而非繁琐的数据存取操作。在本篇文章中,我们将深入探讨Hibernate的配置过程及其核心概念。 一、...
在Java开发中,Hibernate是一个非常流行的持久化框架,它极大地简化了数据库操作,使得开发者可以专注于业务逻辑而不是繁琐的数据存取。本教程将介绍如何利用特定工具快速构建Hibernate项目,以便更高效地管理和操作...
- **环境配置**:包括了如何配置MySQL数据库、创建必要的表结构,并设置Hibernate的核心配置文件`hibernate.cfg.xml`。 - **实体类设计**:如何根据数据库表结构设计对应的Java实体类,并通过XML或注解的方式完成...
总结起来,"Hibernate+Struts数据库操作实例"是一个综合性的示例,旨在教授开发者如何利用这两个框架高效地实现Web应用的数据库管理。通过实践这个实例,开发者不仅可以掌握Hibernate和Struts的基本用法,还能了解到...
通过将Java对象与数据库表之间的映射关系定义在XML配置文件(hibernate.cfg.xml)或注解中,Hibernate能够自动完成数据的存取工作。 ### 二、环境准备 1. **JDK安装**:确保你的开发环境中已经安装了JDK,并且版本...