大学生就业管理系统详细设计说明书2.docx

上传人:b****9 文档编号:25143985 上传时间:2023-06-05 格式:DOCX 页数:42 大小:24.33KB
下载 相关 举报
大学生就业管理系统详细设计说明书2.docx_第1页
第1页 / 共42页
大学生就业管理系统详细设计说明书2.docx_第2页
第2页 / 共42页
大学生就业管理系统详细设计说明书2.docx_第3页
第3页 / 共42页
大学生就业管理系统详细设计说明书2.docx_第4页
第4页 / 共42页
大学生就业管理系统详细设计说明书2.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

大学生就业管理系统详细设计说明书2.docx

《大学生就业管理系统详细设计说明书2.docx》由会员分享,可在线阅读,更多相关《大学生就业管理系统详细设计说明书2.docx(42页珍藏版)》请在冰豆网上搜索。

大学生就业管理系统详细设计说明书2.docx

大学生就业管理系统详细设计说明书2

大学生就业管理系统详细设计说明书2

《大学生就业管理》

详细设计说明书

1

1引言

1.1编写目的

本详细设计说明书跟据《博客信息管理系统详细设计说明书》编写,描述了

系统的详细设计,并为系统代码的编写提供依据。

本文档的预期读者为:

项目经理、系统分析员、测试经理、项目组长、系统开发人员。

1.2系统命名与版本

《大学生就业管理系统java命名规范》

大学生就业管理系统V1.0

1.3定义

1.4参考资料

《博客信息管理系统概要设计说明书》。

2系统程序的结构

3设计说明

3.1数据库基本操作

3.1.1类DB.java的设计方法名称:

ExportDB(DataSourceds)

语义

由DataSource数据源ds获取Connection连接对象conn方法名称:

ResultSetopenSql(Stringsql)

语义

由Connection连接对象conn获取Statement对象stmt;

由Statement对象stmt执行sql查询

返回ResultSet查询结果

方法名称:

ResultSetexecSql(Stringsql)

语义

由Connection连接对象conn获取Statement对象stmt;

2

由Statement对象stmt执行sql数据更新操作(包括新增、修改)

返回ResultSet数据更新操作结果

3.2技能维护

3.2.1类HibernateDao.java的设计/**

*Copyright(c)2005-2009

*

*LicensedundertheApacheLicense,Version2.0(the"License");

*

*$Id:

HibernateDao.java4412009-09-0715:

47:

34Zcalvinxiu$

*/

packagecom.zds.spring.dao.base;

importjava.io.Serializable;

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Map;

importmons.lang.StringUtils;importorg.hibernate.Criteria;

importorg.hibernate.Query;

importorg.hibernate.SessionFactory;importorg.hibernate.criterion.CriteriaSpecification;

importorg.hibernate.criterion.Criterion;importorg.hibernate.criterion.Disjunction;importorg.hibernate.criterion.MatchMode;importorg.hibernate.criterion.Order;importorg.hibernate.criterion.Projection;importorg.hibernate.criterion.Projections;importorg.hibernate.criterion.Restrictions;importorg.hibernate.impl.CriteriaImpl;

3

importorg.hibernate.transform.ResultTransformer;importorg.springframework.util.Assert;importorg.springside.modules.orm.PropertyFilter;importorg.springside.modules.orm.PropertyFilter.MatchType;

importorg.springside.modules.utils.ReflectionUtils;

importmon.page.Page;//importmon.page.PropertyFilter;

//importmon.page.PropertyFilter.MatchType;

/**

*封装SpringSide扩展功能的HibernatDAO泛型基类.

*

*扩展功能包括分页查询,按属性过滤条件列表查询.

*可在Service层直接使用,也可以扩展泛型DAO子类使用,见两个构造函数的注释.

*

*@paramDAO操作的对象类型

*@param主键类型

*

*@authorcalvin

*/

publicclassHibernateDaoextendsSimpleHibernateDao{

/**

*用于Dao层子类使用的构造函数.

*通过子类的泛型定义取得对象类型Class.

*eg.

*publicclassUserDaoextendsHibernateDao{

*}

4

*/

publicHibernateDao(){

super();

}

/**

*用于省略Dao层,Service层直接使用通用HibernateDao的构造函数.

*在构造函数中定义对象类型Class.

*eg.

*HibernateDaouserDao=newHibernateDao

Long>(sessionFactory,User.class);

*/

publicHibernateDao(finalSessionFactorysessionFactory,finalClassentityClass){

super(sessionFactory,entityClass);

}

//分页查询函数//

/**

*分页获取全部对象.

*/

publicPagegetAll(finalPagepage){

returnfindPage(page);

}

/**

*按HQL分页查询.

5

*

*@parampage分页参数.不支持其中的orderBy参数.

*@paramhqlhql语句.

*@paramvalues数量可变的查询参数,按顺序绑定.

*

*@return分页查询结果,附带结果列表及所有查询时的参数.

*/

@SuppressWarnings("unchecked")

publicPagefindPage(finalPagepage,finalStringhql,

finalObject...values){

Assert.notNull(page,"page不能为空");

Queryq=createQuery(hql,values);

if(page.isAutoCount()){

longtotalCount=countHqlResult(hql,values);

page.setTotalCount(totalCount);

}

setPageParameter(q,page);

Listresult=q.list();

page.setResult(result);

returnpage;

}

/**

*按HQL分页查询.

*

*@parampage分页参数.

*@paramhqlhql语句.

6

*@paramvalues命名参数,按名称绑定.

*

*@return分页查询结果,附带结果列表及所有查询时的参数.

*/

@SuppressWarnings("unchecked")

publicPagefindPage(finalPagepage,finalStringhql,

finalMapvalues){

Assert.notNull(page,"page不能为空");

Queryq=createQuery(hql,values);

if(page.isAutoCount()){

longtotalCount=countHqlResult(hql,values);

page.setTotalCount(totalCount);

}

setPageParameter(q,page);

Listresult=q.list();

page.setResult(result);

returnpage;

}

/**

*按Criteria分页查询.

*

*@parampage分页参数.

*@paramcriterions数量可变的Criterion.

*

*@return分页查询结果.附带结果列表及所有查询时的参数.

7

*/

@SuppressWarnings("unchecked")

publicPagefindPage(finalPagepage,finalCriterion...criterions){

Assert.notNull(page,"page不能为空");

Criteriac=createCriteria(criterions);

if(page.isAutoCount()){

inttotalCount=countCriteriaResult(c);

page.setTotalCount(totalCount);

}

setPageParameter(c,page);

Listresult=c.list();

page.setResult(result);

returnpage;

}

/**

*设置分页参数到Query对象,辅助函数.

*/

protectedQuerysetPageParameter(finalQueryq,finalPagepage){

//hibernate的firstResult的序号从0开始

q.setFirstResult(page.getFirst()-1);

q.setMaxResults(page.getPageSize());

returnq;

}

8

/**

*设置分页参数到Criteria对象,辅助函数.

*/

protectedCriteriasetPageParameter(finalCriteriac,finalPagepage){

//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(inti=0;i

if(Page.ASC.equals(orderArray[i])){

c.addOrder(Order.asc(orderByArray[i]));

}else{

c.addOrder(Order.desc(orderByArray[i]));

}

}

}

returnc;

}

/**

*执行count查询获得本次Hql查询所能获得的对象总数.

9

*

*本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询.

*/

protectedlongcountHqlResult(finalStringhql,finalObject...values){

Longcount=0L;

StringfromHql=hql;

//select子句与orderby子句会影响count查询,进行简单的排除.

fromHql="from"+StringUtils.substringAfter(fromHql,"from");

fromHql=StringUtils.substringBefore(fromHql,"orderby");

StringcountHql="selectcount(*)"+fromHql;

try{

count=findUnique(countHql,values);

}catch(Exceptione){

thrownewRuntimeException("hqlcan'tbeautocount,hql

is:

"+countHql,e);

}

returncount;

}

/**

*执行count查询获得本次Hql查询所能获得的对象总数.

*

*本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询.

*/

protectedlongcountHqlResult(finalStringhql,finalMapvalues){

Longcount=0L;

10

StringfromHql=hql;

//select子句与orderby子句会影响count查询,进行简单的排除.

fromHql="from"+StringUtils.substringAfter(fromHql,"from");

fromHql=StringUtils.substringBefore(fromHql,"orderby");

StringcountHql="selectcount(*)"+fromHql;

try{

count=findUnique(countHql,values);

}catch(Exceptione){

thrownewRuntimeException("hqlcan'tbeautocount,hql

is:

"+countHql,e);

}

returncount;

}

/**

count查询获得本次Criteria查询所能获得的对象总数.*执行

*/

@SuppressWarnings("unchecked")

protectedintcountCriteriaResult(finalCriteriac){

CriteriaImplimpl=(CriteriaImpl)c;

//先把Projection、ResultTransformer、OrderBy取出来,清空三者后再执行Count操作

Projectionprojection=impl.getProjection();

ResultTransformertransformer=impl.getResultTransformer();

ListorderEntries=null;

try{

orderEntries=(List)ReflectionUtils.getFieldValue(impl,"orderEntries");

ReflectionUtils.setFieldValue(impl,"orderEntries",newArrayList());

11

}catch(Exceptione){

logger.error("不可能抛出的异常:

{}",e.getMessage());

}

//执行Count查询

inttotalCount=(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(Exceptione){

logger.error("不可能抛出的异常:

{}",e.getMessage());

}

returntotalCount;

}

//属性过滤条件查询函数//

/**

*按属性查找对象列表,支持多种匹配方式.

*

*@parammatchType匹配方式,目前支持的取值见PropertyFilter的MatcheTypeenum.

*/

publicListfindBy(finalStringpropertyName,finalObject

12

value,finalMatchTypematchType){

Criterioncriterion=

buildPropertyFilterCriterion(propertyName,value,value.getClass(),

matchType);

returnfind(criterion);

}

/**

*按属性过滤条件列表查找对象列表.

*/

publicListfind(Listfilters){

Criterion[]criterions=

buildPropertyFilterCriterions(filters);

returnfind(criterions);

}

/**

*按属性过滤条件列表分页查找对象.

*/

publicPagefindPage(finalPagepage,finalListfilters){

Criterion[]criterions=

buildPropertyFilterCriterions(filters);

returnfindPage(page,criterions);

}

/**

*按属性条件列表创建Criterion数组,辅助函数.

*/

protectedCriterion[]buildPropertyFilterCriterions(finalListfilters){

ListcriterionList=newArrayList();

for(PropertyFilterfilter:

filters){

13

if(!

filter.isMultiProperty()){//只有一个属性需要比较的情况.

Criterioncriterion=

buildPropertyFilterCriterion(filter.getPropertyName(),filter.getPropertyValue(),

filter.getPropertyType(),

filter.getMatchType());

criterionList.add(criterion);

}else{//包含多个属性需要比较的情况,进行or处理.

Disjunctiondisjunction=Restrictions.disjunction();

for(Stringparam:

filter.getPropertyNames()){

Criterioncriterion=

buildPropertyFilterCriterion(param,filter.getPropertyValue(),

filter.getPropertyType(),filter.getMatchType());

disjunction.add(criterion);

}

criterionList.add(disjunction);

}

}

ReturncriterionList.toArray(newCriterion[criterionList.size()]);

}

/**

*按属性条件参数创建Criterion,辅助函数.

*/

protectedCriterionbuildPropertyFilterCriterion(finalStringpropertyName,finalObjectpropertyValue,

finalClass

>propertyType,finalMatchTypematchType){

Assert.hasText(propertyName,"propertyName不能为空");

Criterioncriterion=null;

try{

14

//按entityproperty中的类型将字符串转

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1