通过Hibernate(不是JDBC)从blob中检索图像

由于如何从JSP页面中的数据库中检索和显示图像,我找到了从db / blob检索图像的非常好的解决方案?

但这是在每个图像请求上使用JDBC连接的解决方案。

我正在使用Spring 3注释和Hibernate 3

我尝试通过我的’imageService’做类似的事情,它由ImageServlet类中的注释自动assembly,但是我得到了nullPointerException ,这意味着可能没有dependency injection设置imageService

有什么方法可以解决这个问题吗? 我不喜欢在图像请求上建立单个jdbc连接。

我希望您将图像作为BLOB类型存储在表中(如果不尝试这样做,因为这是最佳实践)。 让我们假设您有一个Person类,其中包含存储在DB中的人员的image 。 如果您想要映射它,只需在保存图像的人员POJO中添加一个属性即可。

 @Column(name="image") @Blob private Blob image; 

显示它时,将其转换为byte[]并显示。

 private byte[] toByteArray(Blob fromImageBlob) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { return toByteArrayImpl(fromImageBlob, baos); } catch (Exception e) { } return null; } private byte[] toByteArrayImpl(Blob fromImageBlob, ByteArrayOutputStream baos) throws SQLException, IOException { byte buf[] = new byte[4000]; int dataSize; InputStream is = fromImageBlob.getBinaryStream(); try { while((dataSize = is.read(buf)) != -1) { baos.write(buf, 0, dataSize); } } finally { if(is != null) { is.close(); } } return baos.toByteArray(); } 

您可以查看以下示例以了解有关它的更多信息。

  1. http://i-proving.com/2006/08/23/blobs-and-hibernate
  2. http://snehaprashant.blogspot.com/2008/08/how-to-store-and-retrieve-blob-object.html
  3. http://viralpatel.net/blogs/2011/01/tutorial-save-get-blob-object-spring-3-mvc-hibernate.html

如您所见,有多种方法可以做到这一点。 选择适合你的。