




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大学生就业管理详细设计说明书1引言1.1 编写目的本详细设计说明书跟据博客信息管理系统详细设计说明书编写,描述了系统的详细设计,并为系统代码的编写提供依据。本文档的预期读者为:项目经理、系统分析员、测试经理、项目组长、系统开发人员。1.2 系统命名与版本«大学生就业管理系统java命名规范大学生就业管理系统V1.01.3 定义1.4 参考资料博客信息管理系统概要设计说明书。2系统程序的结构3设计说明3.1 数据库基本操作3.1.1 类DB.java的设计方法名称:ExportDB(DataSourceds)语义由DataSource数据源ds获取Connection连接对象conn方
2、法名称:ResultSetopenSql(Stringsql)语义由Connection连接又寸象conn获取Statement对象stmt;由Statement对象stmt执行sql查询返回ResultSet查询结果方法名称:ResultSetexecSql(Stringsql)语义由Connection连接又寸象conn获取Statement对象stmt;由Statement对象stmt执行sql数据更新操作(包括新增、修改)返回ResultSet数据更新操作结果3.2 技能维护3.2.1类HibernateDao.java的设计/*Copyright(c)2005-*Licensedun
3、dertheApacheLicense,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;mons.lang.StringUtils;importorg.hibernate.Criteria;importorg.hib
4、ernate.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;i
5、mportorg.hibernate.criterion.Projections;importorg.hibernate.criterion.Restrictions;importorg.hibernate.impl.Criterialmpl;importorg.hibernate.transform.ResultTransformer;importorg.springframework.util.Assert;importorg.springside.modules.orm.PropertyFilter;importorg.springside.modules.orm.PropertyFil
6、ter.MatchType;importorg.springside.modules.utils.ReflectionUtils;mon.page.Page;/mon.page.PropertyFilter;/mon.page.PropertyFilter.MatchType;/* 封装SpringSide扩展功能的HibernatDAO泛型基类.* 扩展功能包括分页查询,按属性过滤条彳列表查询.* 可在Service层直接使用,也可以扩展泛型DAO子类使用,见两个构造函数的注释* <T>DAOB作的对象类型* <PK>主键类型*calvin*/extendspubli
7、cclassHibernateDao<T,PKextendsSerializableSimpleHibernateDao<T,PK>/* 用于Dao层子类使用的构造函数.* 通过子类的泛型定义取得对象类型Class.* eg.*publicclassUserDaoextendsHibernateDao<User,Long>* */publicHibernateDao()super();/* 用于省略Dao层,Service层直接使用通用HibernateDao的构造函数.* 在构造函数中定义对象类型Class.* eg.*HibernateDao<User,
8、Long>userDao=newHibernateDao<User,Long>(sessionFactory,User.class);* /publicHibernateDao(finalSessionFactorysessionFactory,finalClass<T>entityClass)super(sessionFactory,entityClass);/分页查询函数/* 分页获取全部对象.final Page<T> page) * /publicPage<T>getAll(returnfindPage(page);* 按HQL分页
9、查询.* page分页参数.不支持其中的orderBy参数.* hqlhql语句.* values数量可变的查询参数,按顺序绑定.* 分页查询结果,附带结果列表及所有查询时的参数.* /SuppressWarnings("unchecked")publicPage<T>findPage(finalPage<T>page,finalStringhql,finalObject.values)Assert.notNull(page,"page不能为空”);Queryq=createQuery(hql,values);if(page.isAutoC
10、ount()longtotalCount=countHqlResult(hql,values);page.setTotalCount(totalCount);setPageParameter(q,page);Listresult=q.list();page.setResult(result);returnpage;/* 按HQL分页查询.* page分页参数.* hqlhql语句.* values命名参数,按名称绑定.* 分页查询结果,附带结果列表及所有查询时的参数.* /SuppressWarnings("unchecked")publicPage<T>fin
11、dPage(finalPage<T>page,finalStringhql,finalMap<String,Objectvalues)Assert.notNull(page,"page不能为空”工Queryq=createQuery(hql,values);if(page.isAutoCount()longtotalCount=countHqlResult(hql,values);page.setTotalCount(totalCount);setPageParameter(q,page);Listresult=q.list();returnpage.setResu
12、lt(result);page;/* 按Criteria分页查询.*page分页参数.*criterions数量可变的Criterion.* 分页查询结果.附带结果列表及所有查询时的参数.* /SuppressWarnings("unchecked")publicPage<T>findPage(finalPage<T>page,finalcriterions)Assert.notNull(page,"page不能为空”工Criteriac=createCriteria(criterions);if(page.isAutoCount()int
13、totalCount=countCriteriaResult(c);page.setTotalCount(totalCount);setPageParameter(c,page);Listresult=c.list();page.setResult(result);page;return/* 设置分页参数到Query对象,辅助函数.* /protectedQuerysetPageParameter(finalQueryq,final/hibernate的firstResult的序号从0开始q.setFirstResult(page.getFirst()-1);q.setMaxResults(p
14、age.getPageSize();q;return/* 设置分页参数到Criteria对象,辅助函数.* /protectedCriteriasetPageParameter(finalCriteriac,page)/hibernate的firstResult的序号从0开始c.setFirstResult(page.getFirst()-1);c.setMaxResults(page.getPageSize();if(page.isOrderBySetted()StringorderByArrayCriterion.Page<T> page)final Page<T>
15、StringUtils.split(page.getOrderBy(),',');split (page.getOrder(),String口orderArray=StringUtils.);Assert.分页多重排序参数中isTrue (orderByArray.length = orderArray.length排序字段与排序方向的个数不相等");for ( intif (Page.i = 0; i < orderByArray.ASC.equals(orderArrayi) c.addOrder(Order. else c.addOrder(Order.l
16、ength ; i+) asc (orderByArrayi);desc (orderByArrayi); return c; /*执行count查询获得本次Hql查询所能获得的对象总数*本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询.*/protectedlong values) countHqlResult(final Stringhql, finalObject.Longcount=0L;StringfromHql=hql;/select子句与order by fromHql = '子句会影响count查询,进行简单的排除."from+
17、 StringUtils.substringAfter(fromHql,"from");fromHql = StringUtils.String countHql =substringBefore "select count(*)"(fromHql,+ fromHql;"order by" );try thrownew countHql, e);count = findUnique(countHql, values);catch (Exception e) RuntimeException( "hql can'tbe
18、auto count,hql is:" +returncount;/*执行count查询获得本次Hql查询所能获得的对象总数*本函数只能自动处理简单的hql语句,复杂的hql查询请另行编写count语句查询.*/protectedlongcountHqlResult(finalStringhql,finalMap<String,Object>values)Longcount=0L;StringfromHql=hql;/select子句与 order by fromHql =子句会影响count 查询 , 进行简单的排除."from+ StringUtils.su
19、bstringAfter(fromHql,"from");fromHql = StringUtils.String countHql =substringBefore"select count(*) "(fromHql,+ fromHql;"order by" );try thrownew countHql, e);count = findUnique(countHql, values);catch (Exception e) RuntimeException( "hql can'tbeauto count,hql
20、is:" +returncount;/*执行count查询获得本次Criteria查询所能获得的对象总数*/final Criteria c) 、 OrderBy 取出来 , 清空三者后再执行SuppressWarnings("unchecked")protectedintcountCriteriaResult(CriteriaImplimpl=(CriteriaImpl)c;/先把Projection、ResultTransformerCount操作Projectionprojection=impl.getProjection();ResultTransform
21、ertransformer=impl.getResultTransformer();List<CriteriaImpl.OrderEntry>orderEntries=null;(impl, newtryorderEntries=(List)ReflectionUtils.getFieldValue"orderEntries");ReflectionUtils.setFieldValue(impl,"orderEntries"ArrayList();catch(Exceptione)logger.error("不可能抛出的异常:&q
22、uot;,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.setResultTransfor
23、mer(transformer);try orderEntries);loggerreturn ReflectionUtils.setFieldValue(impl,"orderEntries" catch (Exception e) .error( "不可能抛出的异常:", e.getMessage();totalCount;/属性过滤条件查询函数/*按属性查找对象列表,支持多种匹配方式.*matchType匹配方式,目前支持的取值见 PropertyFilter*/的 MatcheTypeenum.public finalList<T>
24、findBy( final StringMatchType matchType) CriterionpropertyName,criterionfinal Object value,buildPropertyFilterCriterion(propertyName, value, value.getClass(), matchType);return find(criterion);/*按属性过滤条件列表查找对象列表*/public List<T> find(List<PropertyFilter> filters) CriterionbuildPropertyFilt
25、erCriterions(filters);return find(criterions);criterions/*按属性过滤条件列表分页查找对象*/publicPage<T>findPage(finalPage<T>page,finalList<PropertyFilter> filters) CriterionbuildPropertyFilterCriterions(filters); return findPage(page, criterions);criterions/*按属性条件列表创建Criterion*/数组,辅助函数.protectedC
26、riterionbuildPropertyFilterCriterions(finalList<PropertyFilter> filters) List<Criterion> criterionList = for (PropertyFilter filter : filters) if (!filter.isMultiProperty() Criterionnew ArrayList<Criterion>();/ 只有一个属性需要比较的情况criterionbuildPropertyFilterCriterion(filter.getPropertyNa
27、me(),filter.getPropertyValue(),filter.getPropertyType(),filter.getMatchType();criterionList.add(criterion);else/包含多个属性需要比较的情况,进行or处理.Disjunctiondisjunction=Restrictions.disjunction();for(Stringparam:filter.getPropertyNames()CriterioncriterionbuildPropertyFilterCriterion(param,filter.getPropertyValue
28、(),Returnfilter.getPropertyType(),filter.getMatchType();disjunction.add(criterion);criterionList.add(disjunction);criterionList.toArray(newCriterioncriterionList.size();/*按属性条件参数创建Criterion,辅助函数.*/protectedCriterionbuildPropertyFilterCriterion(finalStringpropertyName,finalObjectpropertyValue,finalCl
29、ass<?>propertyType,finalMatchTypematchType)Assert.hasText(propertyName,"propertyName不能为空");Criterioncriterion=null;try/按entityproperty中的类型将字符串转化为实际类型.ObjectrealValueReflectionUtils.convertValue(propertyValue,propertyType);/根据MatchType构造criterionif(MatchType.EQ.equals(matchType)criter
30、ion=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 = Restricti
31、ons.lt (propertyName, realValue);if (MatchType.GE.equals(matchType) criterion = Restrictions.ge (propertyName, realValue);if (MatchType.GT.equals(matchType) criterion = Restrictions.gt (propertyName, realValue);throwreturn catch(Exception e) ReflectionUtils.criterion;convertToUncheckedException(e);/
32、*判断对象的属性值在数据库内是否唯一*在修改对象的情景下,如果属性新修改的值(value)等于属性原来的值(orgValue)则不作比较.*/publicboolean Object newValue, if (newValue = returntrue ;isPropertyUnique(finalString propertyName,final Object oldValue) null | newValue.equals(oldValue)finalnull );Objectobject=findUniqueBy(propertyName,newValue);return(object
33、=.java 的3.2.2类SimpleHibernateDao设计类SkillAction用来根据用户的不同操作,调用不同的方法对数据库进行操作。方法方法名称:doList()语法packageimportcom.zds.spring.dao.base;java.io.Serializable;函数原型importjava.util.ArrayList;importjava.util.LinkedHashSet;importjava.util.List;importjava.util.Map;importjava.util.Set;importorg.hibernate.Criteria;i
34、mportorg.hibernate.Hibernate;importorg.hibernate.Query;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.criterion.CriteriaSpecification;importorg.hibernate.criterion.Criterion;importorg.hibernate.criterion.Restrictions;importorg.hibernate.metadata.ClassMetadata;impo
35、rtorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.util.Assert;Importorg.springframework.beans.factory.annotation.Autowired;importorg.springside.modules.utils.ReflectionUtils;/* 封装Hibernate原生API的DAO乏型基类.* 可在Service层直接使用,也可以扩展泛型DAO子类使用.* 参考Spring2.5自带的Petlinc例子,取消了HibernateTem
36、plate,直接使用Hibernate原生API.* <T>DAOt作的对象类型* <PK>主键州*calvin* /SuppressWarnings("unchecked")publicclassSimpleHibernateDao<T,PKextendsSerializableprotectedLoggerlogger=LoggerFactory.getLogger(getClass();protectedSessionFactorysessionFactory;protectedClass<T>entityClass;/* 用
37、于Dao层子类使用白构造函数.* 通过子类的泛型定义取得对象类型Class.* /publicSimpleHibernateDao()this.entityClass=ReflectionUtils.getSuperClassGenricType(getClass();/* 用于用于省略Dao层,在Service层直接使用通用SimpleHibernateDao的构造函数.* 在构造函数中te义对象类型Class.*/publicSimpleHibernateDao(sessionFactory,this.sessionFactorythis.entityClassfinalfinalClas
38、s<T>entityClass)=sessionFactory;=entityClass;publicSessionFactorygetSessionFactory()returnsessionFactory/*采用Autowired按类型注入SessionFactory,SesionFactory*/AutowiredpublicvoidsessionFactory)的时候Override本函数.setSessionFactory(this.sessionFactory=sessionFactory;/*取得当前Session.*/publicSessiongetSession(
39、)returnsessionFactory/*保存新增或修改的对象*/final.getCurrentSession();publicvoidsaveOrUpdate(Assert.notNullfinal(entity,Tentity)"entitygetSession().saveOrUpdate(entity);logger.debug("saveentity:"publicvoidsave(finalTentity)Assert.notNull(entity,'getSession().save(entity);logger.debug("
40、;saveentity:"publicvoidupdate(finalTentity)Assert.notNull(entity,'getSession().update(entity);logger.debug("updateentity:",entity);"entity,entity);"entity/*删除对象.SessionFactory当有多个SessionFactory不能为空”);不能为空”);不能为空”);,entity);*entity对象必'须是session中的对象或含id属性的transient*/pu
41、blicvoiddelete(finalTentity)if(entity!=null)getSession().delete(entity);logger.debug("deleteentity:",entity);elselogger.debug("deleteentityisnull");/*按1删除对象.*/publicvoiddelete(finalPKid)Assert.notNull(id,"id不能为空");delete(get(id);logger.debug("deleteentity,idisentit
42、yClass.getSimpleName(),id);/*按id族取又象.*/publicTload(finalPKid)Assert.notNull(id,"id不能为空");return(T)getSession().load(entityClass,id);/*按id族取又象.*/publicTget(finalPKid)Assert.notNull(id,"id不能为空");return(T)getSession().get(entityClass,id);/* 状取全部对象.* /publicList<T>getAll()retur
43、nfind();/* 按属性查找对象列表,匹配方式为相等.* /对象."publicList<T>findBy(finalStringpropertyName,finalObjectvalue)Assert.hasText(propertyName,"propertyName不能为空");Criterioncriterion=Restrictions.eq(propertyName,value);returnfind(criterion);/*按属性查找唯一对象,匹配方式为相等.*/publicTfindUniqueBy(finalStringprop
44、ertyName,finalObjectvalue)Assert.hasText(propertyName,"propertyName不能为空");Criterioncriterion=Restrictions.eq(propertyName,value);return(T)createCriteria(criterion).uniqueResult();/*按1列表状取对象.*/publicList<T>findByIds(List<PK>ids)returnfind(Restrictions.in(getIdName(),ids);/*按HQL查
45、询对象列表.*values数量可交的参数,按顺序绑定.*/public<X>List<X>find(finalStringhql,finalObject.values)returncreateQuery(hql,values).list();/*按HQL查询对象列表.*values命名参数,按名称绑定.*/public<X>List<X>find(finalStringhql,finalMap<String,Object>values)returncreateQuery(hql,values).list();/* 按HQL查询唯一对象
46、.* values数量可交的参数,按顺序绑定.* /public<X>XfindUnique(finalStringhql,finalObject.values)return(X)createQuery(hql,values).uniqueResult();/* 按HQL查询唯一对象.* values命名参数,按名称绑定.* /public<X>XfindUnique(finalStringhql,finalMap<String,Objectvalues)return(X)createQuery(hql,values).uniqueResult();/* 执行HQ
47、L进行批量修改/删除操作.* /publicintbatchExecute(finalStringhql,finalObject.values)returncreateQuery(hql,values).executeUpdate();/* 执行HQL进行批量修改/删除操作.* 更新记录数.* /publicintbatchExecute(finalStringhql,finalMap<String,Object>values)returncreateQuery(hql,values).executeUpdate();/* 根据查询HQL与参数列表创建Query对象.* 本类封装的
48、find()函数全部默认返回对象类型为T,当不为T时使用本函数.* values数量可交的参数,按顺序绑定.* /publicQuerycreateQuery(finalStringqueryString,finalObject.values)Assert.hasText(queryString,"queryString不能为空");Queryquery=getSession().createQuery(queryString);if(values!=null)for(inti=0;i<values.length;i+)query.setParameter(i,val
49、uesi);returnquery;/*根据查询HQL与参数列表创建Query对象.*values命名参数,按名称绑定*/String queryString,"queryStringqueryfinal不能为空publicQuerycreateQuery(finalMap<String,Objectvalues)Assert.hasText(queryString,");QuerygetSession().createQuery(queryString);if(values!=null)query.setProperties(values);returnquery;
50、/*按Criteria查询对象列表.*criterions数量可变的Criterion.*/publicList<T>find(finalCriterion.criterions)returncreateCriteria(criterions).list();/*按Criteria查询唯一对象.*criterions数量可变的Criterion.*/publicTfindUnique(finalCriterion.criterions)return(T)createCriteria(criterions).uniqueResult();/*根据Criterion条件创建Criter
51、ia.*本类封装的find()函数全部默认返回对象类型为T,当不为T时使用本函*criterions*/数量可变的Criterion.publicCriteriacriterions)CriteriacreateCriteria(criteriafinalCriterion.getSession().createCriteria(for(Criterionc:criterions)criteria.add(c);returncriteria;entityClass);/*初始化对象.使用load()方法得到的仅是对象Proxy,在传到View层前需要进行初始化.*只初始化entity的直接属性
52、,但不会初始化延迟加载的关联集合和属性如需初始化关联属性,可实现新的函数,执行:Hibernate.initialize(user.getRoles()初始化User的直接属性和关联集合.*Hibernate.initialize(user.getDescription()的直接属性和延迟加载的Description属性.*/,初始化UserpublicvoidinitEntity(Tentity)Hibernate.initialize(entity);/*#initEntity(Object)*/publicvoidinitEntity(List<T>entityList)fo
53、r(Tentity:entityList)Hibernate.initialize(entity);/*为Query添力口distincttransformer.*/publicQuerydistinct(Queryquery)query.setResultTransformer(CriteriaSpecification.STINCT_ROOT_ENTITY);returnquery;DI/* 为Criteria添力口distincttransformer.* /publicCriteriadistinct(Criteriacriteria)criteria.setResultTransfo
54、rmer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);returncriteria;/*通过Set将不唯一的对象列表唯一化.* 主要用于HQL/Criteria预加载关联集tT形成重段记录,乂小方便使用distinct查询语句时.* /public<X>List<X>distinct(Listlist)Set<X>set=newLinkedHashSet<X>(list);returnnewArrayList<X>(set);/*取得对象的主键名.*/publicStringgetIdName()ClassMetadatameta=getSessionFactory().getClassMetadata(entityClass);returnmeta.getIdentifierPropertyName();)功能描述查询数据库中符合条件的关联关系数据,导向ListSkillInfo.jsp输入参数errors;messAgesmapping;form;request;respon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC TS 62271-313:2025 EXV EN High-voltage switchgear and controlgear - Part 313: Direct current circuit-breakers
- 【正版授权】 IEC 63505:2025 EN Guidelines for measuring the threshold voltage (VT) of SiC MOSFETs
- 【正版授权】 IEC TS 62565-5-3:2025 EN Nanomanufacturing – Product specification – Part 5-3: Nanoenabled energy storage – Blank detail specification: silicon nanosized materials for the n
- 2025年英语专业八级考试试卷及答案
- 2025年艺术设计专业期末考试试卷及答案
- 2025年新媒体艺术专业考试题及答案
- 2025年市场分析与预测能力测试卷及答案
- 2025年成人高考学历考试试题及答案
- 2025年公共卫生应急管理课程考试试题及答案
- 2025年区域经济发展研究专业考试试卷及答案
- 跨境电商合伙投资协议书
- 2024年网格员考试题库及答案1套
- 国开(辽宁)2024年《中国传统文化概观》形考1-4答案
- 状元展厅方案策划
- 土壤农化分析实验智慧树知到期末考试答案章节答案2024年甘肃农业大学
- 鸢飞鱼跃:〈四书〉经典导读智慧树知到期末考试答案章节答案2024年四川大学
- 空压机日常维护保养点检记录表
- MOOC 统计学-南京审计大学 中国大学慕课答案
- 福建省厦门市集美区2023届小升初语文试卷(含解析)
- 毛泽东诗词鉴赏
- 电机与拖动(高职)全套教学课件
评论
0/150
提交评论