大学生就业管理系统详细设计说明书2.doc_第1页
大学生就业管理系统详细设计说明书2.doc_第2页
大学生就业管理系统详细设计说明书2.doc_第3页
大学生就业管理系统详细设计说明书2.doc_第4页
大学生就业管理系统详细设计说明书2.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大学生就业管理详细设计说明书281 引言1.1 编写目的本详细设计说明书跟据博客信息管理系统详细设计说明书编写,描述了系统的详细设计,并为系统代码的编写提供依据。本文档的预期读者为:项目经理、系统分析员、测试经理、项目组长、系统开发人员。1.2 系统命名与版本大学生就业管理系统java命名规范 大学生就业管理系统V1.01.3 定义1.4 参考资料博客信息管理系统概要设计说明书。2 系统程序的结构3 设计说明3.1 数据库基本操作3.1.1 类DB.java的设计方法名称:ExportDB(DataSource ds)语义由DataSource数据源ds获取Connection连接对象conn方法名称:ResultSet openSql(String sql)语义由Connection连接对象conn获取Statement对象stmt;由Statement对象stmt执行sql查询返回ResultSet查询结果方法名称:ResultSet execSql(String sql)语义由Connection连接对象conn获取Statement对象stmt;由Statement对象stmt执行sql数据更新操作(包括新增、修改)返回ResultSet数据更新操作结果3.2 技能维护3.2.1 类HibernateDao.java的设计/* * Copyright (c) 2005-2009 * * Licensed under the Apache License, Version 2.0 (the License); * * $Id: HibernateDao.java 441 2009-09-07 15:47:34Z calvinxiu $ */package com.zds.spring.dao.base;import java.io.Serializable;import java.util.ArrayList;import java.util.List;import java.util.Map;import mons.lang.StringUtils;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.SessionFactory;import org.hibernate.criterion.CriteriaSpecification;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.Disjunction;import org.hibernate.criterion.MatchMode;import org.hibernate.criterion.Order;import org.hibernate.criterion.Projection;import org.hibernate.criterion.Projections;import org.hibernate.criterion.Restrictions;import org.hibernate.impl.CriteriaImpl;import org.hibernate.transform.ResultTransformer;import org.springframework.util.Assert;import org.springside.modules.orm.PropertyFilter;import org.springside.modules.orm.PropertyFilter.MatchType;import org.springside.modules.utils.ReflectionUtils;import mon.page.Page;/import mon.page.PropertyFilter;/import mon.page.PropertyFilter.MatchType;/* * 封装SpringSide扩展功能的Hibernat DAO泛型基类. * * 扩展功能包括分页查询,按属性过滤条件列表查询. * 可在Service层直接使用,也可以扩展泛型DAO子类使用,见两个构造函数的注释. * * param DAO操作的对象类型 * param 主键类型 * * author calvin */public class HibernateDao extends SimpleHibernateDao /* * 用于Dao层子类使用的构造函数. * 通过子类的泛型定义取得对象类型Class. * eg. * public class UserDao extends HibernateDao * */public HibernateDao() super();/* * 用于省略Dao层, Service层直接使用通用HibernateDao的构造函数. * 在构造函数中定义对象类型Class. * eg. * HibernateDao userDao = new HibernateDao(sessionFactory, User.class); */public HibernateDao(final SessionFactory sessionFactory, final Class entityClass) super(sessionFactory, entityClass);/ 分页查询函数 /* * 分页获取全部对象. */public Page getAll(final Page page) return findPage(page);/* * 按HQL分页查询. * * param page 分页参数.不支持其中的orderBy参数. * param hql hql语句. * param values 数量可变的查询参数,按顺序绑定. * * return 分页查询结果, 附带结果列表及所有查询时的参数. */SuppressWarnings(unchecked)public Page findPage(final Page page, final String hql, final Object. values) Assert.notNull(page, page不能为空);Query q = createQuery(hql, values);if (page.isAutoCount() long totalCount = countHqlResult(hql, values);page.setTotalCount(totalCount);setPageParameter(q, page);List result = q.list();page.setResult(result);return page;/* * 按HQL分页查询. * * param page 分页参数. * param hql hql语句. * param values 命名参数,按名称绑定. * * return 分页查询结果, 附带结果列表及所有查询时的参数. */SuppressWarnings(unchecked)public Page findPage(final Page page, final String hql, final Map values) Assert.notNull(page, page不能为空);Query q = createQuery(hql, values);if (page.isAutoCount() long totalCount = countHqlResult(hql, values);page.setTotalCount(totalCount);setPageParameter(q, page);List result = q.list();page.setResult(result);return page;/* * 按Criteria分页查询. * * param page 分页参数. * param criterions 数量可变的Criterion. * * return 分页查询结果.附带结果列表及所有查询时的参数. */SuppressWarnings(unchecked)public Page findPage(final Page page, final Criterion. criterions) Assert.notNull(page, page不能为空);Criteria c = createCriteria(criterions);if (page.isAutoCount() int totalCount = countCriteriaResult(c);page.setTotalCount(totalCount);setPageParameter(c, page);List result = c.list();page.setResult(result);return page;/* * 设置分页参数到Query对象,辅助函数. */protected Query setPageParameter(final Query q, final Page page) /hibernate的firstResult的序号从0开始q.setFirstResult(page.getFirst() - 1);q.setMaxResults(page.getPageSize();return q;/* * 设置分页参数到Criteria对象,辅助函数. */protected Criteria setPageParameter(final Criteria c, final Page page) /hibernate的firstResult的序号从0开始c.setFirstResult(page.getFirst() - 1);c.setMaxResults(page.getPageSize();if (page.isOrderBySetted() String orderByArray = StringUtils.split(page.getOrderBy(), ,);String orderArray = StringUtils.split(page.getOrder(), ,);Assert.isTrue(orderByArray.length = orderArray.length, 分页多重排序参数中,排序字段与排序方向的个数不相等);for (int i = 0; i orderByArray.length; i+) if (Page.ASC.equals(orderArrayi) c.addOrder(Order.asc(orderByArrayi); else c.addOrder(Order.desc(orderByArrayi);return c;/* * 执行count查询获得本次Hql查询所能获得的对象总数. * * 本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询. */protected long countHqlResult(final String hql, final Object. values) Long count = 0L;String fromHql = hql;/select子句与order by子句会影响count查询,进行简单的排除.fromHql = from + StringUtils.substringAfter(fromHql, from);fromHql = StringUtils.substringBefore(fromHql, order by);String countHql = select count(*) + fromHql;try count = findUnique(countHql, values); catch (Exception e) throw new RuntimeException(hql cant be auto count, hql is: + countHql, e);return count;/* * 执行count查询获得本次Hql查询所能获得的对象总数. * * 本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询. */protected long countHqlResult(final String hql, final Map values) Long count = 0L;String fromHql = hql;/select子句与order by子句会影响count查询,进行简单的排除.fromHql = from + StringUtils.substringAfter(fromHql, from);fromHql = StringUtils.substringBefore(fromHql, order by);String countHql = select count(*) + fromHql;try count = findUnique(countHql, values); catch (Exception e) throw new RuntimeException(hql cant be auto count, hql is: + countHql, e);return count;/* * 执行count查询获得本次Criteria查询所能获得的对象总数. */SuppressWarnings(unchecked)protected int countCriteriaResult(final Criteria c) CriteriaImpl impl = (CriteriaImpl) c;/ 先把Projection、ResultTransformer、OrderBy取出来,清空三者后再执行Count操作Projection projection = impl.getProjection();ResultTransformer transformer = impl.getResultTransformer();List orderEntries = null;try orderEntries = (List) ReflectionUtils.getFieldValue(impl, orderEntries);ReflectionUtils.setFieldValue(impl, orderEntries, new ArrayList(); catch (Exception e) logger.error(不可能抛出的异常:, e.getMessage();/ 执行Count查询int totalCount = (Integer) c.setProjection(Projections.rowCount().uniqueResult();/ 将之前的Projection,ResultTransformer和OrderBy条件重新设回去c.setProjection(projection);if (projection = null) c.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);if (transformer != null) c.setResultTransformer(transformer);try ReflectionUtils.setFieldValue(impl, orderEntries, orderEntries); catch (Exception e) logger.error(不可能抛出的异常:, e.getMessage();return totalCount;/ 属性过滤条件查询函数 /* * 按属性查找对象列表,支持多种匹配方式. * * param matchType 匹配方式,目前支持的取值见PropertyFilter的MatcheType enum. */public List findBy(final String propertyName, final Object value, final MatchType matchType) Criterion criterion = buildPropertyFilterCriterion(propertyName, value, value.getClass(), matchType);return find(criterion);/* * 按属性过滤条件列表查找对象列表. */public List find(List filters) Criterion criterions = buildPropertyFilterCriterions(filters);return find(criterions);/* * 按属性过滤条件列表分页查找对象. */public Page findPage(final Page page, final List filters) Criterion criterions = buildPropertyFilterCriterions(filters);return findPage(page, criterions);/* * 按属性条件列表创建Criterion数组,辅助函数. */protected Criterion buildPropertyFilterCriterions(final List filters) List criterionList = new ArrayList();for (PropertyFilter filter : filters) if (!filter.isMultiProperty() /只有一个属性需要比较的情况.Criterion criterion = buildPropertyFilterCriterion(filter.getPropertyName(), filter.getPropertyValue(),filter.getPropertyType(), filter.getMatchType();criterionList.add(criterion); else /包含多个属性需要比较的情况,进行or处理.Disjunction disjunction = Restrictions.disjunction();for (String param : filter.getPropertyNames() Criterion criterion = buildPropertyFilterCriterion(param, filter.getPropertyValue(), filter.getPropertyType(), filter.getMatchType();disjunction.add(criterion);criterionList.add(disjunction);Return criterionList.toArray(new CriterioncriterionList.size();/* * 按属性条件参数创建Criterion,辅助函数. */protected Criterion buildPropertyFilterCriterion(final String propertyName, final Object propertyValue,final Class propertyType, final MatchType matchType) Assert.hasText(propertyName, propertyName不能为空);Criterion criterion = null;try /按entity property中的类型将字符串转化为实际类型.Object realValue = ReflectionUtils.convertValue(propertyValue, propertyType);/根据MatchType构造criterionif (MatchType.EQ.equals(matchType) criterion = Restrictions.eq(propertyName, realValue);if (MatchType.LIKE.equals(matchType) criterion = Restrictions.like(propertyName, (String) realValue, MatchMode.ANYWHERE);if (MatchType.LE.equals(matchType) criterion = Restrictions.le(propertyName, realValue);if (MatchType.LT.equals(matchType) criterion = Restrictions.lt(propertyName, realValue);if (MatchType.GE.equals(matchType) criterion = Restrictions.ge(propertyName, realValue);if (MatchType.GT.equals(matchType) criterion = Restrictions.gt(propertyName, realValue); catch (Exception e) throw ReflectionUtils.convertToUncheckedException(e);return criterion;/* * 判断对象的属性值在数据库内是否唯一. * * 在修改对象的情景下,如果属性新修改的值(value)等于属性原来的值(orgValue)则不作比较. */public boolean isPropertyUnique(final String propertyName, final Object newValue, final Object oldValue) if (newValue = null | newValue.equals(oldValue)return true;Object object = findUniqueBy(propertyName, newValue);return (object = null);3.2.2 类SimpleHibernateDao.java的设计类SkillAction用来根据用户的不同操作,调用不同的方法对数据库进行操作。方法方法名称:doList ()语法函数原型package com.zds.spring.dao.base;import java.io.Serializable;import java.util.ArrayList;import java.util.LinkedHashSet;import java.util.List;import java.util.Map;import java.util.Set;import org.hibernate.Criteria;import org.hibernate.Hibernate;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.CriteriaSpecification;import org.hibernate.criterion.Criterion;import org.hibernate.criterion.Restrictions;import org.hibernate.metadata.ClassMetadata;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.util.Assert;Import org.springframework.beans.factory.annotation.Autowired;import org.springside.modules.utils.ReflectionUtils;/* * 封装Hibernate原生API的DAO泛型基类. * 可在Service层直接使用,也可以扩展泛型DAO子类使用. * 参考Spring2.5自带的Petlinc例子,取消了HibernateTemplate,直接使用Hibernate原生API. * param DAO操作的对象类型 * param 主键类型 * author calvin */SuppressWarnings(unchecked)public class SimpleHibernateDao protected Logger logger = LoggerFactory.getLogger(getClass();protected SessionFactory sessionFactory;protected Class entityClass;/* * 用于Dao层子类使用的构造函数. * 通过子类的泛型定义取得对象类型Class. */public SimpleHibernateDao() this.entityClass = ReflectionUtils.getSuperClassGenricType(getClass();/* * 用于用于省略Dao层, 在Service层直接使用通用SimpleHibernateDao的构造函数. * 在构造函数中定义对象类型Class. */public SimpleHibernateDao(final SessionFactory sessionFactory, final Class entityClass) this.sessionFactory = sessionFactory;this.entityClass = entityClass;public SessionFactory getSessionFactory() return sessionFactory;/* * 采用Autowired按类型注入SessionFactory,当有多个SesionFactory的时候Override本函数. */ Autowiredpublic void setSessionFactory(final SessionFactory sessionFactory) this.sessionFactory = sessionFactory;/* * 取得当前Session. */public Session getSession() return sessionFactory.getCurrentSession();/* * 保存新增或修改的对象. */public void saveOrUpdate(final T entity) Assert.notNull(entity, entity不能为空);getSession().saveOrUpdate(entity);logger.debug(save entity: , entity); public void save(final T entity) Assert.notNull(entity, entity不能为空);getSession().save(entity);logger.debug(save entity: , entity); public void update(final T entity) Assert.notNull(entity, entity不能为空);getSession().update(entity);logger.debug(update entity: , entity);/* * 删除对象. * * param entity 对象必须是session中的对象或含id属性的transient对象. */ public void delete(final T entity) if(entity!=null) getSession().delete(entity); logger.debug(delete entity: , entity); else logger.debug(delete entity is null); /* * 按id删除对象. */public void delete(final PK id) Assert.notNull(id, id不能为空);delete(get(id);logger.debug(delete entity ,id is , entityClass.getSimpleName(), id);/* * 按id获取对象. */public T load(final PK id) Assert.notNull(id, id不能为空);return (T) getSession().load(entityClass, id); /* * 按id获取对象. */public T get(final PK id) Assert.notNull(id, id不能为空);return (T) getSession().get(entityClass, id);/* *获取全部对象. */public List getAll() return find();/* * 按属性查找对象列表,匹配方式为相等. */public List findBy(final String propertyName, final Object value) Assert.hasText(propertyName, propertyName不能为空);Criterion criterion = Restrictions.eq(propertyName, value);return find(criterion);/* * 按属性查找唯一对象,匹配方式为相等. */public T findUniqueBy(final String propertyName, final Object value) Assert.hasText(propertyName, propertyName不能为空);Criterion criterion = Restrictions.eq(propertyName, value);return (T) createCriteria(criterion).uniqueResult();/* * 按id列表获取对象. */public List findByIds(List ids) return find(Restrictions.in(getIdName(), ids);/* * 按HQL查询对象列表. * * param values 数量可变的参数,按顺序绑定. */public List find(final String hql, final Object. values) return createQuery(hql, values).list();/* * 按HQL查询对象列表. * * param values 命名参数,按名称绑定. */public List find(final String hql, final Map values) return createQuery(hql, values).list();/* * 按HQL查询唯一对象. * * param values 数量可变的参数,按顺序绑定. */public X findUnique(final String hql, final Object. values) return (X) createQuery(hql, values).uniqueResult();/* * 按HQL查询唯一对象. * * param values 命名参数,按名称绑定. */public X findUnique(final String hql, final Map values) return (X) createQuery(hql, values).uniqueResult();/* * 执行HQL进行批量修改/删除操作. */public int batchExecute(final String hql, final Object. values) return createQuery(hql, values).executeUpdate();/* * 执行HQL进行批量修改/删除操作. * return 更新记录数. */public int batchExecute(final String hql, final Map values) return createQuery(hql, values).executeUpdate();/* * 根据查询HQL与参数列表创建Query对象. * * 本类封装的find()函数全部默认返回对象类型为T,当不为T时使用本函数. * param values 数量可变的参数,按顺序绑定. */public Query createQuery(final String queryString, final Object. values) Assert.hasText(queryString, queryString不能为空);Query query = getSession().createQuery(queryString);if (values != null) for (int i = 0; i values.length; i+) query.setParameter(i, valuesi);return query;/* * 根据查询HQL与参数列表创建Query对象. * * param values 命名参数,按名称绑定. */public Query createQuery(final String queryString, final Map values) Assert.hasText(queryString, queryString不能为空);Query query = getSession().createQuery(queryString);if (values != null) query.setProperties(values);return query;/* * 按Criteria查询对象列表. * * param criterions 数量可变的Criterion. */public List find(final Criterion. criterions) return createCriteria(criterions).list();/* * 按Criteria查询唯一对象. * * param criterions 数量可变的Criterion. */public T findUnique(final Criterion. criterions) return (T) createCriteria(criterions).uniqueRes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论