大学生就业管理系统详细设计说明书2Word文档格式.docx
- 文档编号:18086249
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:34
- 大小:24.47KB
大学生就业管理系统详细设计说明书2Word文档格式.docx
《大学生就业管理系统详细设计说明书2Word文档格式.docx》由会员分享,可在线阅读,更多相关《大学生就业管理系统详细设计说明书2Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
返回ResultSet查询结果
方法名称:
ResultSetexecSql(Stringsql)
由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;
2
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;
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子类使用,见两个构造函数的注释.
*@param<
T>
DAO操作的对象类型
PK>
主键类型
*@authorcalvin
publicclassHibernateDao<
T,PKextendsSerializable>
extendsSimpl
eHibernateDao<
T,PK>
{
*用于Dao层子类使用的构造函数.
*通过子类的泛型定义取得对象类型Class.
*eg.
*publicclassUserDaoextendsHibernateDao<
User,Long>
{
*}
3
publicHibernateDao(){
super();
}
*用于省略Dao层,Service层直接使用通用HibernateDao的构造函数.
*在构造函数中定义对象类型Class.
*HibernateDao<
userDao=newHibernateDao<
User,
Long>
(sessionFactory,User.class);
publicHibernateDao(finalSessionFactorysessionFactory,final
Class<
entityClass){
super(sessionFactory,entityClass);
//分页查询函数//
*分页获取全部对象.
publicPage<
getAll(finalPage<
page){
returnfindPage(page);
*按HQL分页查询.
*@parampage分页参数.不支持其中的orderBy参数.
*@paramhqlhql语句.
*@paramvalues数量可变的查询参数,按顺序绑定.
*@return分页查询结果,附带结果列表及所有查询时的参数.
@SuppressWarnings("
unchecked"
)
findPage(finalPage<
page,finalStringhql,
finalObject...values){
Assert.notNull(page,"
page不能为空"
Queryq=createQuery(hql,values);
4
if(page.isAutoCount()){
longtotalCount=countHqlResult(hql,values);
page.setTotalCount(totalCount);
setPageParameter(q,page);
Listresult=q.list();
page.setResult(result);
returnpage;
*@parampage分页参数.
*@paramvalues命名参数,按名称绑定.
finalMap<
String,Object>
values){
*按Criteria分页查询.
*@paramcriterions数量可变的Criterion.
5
*@return分页查询结果.附带结果列表及所有查询时的参数.
page,finalCriterion...
criterions){
Criteriac=createCriteria(criterions);
inttotalCount=countCriteriaResult(c);
setPageParameter(c,page);
Listresult=c.list();
*设置分页参数到Query对象,辅助函数.
protectedQuerysetPageParameter(finalQueryq,finalPage<
page){
//hibernate的firstResult的序号从0开始
q.setFirstResult(page.getFirst()-1);
q.setMaxResults(page.getPageSize());
returnq;
*设置分页参数到Criteria对象,辅助函数.
protectedCriteriasetPageParameter(finalCriteriac,final
Page<
c.setFirstResult(page.getFirst()-1);
c.setMaxResults(page.getPageSize());
if(page.isOrderBySetted()){
String[]orderByArray=StringUtils.split(page.getOrderBy
(),'
'
6
String[]orderArray=StringUtils.split(page.getOrder(),'
Assert.isTrue(orderByArray.length==orderArray.length,"
分页多重排序参数中,排序字段与排序方向的个数不相等"
for(inti=0;
i<
orderByArray.length;
i++){
if(Page.ASC.equals(orderArray[i])){
c.addOrder(Order.asc(orderByArray[i]));
}else{
c.addOrder(Order.desc(orderByArray[i]));
returnc;
*执行count查询获得本次Hql查询所能获得的对象总数.
*本函数只能自动处理简单的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,hqlis:
"
+countHql,e);
returncount;
7
protectedlongcountHqlResult(finalStringhql,finalMap<
+StringUtils.substringAfter(fromHql,
*执行count查询获得本次Criteria查询所能获得的对象总数.
protectedintcountCriteriaResult(finalCriteriac){
CriteriaImplimpl=(CriteriaImpl)c;
//先把Projection、ResultTransformer、OrderBy取出来,清空三者后再执行Count操作
Projectionprojection=impl.getProjection();
ResultTransformertransformer=impl.getResultTransformer();
List<
CriteriaImpl.OrderEntry>
orderEntries=null;
orderEntries=(List)ReflectionUtils.getFieldValue(impl,"
orderEntries"
ReflectionUtils.setFieldValue(impl,"
newArrayList());
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);
8
if(transformer!
=null){
c.setResultTransformer(transformer);
orderEntries);
returntotalCount;
//属性过滤条件查询函数//
*按属性查找对象列表,支持多种匹配方式.
*@parammatchType匹配方式,目前支持的取值见PropertyFilter的MatcheTypeenum.
publicList<
findBy(finalStringpropertyName,finalObjectvalue,finalMatchTypematchType){
Criterioncriterion=buildPropertyFilterCriterion(propertyName,value,value.getClass(),matchType);
returnfind(criterion);
*按属性过滤条件列表查找对象列表.
find(List<
PropertyFilter>
filters){
Criterion[]criterions=buildPropertyFilterCriterions(filters);
returnfind(criterions);
*按属性过滤条件列表分页查找对象.
page,finalList<
returnfindPage(page,criterions);
*按属性条件列表创建Criterion数组,辅助函数.
9
protectedCriterion[]buildPropertyFilterCriterions(finalList<
Criterion>
criterionList=newArrayList<
();
for(PropertyFilterfilter:
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;
//按entityproperty中的类型将字符串转化为实际类型.
ObjectrealValue=Re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学生 就业 管理 系统 详细 设计 说明书