一、项目背景
为某企业的工艺样版图实现信息化管理,方便对样版图所要进行的人工操作。
1) 带用户,密码登录;
2) 用户身份分级别, 不同身份的用户看不同的样办图;
3) 带搜索功能;
4) 点击样办图显示全图和属性;
二、系统环境
开发环境:Windows XP Eclipse3.1 JDK1.5 Tomcat5.5.17
系统架构:Webwork2.2.4+Freemarker-2.3.8+Hibernate-3.1.3
后台数据库:Mysql-5.0.13
第三方类库:webwork-2.2.4 log4j-1.2.8 hibernate-3.1.3 dwr-1.0 dom4j-1.6.1
mysql-connector-java-3.1.12-bin.jar fileupload-1.1.1 spring-1.2.6 freemarker-2.3.8
三、需求分析
实现用户对图片的浏览、上传、删除等操作,图片的显示可以分为:列表显示、缩略图显示、幻灯片显示,同时能详细显示某个图片的详细描述,上传时间,规格、大小、上传人等。系统管理员可以设置系统用户组,超级用户: 拥有所有功能 添加, 删除, 修改 和浏览所有目录,受限用户: a. 可添加文件, 浏览指定目录b. 只可浏览指定目录文件,系统管理员可以对图片进行分类存储:A) 可以按日期分(09/07/2006);B) 可以按类型分(类型有: a) 电脑袋 b) 旅行包 c) 行李包 d) 公文包 e),创建目录名,同时指定该目录所属用户组。可以对图片文件按要求进行搜索:A) 可以按名称搜索 B) 可以按分类搜索 C) 搜索某时间段产品 ..... 搜索出来的产品可以以缩略图显示 D) 按用户搜索,搜索后显示该用户的所有图片
四、模块设计
分类管理
系统管理员可以增加、删除、编辑图片目录,同时更改图片目录的所属用户组
样版图管理
用户可以查询、上传图片到指定分类的目录路径,删除、编辑(只限管理员身份且具有相应权限)
用户管理
管理员可以增加、删除、编辑用户,指定用户所属用户组
用户组管理
管理员可以增加、删除、编辑用户组信息
系统回收站
存放待删除的图片文件或目录文件(只限管理员身份且具有相应权限)
我的样版图
同样版图管理相似,全部用户可使用,区别在于,只能查询和处理所属用户创建的图象
个人回收站
同系统回收站,区别于用户级和系统级的使用
我的个人信息
登陆系统的用户对个人信息进行修改,密码等
五、数据库设计
CREATE TABLE `scool_catalog` (
`catalog_id` varchar(10) NOT NULL,
`parent_id` varchar(10) NOT NULL default 'FFFFFFFFFF',
`name` varchar(20) NOT NULL,
`refuse_user` text,
`create_date` datetime default NULL,
`level` char(1) NOT NULL default '0',
PRIMARY KEY (`catalog_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `scool_group` (
`group_id` varchar(10) NOT NULL,
`group_name` varchar(20) NOT NULL,
`popedom_value` bigint(64) default NULL,
PRIMARY KEY (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `scool_image` (
`image_id` varchar(10) NOT NULL,
`file_name` varchar(60) NOT NULL,
`is_delete` char(1) NOT NULL default '0',
`catalog_f_id` varchar(10) NOT NULL,
`catalog_s_id` varchar(10) NOT NULL,
`image_name` varchar(60) NOT NULL,
`size` int(32) NOT NULL default '0',
`description` text,
`create_date` datetime NOT NULL,
`WH` varchar(20) default NULL,
`user_name` varchar(20) default NULL,
`operator` varchar(20) default NULL,
`remove_date` datetime default NULL,
PRIMARY KEY (`image_id`),
KEY `title_index` (`file_name`),
KEY `user_name_index` (`user_name`),
KEY `operator_index` (`operator`),
KEY `image_name_index` (`image_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `scool_user` (
`user_name` varchar(20) NOT NULL,
`password` varchar(32) NOT NULL,
`real_name` varchar(10) default NULL,
`sex` char(1) NOT NULL default '0',
`status` char(1) NOT NULL default '0',
`group_id` varchar(10) default NULL,
`role` char(1) NOT NULL default '0',
PRIMARY KEY (`user_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
六、系统预览
七、详细设计(节选)
1.数据访问核心类HibernateDao.java
/**
* HibernateDao
*/
package com.school71.imageims.dao;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Iterator;
//import java.lang.reflect.Field;
import com.school71.imageims.model.Garbage;
import com.school71.imageims.model.Image;
import com.school71.imageims.util.GeneratorUtil;
import com.school71.imageims.util.HibernateUtil;
import com.school71.imageims.util.FileUtil;
import com.school71.imageims.cfg.Config;
import org.hibernate.CacheMode;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.proxy.HibernateProxy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author <a href="mailto:sogui@126.com">sogui</a>
* @version 1.0
* @date 2006 2006-9-18 22:38:20
*/
public class HibernateDao {
private static final Log log=LogFactory.getLog(HibernateDao.class);
public static final String SUPER_USER_NAME="root";
/**
*
* @param hql
* @return
* @TODO get a data object by specify hql
*/
@SuppressWarnings("finally")
protected Object getDataByHql(String hql){
Object object=null;
Session session=openSession();
Transaction ts=session.getTransaction();
try {
ts.begin();
Query query=session.createQuery(hql);
//.setCacheable(true)
//.setCacheMode(CacheMode.NORMAL);
object=query.uniqueResult();
ts.commit();
} catch (HibernateException e) {
log.error("Error to get a data object by hql=:"+hql,e);
ts.rollback();
}finally{
//closeSession();
return object;
}
}
/**
*
* @param clazz
* @param param
* @param value
* @param operator
* @return
* @TODO
*/
protected Object getData(Class clazz,String[]param,String[]value,String operator){
StringBuffer sb=new StringBuffer();
sb.append("from ");
sb.append(clazz.getSimpleName());
sb.append(" as tb");
sb.append(" where");
for(int i=0;i<param.length;i++){
sb.append(" tb.");
sb.append(param[i]);
sb.append(" =");
sb.append("'");
sb.append(value[i]);
sb.append("'");
if(i!=param.length-1){
sb.append(operator);
}
}
return getDataByHql(sb.toString());
}
protected Object getData(Class clazz,Map<String,String> paramMap,String operator){
StringBuffer sb=new StringBuffer();
sb.append("from ");
sb.append(clazz.getSimpleName());
sb.append(" as tb");
sb.append(" where");
for(Iterator it=paramMap.keySet().iterator();it.hasNext();){
String key=(String)it.next();
sb.append(" tb.");
sb.append(key);
sb.append("='");
sb.append(paramMap.get(key));
sb.append("'");
if(it.hasNext()){
sb.append(operator);
}
}
return getDataByHql(sb.toString());
}
/**
* if close the session then lazy function will not be executed
* @param clazz
* @param key
* @return
* @TODO
*/
@SuppressWarnings("finally")
protected Object getDataByKey(Class clazz,Serializable key){
Object object=null;
Session session=openSession();
Transaction ts=session.getTransaction();
try {
ts.begin();
object=session.get(clazz,key);
ts.commit();
} catch (HibernateException e) {
ts.rollback();
log.error("Error to get a "+clazz.getName()+" data object by key="+key,e);
}finally{
//closeSession();
return object;
}
}
@SuppressWarnings("finally")
protected List getDataListByHql(String hql,int pageNo,int pageSize){
List list=null;
Session session=openSession();
Transaction ts=session.getTransaction();
try {
ts.begin();
Query query=session.createQuery(hql)
//.setCacheable(true)
//.setCacheMode(CacheMode.NORMAL)
.setFirstResult((pageNo-1) * pageSize)
.setMaxResults(pageSize);
list=query.list();
ts.commit();
} catch (HibernateException e) {
log.error("Occur an error when get list by hql : "+hql,e);
}finally{
//closeSession();
return list;
}
}
@SuppressWarnings("finally")
protected List getDataListByHql(String hql){
List list=null;
Session session=openSession();
Transaction ts=session.getTransaction();
try {
ts.begin();
Query query=session.createQuery(hql);
//.setCacheable(true)
//.setCacheMode(CacheMode.NORMAL);
list=query.list();
ts.commit();
} catch (HibernateException e) {
ts.rollback();
log.error("Error to get a list by hql :"+hql,e);
e.printStackTrace();
}finally{
//closeSession();
return list;
}
}
/**
*
* @param hql
* @return
* @TODO
*/
@SuppressWarnings("finally")
protected Integer getDataCountByHql(String hql){
int count=0;
Session session=openSession();
Transaction ts=session.getTransaction();
try {
ts.begin();
count=(Integer)session.createQuery(hql).list().iterator().next();
ts.commit();
} catch (HibernateException e) {
ts.rollback();
log.error("Error to get record count");
}finally{
closeSession();
return count;
}
}
@SuppressWarnings("finally")
protected Integer getDataCountByHql(String tempHql,Map paramMap){
int count=0;
Session session=openSession();
Transaction ts=session.getTransaction();
try {
ts.begin();
Query query=session.createQuery(tempHql);
query=fillQuery(query,paramMap);
count=(Integer)query.uniqueResult();
ts.commit();
} catch (HibernateException e) {
log.error("Error to count the record count",e);