
struts2+mybatis解决longblob字段问题



在Java Web开发中,Struts2和MyBatis是两个常用的框架,分别用于处理MVC模式中的动作控制和持久层操作。在某些情况下,我们可能需要存储大量的二进制数据,如图片、视频或者大文本文件,这时MySQL数据库中的`LONGBLOB`字段类型就派上用场了。然而,`LONGBLOB`字段的处理并不像普通字段那样直接,本文将深入探讨如何在Struts2和MyBatis中有效处理`LONGBLOB`字段,实现存取并下载功能。 `LONGBLOB`是MySQL中用于存储大容量二进制数据的字段类型,可以容纳最多4GB的数据。在Struts2+MyBatis的环境下,我们需要解决两个主要问题:如何将二进制数据存入数据库以及如何从数据库读取并在前端展示或下载。 1. 存储`LONGBLOB`字段: 在MyBatis中,自定义TypeHandler是非常重要的,它负责将Java对象转换为SQL值,以及将数据库返回的值转换回Java对象。对于`LONGBLOB`,我们可以创建一个名为`MyBlobTypeHandler`的类,继承自` BaseTypeHandler<Byte[]> `,并重写其中的`setNonNullParameter()`和`getResult()`方法,确保二进制数据能正确地被处理和存储。`MyBlobTypeHandler.java`文件就是用来实现这个功能的。 2. 读取`LONGBLOB`字段: 读取`LONGBLOB`字段时,我们需要从数据库查询数据,然后在Struts2的Action中将其转化为可下载的文件形式。在MyBatis的Mapper接口中,定义一个返回`LONGBLOB`字段的方法,如`getBlobById(int id)`。在Struts2 Action中调用这个方法获取数据,并设置到Action的属性中。 3. 下载`LONGBLOB`数据: 在Struts2的Action中,我们可以创建一个Action方法,比如`download()`,该方法会生成一个HTTP响应,设置相应的头信息(如Content-Type、Content-Disposition),然后将`LONGBLOB`数据写入到响应的输出流中。这样,用户就可以在浏览器端下载这个二进制文件了。 4. 示例代码: 以下是一个简单的`MyBlobTypeHandler`类的示例: ```java public class MyBlobTypeHandler extends BaseTypeHandler<Byte[]> { @Override public void setNonNullParameter(PreparedStatement ps, int i, Byte[] parameter, JdbcType jdbcType) throws SQLException { ps.setBytes(i, parameter); } @Override public Byte[] getNullableResult(ResultSet rs, String columnName) throws SQLException { return rs.getBytes(columnName); } // ...其他方法 } ``` Struts2 Action中的下载方法示例: ```java public String download() { byte[] blobData = myService.getBlobById(id); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); OutputStream out = response.getOutputStream(); out.write(blobData); out.flush(); out.close(); return null; } ``` 总结来说,处理`LONGBLOB`字段的关键在于自定义MyBatis的TypeHandler,以及在Struts2 Action中正确设置HTTP响应以实现下载功能。通过这种方式,我们可以在Struts2+MyBatis的环境中流畅地存取和下载大容量的二进制数据。在实际项目中,还需要考虑性能优化、错误处理等细节,确保系统的稳定性和用户体验。


























- 1


- Demi10012019-01-29资源可用,配置方便

- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Django框架的图片标签管理网站.zip
- (源码)基于Python的集成学习框架Cuber.zip
- 机器学习相关材料,以及Coursera课程的作业
- 机器学习算法的具体实现路径与实际应用探索
- 牵伴APP连接父母与子女的温情纽带-空巢老人关怀-亲情交流平台-精神赡养解决方案-远程监护系统-Android原生开发-Java编程语言-AndroidStudio开发环境-.zip
- 专注爬虫技术学习:涵盖 JS 逆向、APP 逆向、抓包、验证码等多领域知识收集
- 机器学习算法的实现和应用
- 基于支持向量机 SVM 算法的机器学习股票交易策略研究
- 计算机系统课程设计项目-基于Java的计算机系统全功能模拟器-模拟计算机硬件架构-进程调度算法-内存管理机制-文件系统实现-设备驱动模拟-多线程并发控制-系统调用接口-用户交互界面.zip
- 基于海康威视SDK开发的网络摄像头远程配置管理系统-支持FTP文件传输-定时抓图-计划任务配置-多设备批量操作-RESTful接口-Java后端服务-Swagger文档-Sprin.zip
- 4e1b8-main.zip
- 面向中文用户的机器学习学习资料汇总大全
- 专门面向中文用户的机器学习相关的学习资料大集合
- 基于计算机视觉的相机标定与3D坐标转换系统-提供完整的相机标定流程和2D到3D坐标转换算法-包含RGB相机标定-红外相机标定-图像去畸变-平面直线算法-PnP算法-8点算法-Sta.zip
- 使用 PHP-ML 库进行机器学习的实现方法
- 基于PHP-ML库实现机器学习


