ibatis BLOB 图片上传与显示
这几天仔细看了一下iBATIS的文档,发现2.2后,iBATIS的改变还是挺大的。对于自定义类型支持的也不错,这样对于blob和Clob数据的处理也就简单多了。
不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看iBATIS是如何支持Clob和blob的。
iBATIS提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler
在spring 中,提供了AbstractLobTypeHandler作为基础类,并且提供了相应的模版方法,所有的工作由LobHandler处理。
BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的Blob
ClobStringTypeHandler 用于处理Clob类型数据,使用字符串来映射Clob
有一点需要注意的是,AbstractLobTypeHandler中实现了事务支持,需要用来释放相应的资源,所以一定需要在事务环境中进行。
下面是一个简单的例子:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">? <input? type="file" name="photo"></form>2.在相应action类中添加如下属性? private File photo;//得到上传的文件? private String photoContentType;//得到文件的类型? private String photoFileName;//得到文件的名称并设置相应的set和get方法以便得到jsp页面中传入的图片的相应信息。3.将读取到的photo文件转化为byte[]存放到数据库中(其中twb是实体类的一个引用)?byte[] byte_photo = FileCopyUtils.copyToByteArray(getPhoto());
?????twb.setPhoto(byte_photo);
???? itnewsContentService.saveContent(twb);这样就完成了blob字段的插入。更新操作和插入类似就只是执行update语句,主要就是数据库数据的回显。jsp页面中通过下面这句话调用相应的action把数据库的图片通过输出流显示出来。<img src="news_showphoto.action?nnewsid=<s:property value="#request.tnews.nnewsid"/>">下面是相应action的代码TnewscontentWithBLOBs tcb = itnewsContentService
?????.findByNewId(new Long(getNnewsid()));
??? ServletOutputStream sout = ServletActionContext.getResponse()
?????.getOutputStream();
???sout.write(tcb.getPhoto());
???sout.flush();
???sout.close();接下去的删除操作就是delete一句话?现在是在数据库中存放路径的练习,这个就更简单了。insert操作1.jsp页面代码如上2.在action中添加相应属性如上3.将图片保存在本地并将路径保存在数据库代码如下String path = "e:/ibatis/photo/hbx/images";
???? File file = new File(path);
???? if (!file.exists())
????? file.mkdirs();
???FileUtils.copyFile(getPhoto(), new File(file, getPhotoFileName()));
???twb.setRealPath(path+"/"+getPhotoFileName());
???itnewsContentService.saveContent(twb);修改操作和insert操作类似。img中src的路径改成realpath字段中的内容。删除就直接delete就可以了。这些就是基本的上传操作,挺简单的 1 楼 qq184234675 2012-03-28 你的图片显示呢