`
xxp3369
  • 浏览: 148563 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oa_05

阅读更多
从现有的分页处理方案中,抽象出AbstractManager,以便将分页逻辑进行封装处理,
使得分页处理更加简单(不需要拷贝分页逻辑)
- 重点理解抽象的概念(如何抽象?抽象哪些内容?)


package com.bjsxt.oa.manager.impl;

import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.bjsxt.oa.PagerModel;
import com.bjsxt.oa.manager.SystemException;

public abstract class AbstractManager extends HibernateDaoSupport {
	
	public PagerModel searchPaginated(String hql,int offset,int pagesize){
		return searchPaginated(hql, null, offset, pagesize);
	}
	
	public PagerModel searchPaginated(String hql,Object value,int offset,int pagesize){
		return searchPaginated(hql, new Object[]{value}, offset, pagesize);
	}
	
	public PagerModel searchPaginated(String hql,Object[] values,int offset,int pagesize){
		//获得总记录数
		String countHql = getCountQuery(hql);
		Query query = getSession().createQuery(countHql);
		if(values != null && values.length > 0){
			for(int i=0; i<values.length; i++){
				query.setParameter(i, values[i]);
			}
		}
		int total = ((Long)query.uniqueResult()).intValue();
		
		//获得当前页的数据
		query = getSession().createQuery(hql);
		if(values != null && values.length > 0){
			for(int i=0; i<values.length; i++){
				query.setParameter(i, values[i]);
			}
		}
		query.setFirstResult(offset);
		query.setMaxResults(pagesize);
		List datas = query.list();
		
		PagerModel pm = new PagerModel();
		pm.setDatas(datas);
		pm.setTotal(total);
		
		return pm;
	}
	
	/**
	 * 根据HQL语句,获得查询总记录数的HQL语句
	 * 如:
	 * select o from Organization o where o.parent is null
	 * 经过转换,得到
	 * select count(*) from Organization o where o.parent is null
	 * @param hql
	 * @return
	 */
	private String getCountQuery(String hql){
		int index = hql.indexOf("from");
		if(index != -1){
			return "select count(*) " + hql.substring(index);
		}
		throw new SystemException("无效的HQL查询语句【"+hql+"】");
	}
}



package com.bjsxt.oa.manager.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.bjsxt.oa.PagerModel;
import com.bjsxt.oa.manager.OrgManager;
import com.bjsxt.oa.manager.SystemException;
import com.bjsxt.oa.model.Organization;

public class OrgManagerImpl extends AbstractManager implements OrgManager {
	
	public void addOrg(Organization org, int parentId) {
		if(parentId != 0){
			org.setParent(findOrg(parentId));
		}
		getHibernateTemplate().save(org);
		
		//自动生成机构编号
		org.setSn(
			(org.getParent() == null ? "" : org.getParent().getSn() + "_")
			+ org.getId()
		);
		
		getHibernateTemplate().update(org);
	}

	public void delOrg(int orgId) {
		Organization org = findOrg(orgId);
		
		//判断子机构列表是否为空
		if(org.getChildren().size() > 0){
			//throw new RuntimeException("存在子机构信息,不允许删除");
//			SystemException se = new SystemException("");
//			se.setKey();
//			se.setValues(..);
			throw new SystemException("errors.org.hassuborg",new Object[]{org.getName(),org.getChildren().size()},"存在子机构信息,不允许删除");
		}
		
		//判断人员是否非空
		String hql = "select count(*) from Person p where p.org.id = ?";
		Long personSize = (Long)getSession().createQuery(hql).setParameter(0, orgId).uniqueResult();
		if(personSize > 0){
			throw new RuntimeException("机构下面有人员信息,不允许删除");
		}
		
		getHibernateTemplate().delete(org);
	}

	public Organization findOrg(int orgId) {
		return (Organization)getHibernateTemplate().load(Organization.class, orgId);
	}

	public PagerModel searchOrgs(int parentId,int offset,int pagesize) {
		
		String hql = "select o from Organization o where o.parent is null";
		if(parentId != 0){
			hql = "select o from Organization o where o.parent.id = "+parentId;
		}

		return searchPaginated(hql,offset, pagesize);
	}

	public void updateOrg(Organization org, int parentId) {
		if(parentId != 0){
			org.setParent(findOrg(parentId));
		}
		getHibernateTemplate().update(org);
		
	}

}
分享到:
评论

相关推荐

    NC65 02 patch_与OA单点登录补丁_ssx_2019-05-07.zip

    NC65 02 patch_与OA单点登录补丁

    OA05OA工作流应用

    工作流应用程序可让用户自动执行一系列任务。这些任务通常涉及自动发送邮件信息或 者自动路由文档(诸如跟踪订单和评阅项目计划)。任何一个项目都需要由一个人或一批人 完成一系列任务,工作流应用程序能指导项目自动...

    ItcastOA05.rar_OA系统_Java__OA系统_Java_

    OA项目,可以帮助开发者更好的开发 是SSH框架写的

    Java就业班OA项目实战培训视频【12讲】

    资源名称:Java就业班OA项目实战培训视频【12讲】资源目录:【】Java就业班OA项目实战01【】Java就业班OA项目实战02【】Java就业班OA项目实战03【】Java就业班OA项目实战04【】Java就业班OA项目实战05【】Java就业班...

    php 开源OA办公系统源码下载

    更新日期:2011-05-20 大小:3.9MB 版本:T2011(20110520) 操作系统:WinXP/Vista/Win7/Win2003/Win2008/Linux 工作流平台 支持表单设计支持列表、输入框、日历、成员、部门等控件支持自由流程与固定流程 公文...

    通达oa2011-05-20破解im

    通达oa2011-05-20破解im,好用,破解了,无限制的

    通达OA2010 3.6.110801破解补丁-纯净版(请紧急替换早期版本)

    通达OA2010 3.6.110801破解补丁同步官方纯净版(请紧急替换早期版本) 凡 stinna 所发布的早期版本,请即时使用此版本替换。 声明:本补丁需要停止组件,再进行破解。 版本升级: 1、先下载官方最新修正合集...

    OA项目招标文件-2011-05-27.doc

    oa系统招标文件,文档写的很详细,包括投标邀请、投标方须知、系统范围和需求、附件四部分,分享给大家,欢迎下载关注

    通达OA2010 3.6.110712补丁1

    1、 内部版本号:最新版本号 3.6.110712 补丁(永久解决通达OA2010 不限用户数,可无限添加人数) 2、 即时通讯服务版本:最新版本号 2011-06-10 补丁 (永久解决即时通讯服务器程序IM突破30人,不限用户数,即时...

    ASP版本的OA系统

    (版本:1.0 2006.04.05) 1.同时支持多种数据库。 2.程序模块化编写,各功能模块基本都已进行封装,调用方便。 3.采用仿C/S操作界面,操作简单,易于上手,界面仿江南行客的NET-OA系统,功能不相同。 4.重要...

    05-颠覆传统OA市场掌控移动互联网新机遇.pptx

    05-颠覆传统OA市场掌控移动互联网新机遇.pptx

    OA系统(vs05+sql05)

    asp.net 2.0 + sqlserver 2005

    北大青鸟 Accp 5.0 电子课件 Y2 HR CRM OA B2C毕业设计项目开发(HR CRM OA B2C Project).part05.rar

    北大青鸟 Accp 5.0 电子课件 Y2 HR CRM OA B2C毕业设计项目开发(HR CRM OA B2C Project) 共计15个压缩包,需要全部下载才能解压.

    [20110624更新补丁]通达OA2010最新破解补丁-自动升级纯净版

    此补丁已集成stinna所发布的所有通达OA2010破解...屏蔽,方法,版本号,OA补丁,3.6,Zlchat补丁,补丁(OA补丁+zcj+报表+IM+精灵+Zlchat补丁),IM,破解组件,110428补丁自动升级程序,精灵2011-05-20,全部组件破解补丁

    通达OA2010 3.6.110712 补丁自动升级-纯净版

    通达OA2010完美平台版最新OA补丁集成“OA破解补丁、通达即时通讯服务器版本IM、OA精灵 去官方链接及去除通达官方相关信息版(通达OA精灵去官方信息美化安装版)、通达报表组件、Zlchat视频会议系统2.4授权1000人补丁...

    通达OA2011 破解补丁 亲试无问题 100用户

    2011-12-05 12:06:25] 成功检测到加密锁 [2011-12-05 12:06:25] 办公精灵 [2011-12-05 12:43:25] 重新加载用户列表(部门数:20 用户数:49 授权数: 100) 2012-01-14 18:02:32] 服务停止 [2012-01-14 18:02:39]...

    Ecology泛微的学习文件,有PPT,有二次开发的学习文档

    05 / 怎么写API接口并发布API接口 06 / 怎么写WebService并发布接口 07 / 怎么在后端拦截接口并修改 ecology-泛微OA 建模引擎文档 建模引擎文档 流程引擎文档 流程引擎文档 系统的接口文档 系统的接口文档 资源很...

    java+mysql学生学籍后台管理系统OA源码

    05、禁止用本站源码用于非法商业用途,不得违反国家法律,否则后果自负! 06、如发现资源链接无法下载、失效或广告,请联系管理员或提交工单处理! 07、所有资源均可通过日常签到等任务进行免费兑换,记得每天到本站...

    apache-tomcat-5.5.17-src

    │ ch05(DefaultServlet).rar DefaultServlet(实例演示) │ ch07.rar Log4J使用演示(实例演示) │ ch08.rar 用Ant管理Web应用(实例演示) │ ch09.rar 类加载器(实例演示) │ ch12.rar FORM验证登录文件...

Global site tag (gtag.js) - Google Analytics