webwork+freemarker+hibernate开发样版图像管理系统

本文介绍了如何使用webwork、freemarker和hibernate开发一个样版图像管理系统,包括用户登录、权限控制、图片管理、用户管理、用户组管理和回收站功能,以及数据库设计和部分代码实现。
摘要由CSDN通过智能技术生成

一、项目背景
       
        为某企业的工艺样版图实现信息化管理,方便对样版图所要进行的人工操作。


        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);
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值