`
xxp3369
  • 浏览: 151272 次
  • 性别: 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);
		
	}

}
分享到:
评论

相关推荐

    TC8协议一致性测试文档

    OA_Automotive_Ethernet_ECU_TestSpecification_Layer_1_v3.0 OA_Automotive_Ethernet_ECU_TestSpecification_Layer_2_v3.0 OA_Automotive_Ethernet_ECU_TestSpecification_Layer_3-7_v3.0

    jbpm-oa用jbpm做的OA

    文件列表中的`oa_12.rar`到`oa_05.rar`可能包含了该jbpm-oa系统的不同版本或更新,每个RAR文件可能包含源代码、数据库脚本、配置文件、文档资料等,供开发者学习、部署或升级系统使用。通过这些文件,开发者可以深入...

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

    【标题】"NC65 02 patch_与OA单点登录补丁_ssx_2019-05-07.zip" 提供的信息显示,这是一个针对NC65版本的02号补丁,主要功能是实现与OA(Office Automation,办公自动化系统)的单点登录集成。"ssx"可能是开发人员或...

    ItcastOA05.rar_OA系统_Java__OA系统_Java_

    【标题】"ItcastOA05.rar_OA系统_Java__OA系统_Java_" 指的是一款基于Java技术开发的OA(Office Automation)系统,其中"05"可能代表项目开发的第五个阶段或者版本号。这个系统是用SSH(Struts2、Spring、Hibernate...

    oa系统代码5

    从提供的压缩包文件"oa_gl_05"来看,这可能是通达OA系统中的财务管理模块的一部分,"gl"通常代表“会计”或“财务”(Guanli,在中文中常用于表示管理),而"05"可能是一个版本编号或者模块分类。在协同办公系统中,...

    OA05OA工作流应用

    【OA工作流应用】是指利用特定的软件工具自动化执行一系列任务的过程,特别是在IT领域中,如WQJDomino /Notes 工作流,它能够有效地管理企业的业务流程。工作流应用程序的核心价值在于提高效率、降低成本,减少错误...

    OA系统(vs05+sql05)

    本项目“OA系统(vs05+sql05)”采用的是2005年版本的开发工具Visual Studio .NET(VS05)和数据库管理系统SQL Server 2005进行构建。 1. **ASP.NET 2.0**: ASP.NET是微软推出的用于构建Web应用程序的框架,2.0版本...

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

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

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

    【OA项目招标文件-2011-05-27.doc】是一个详细的OA系统招标文件,涉及到的主要知识点包括以下几个方面: 1. **投标邀请**: - 熔盛集团通过邀标方式选择OA系统软件供应商。 - 开标时间设定在特定日期的10点,投标...

    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、先下载官方最新修正合集...

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

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

    myeclipse下用ssh作的OA系统

    【文件名】:"OA_SSH_05":这个文件可能包含的是项目开发过程中的第五个阶段或版本,可能包括部分源码、配置文件、数据库脚本等,具体内容需要解压查看。 总结来说,使用MyEclipse 8.5和SSH框架开发OA系统,可以...

    通达OA2010 3.6.110712补丁1

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

    OA办公管理系统(源代码+数据库脚本)

    数据库脚本,如"2010.05.02.sql",通常用于创建和初始化数据库结构。这个SQL文件包含了创建表格、设置字段类型、定义约束等数据库对象的SQL语句。在OA办公管理系统中,数据库存储了用户信息、权限设置、工作流程状态...

    ASP版本的OA系统

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

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

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

    北大青鸟 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个压缩包,需要全部下载才能解压.

Global site tag (gtag.js) - Google Analytics