大字段共分两种,一是clob,即长文本。通常用来存储超过一定数量的(如4000)的字符,一是blob,即二进制字节数据,通常就是用户提交的附件
这里假定ssh+mysql的开发环境已配置完成。通过设计一个用户管理程序来举例说明针对mysql的大字段处理方法
一、数据库字段定义
CREATE TABLE `users` (
`enable` int(11) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`account` varchar(255) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
`resume` text,
`photo` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
上面的resume字段用来存储长文本,类型定义为text,photo字段用来存储附件,类型定义为blob
二、POJO配置
User.java:
import java.sql.Blob;
import java.sql.Clob;
@Entity
@Table(name="users")
public class User {
private Integer id;
private String account;
private String password;
private Integer enable;
private String resume; //定义为string,对应数据库中resume(text)字段
private Blob photo; //定义为blob类型,对应数据库中photo(blob)字段
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getEnable() {
return enable;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public Blob getResume() {
return resume;
}
public void setResume(Blob resume) {
this.resume = resume;
}
public void setEnable(Integer enable) {
this.enable = enable;
}
}
三、配置struts的action
dao和service层没有什么特别的。也不需要特别处理,关键在struts 的action.
a 要配置附件接收属性,如:
private File file;
private String fileFileName;
private String fileContentType;
b 长文本字段由于在POJO里已配置为String,不需要特别处理
privage String resume
c 处理思路是通过hibernate将输入流转换为clob和blob之后再作持久化
UserAction.java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.sql.Blob;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
import cn.ibeans.ssh.users.model.User;
import cn.ibeans.ssh.users.service.UserManager;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 3345502231566725471L;
private static Logger logger = Logger.getLogger(UserAction.class);
private User user;
private UserManager userManager;
//以下三项是struts处理文件上传的约定风格
private File photo;
private String photoFileName;
private String photoContentType;
public File getPhoto() {
return photo;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public String getPhotoFileName() {
return photoFileName;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public String getPhotoContentType() {
return photoContentType;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Autowired
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
/**
*
* @return
* @throws Exception
*/
public String save() throws Exception{
if(null==user) return this.INPUT;
logger.debug("开始日志^");
//以用户提交到服务器端的文件实例为实参构造一个输入流,支持对二进制数据的两种存储方式
InputStream is = new FileInputStream(photo);
//1、第一种方式,将二进制文件以blob的方式存储到数据库
//将输入流转换为hibernate能识别的blob型数据对象
user.setPhoto(Hibernate.createBlob(is));
userManager.addUser(user);
//2、第二种方式,将二进制文件以文件方式存储到服务器硬盘
/*
//取得附件在服务器上的存储路径
String root = ServletActionContext.getServletContext().getRealPath("/upload");
File f1 = new File(root,photoFileName);//构造一个存储到指定路径的空文件
//File f2 = new File("D:\\lvlf\\apps\\webapps\\mavenssh\\upload\\note1.txt");
//以空文件为实参构造一个输出流,用来向硬盘上输出文件
OutputStream os = new FileOutputStream(f1);
byte[] bufer = new byte[400];
int len =0;
//循环将输入流的字节数据读入到临时字节数组中
while((len =is.read(bufer))>0){
logger.debug("读入的字节总数为"+len);
//将临时字节数组中的数据定入到输出流中,由于输出流是用指定路径的空文件构造的,
//当输出流关闭时,所有数据都会写到这个空文件中去,实现了用户将客户端文件上传到服务端的功能
os.write(bufer, 0, len);
}
is.close();
os.close();
*/
return this.SUCCESS;
}
public String list() throws Exception{
logger.debug("开始查询列表……");
List<User> users = userManager.findByHql("from User user", null);
logger.debug("用户数为:"+users.size());
return this.SUCCESS;
}
}
以上需要注意的是,最好不要同时将二进制文件既存入数据库又以文件的形式保存在硬盘上,Hibernate.createBlob()会将所有二进制字节数据从输入流中全部cut掉,不做保留
四、页面配置
页面上的表单也要也action对应上
user-input.jsp:
<s:form action="user_save" method="POST" enctype="multipart/form-data">
<s:textfield key="user.account"/>
<s:password key="user.password" />
<s:textarea key="user.resume" cssStyle="width:100%"></s:textarea>
<s:file key="photo"></s:file>
<s:submit/>
</s:form>
分享到:
相关推荐
首先,SSH框架是Java Web开发中常用的三大开源框架集成,它们分别是Struts2(负责MVC模式中的Controller层)、Spring(提供依赖注入和面向切面编程,管理整个应用的生命周期)和Hibernate(作为ORM工具,负责对象...
【基于SSH+MySQL的学生成绩管理系统】是一个典型的Web应用程序,它结合了Struts、Spring和Hibernate(SSH)三大框架,以及MySQL关系型数据库来实现高效、稳定的学生成绩管理。SSH框架组合提供了模型-视图-控制器...
通过这个SSH+MySQL的示例,开发者可以学习到如何整合三大框架来实现数据库的自动化创建,这对于快速搭建应用和数据库环境非常有帮助。同时,这种自动化也有助于提高开发效率,减少手动配置带来的错误。
【Java SSH + MySQL 大学信息管理系统源码与数据库详解】 本项目是一个基于Java的大学信息管理系统,采用了经典的SSH(Spring、Struts2、Hibernate)技术栈,配合MySQL数据库进行数据存储,实现了对重庆理工大学...
总结,基于SSH + MySQL的商品管理系统集成了Web开发的多种关键技术,涵盖了用户认证、数据管理、业务流程控制等多个方面,对于理解Java Web开发全貌,提升实际开发能力具有极大价值。通过这样的项目,开发者不仅能...
### SSH+MySQL开发中的字符集问题详解 #### 一、问题背景 在使用MySQL与SSH框架进行开发过程中,中文字符的乱码问题是非常常见的。尤其是对于新手开发者来说,这一问题可能会耗费大量的时间与精力去解决。本文将...
【高校学生选课系统SSH+mysql】是一款专为高等教育机构设计的在线选课平台,它利用了SSH(Struts2、Hibernate和Spring)这一流行的Java Web开发框架,并结合了MySQL数据库来存储和管理数据。这款系统的核心目标是...
OA办公自动化系统(SSH+MySQL)是一个基于Java技术栈,结合Struts、Spring和Hibernate三大框架,以及MySQL数据库实现的企业级应用。这个系统主要用于提升企业的办公效率,通过电子化流程管理,实现日常办公任务的自动...
在这个SSH+MySQL整合用户信息实例中,我们将深入探讨如何使用这三个框架来处理用户登录信息的管理。 首先,让我们了解SSH框架的核心组件: 1. **Struts2**:这是一个MVC(Model-View-Controller)框架,负责处理...
sql文件包含了数据库的创建脚本和可能的数据填充,通过这些脚本,我们可以看到数据表的字段定义、约束条件以及初始数据,这对于了解系统是如何存储和处理数据的至关重要。 文档部分可能包括需求分析、系统设计、...
总之,“企业级新闻系统(SSH+MYSQL)130221.zip”是一个综合性的项目,涵盖了前端展示、后端处理、数据库管理等多个方面,对于学习和实践Java Web开发有着很高的价值。通过分析和研究这个系统,开发者可以掌握企业级...
【学生成绩管理系统(SSH+MYSQL)130221.rar】是一个典型的计算机毕业设计项目,主要基于JAVA技术栈,结合了Struts、Hibernate和Spring(SSH框架)以及MySQL数据库,用于实现一个完整的学生成绩管理应用。下面将详细...
【标题】"JAVA 开发企业级新闻系统(SSH+MYSQL)" 涉及的主要知识点包括Java编程语言、Spring、Hibernate和Struts(SSH框架)以及MySQL数据库。这些技术是构建大型、复杂的企业级应用程序的基石。 【SSH框架】 1. ...
综上所述,这个项目涵盖了Web开发的核心技术和数据库管理,通过SSH框架实现了高效的业务逻辑处理,使用MySQL存储和管理数据,而JSP则提供了用户交互的界面。这样的系统设计既满足了学生和公司注册的需求,也体现了...
在这个项目中,SSH(Struts2、Spring、Hibernate)框架与MySQL数据库结合,构建了一个高效、可扩展的后端架构。 首先,让我们详细了解SSH框架: 1. **Struts2**:Struts2是一个开源的MVC(Model-View-Controller)...
在这个“SSH+JQuery+MySQL级联操作(省市县级联)”的案例中,我们将深入探讨如何利用这些技术实现一个省市县三级联动的效果。 首先,让我们了解什么是级联操作。级联操作通常指的是在一个选择发生变化时,相关的...
毕业设计,基于Java+SSH+MySql开发的网上商城系统,含完整源代码,数据库脚本,开发文档,开发视频 1.1 前台需求分析: 1.1.1 用户模块: 注册: 1.前台JS校验: 2.使用AJAX完成对用户名异步校验: 3.后台校验: 4.验证码...
本文将详细探讨如何使用SSH(Spring、Struts2、Hibernate)框架结合JSON和DTREE库,以及MySQL数据库来实现这样一个系统。首先,我们来看SSH框架的核心组成部分。 **Spring框架** 是一个全面的后端开发框架,提供了...
### jsp源码企业级新闻系统(SSH+MYSQL) #### 概述 本文将详细介绍一个基于JSP(Java Server Pages)技术的企业级新闻系统开发方案,该系统采用SSH(Struts2 + Spring + Hibernate)框架,并结合MySQL数据库进行...