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

oa_06

阅读更多
利用ThreadLocal实现分页参数的透明传输(通过使用ThreadLocal能够避免在Manager的接口设计中添加分页参数)
- 重点理解ThreadLocal的基本原理以及实现方法


package com.bjsxt.oa;

public class SystemContext {
	private static ThreadLocal offset = new ThreadLocal();
	private static ThreadLocal pagesize = new ThreadLocal();
	
	public static void setOffset(int _offset){
		offset.set(_offset);
	}
	
	public static int getOffset(){
		Integer _offset = (Integer)offset.get();
		if(_offset == null){
			return 0;
		}
		return _offset;
	}
	
	public static void removeOffset(){
		offset.remove();
	}
	
	public static void setPagesize(int _pagesize){
		pagesize.set(_pagesize);
	}
	
	public static int getPagesize(){
		Integer _pagesize = (Integer)pagesize.get();
		if(_pagesize == null){
			return Integer.MAX_VALUE;
		}
		return _pagesize;
	}
	
	public static void removePagesize(){
		pagesize.remove();
	}
}



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.SystemContext;
import com.bjsxt.oa.manager.SystemException;

public abstract class AbstractManager extends HibernateDaoSupport {
	
	public PagerModel searchPaginated(String hql){
		return searchPaginated(hql, null);
	}
	
	public PagerModel searchPaginated(String hql,Object value){
		return searchPaginated(hql, new Object[]{value});
	}
	
	public PagerModel searchPaginated(String hql,Object[] values){
		return searchPaginated(hql, values, SystemContext.getOffset(), SystemContext.getPagesize());
	}
	
	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) {
		
		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);
	}

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

}
分享到:
评论

相关推荐

    oa_06.rar_oa_06 readme.txt

    【标签】"oa_06_readme.txt"表明了readme文件的内容可能涵盖了该项目的详细说明,包括安装步骤、配置信息、运行指南等。 综上所述,"oa_06.rar"压缩包内包含的OA系统是一个适合初学者的Java编程实践项目,涵盖了...

    oa.rar_java oa_oa java_oa.rizhaosteel.com

    www.pudn.com.txt可能是一个文档,包含了该OA系统在Pudn.com网站上的发布信息或者下载链接,而06_办公自动化管理系统可能是该系统的源代码包或者相关文档,供开发者参考和学习。 总的来说,这个“oa.rar”压缩包...

    oa组织机构(树状结构)

    文件名"oa_06"可能是指该压缩包中的第六个与OA系统相关的文件,可能是源代码、配置文件、数据库脚本或者是测试数据等。为了更好地利用这个资源,我们需要解压并根据文件类型进一步研究。如果是源代码,可以阅读并...

    javaOA

    在"oa_06"这个子文件中,可能包含了JavaOA系统的一个特定模块或者更新版本,具体内容需要实际查看文件才能进一步分析。总的来说,JavaOA的开发涉及了软件工程的多个层面,包括后端开发、前端设计、数据库管理、系统...

    oasystem_2016-12-06.sql

    oasystem_2016-12-06.sql

    oa系统代码6

    在【压缩包子文件的文件名称列表】中,"oa_gl_06"可能代表的是通达OA系统中的“办公管理”或“财务管理”的某个子模块,可能是系统的第六个版本或者第六部分的代码。通常,这样的命名方式可能表明这个文件包含了与...

    通达oa2013 2012.11.06集团版授权

    通达oa2013 2012.11.06集团版授权

    2013-06-10 MVCOA工作流

    通过深入研究2013-06-10 MVCOA工作流的相关文档,我们可以更全面地理解这一系统如何实施和优化办公自动化,从而为企业的运营效率提升提供有价值的参考。这个压缩包文件可能包含设计文档、源代码示例、用户手册等内容...

    PHP信呼协同办公OA系统 v2.5.0

    信呼协同办公OA系统是开源的一款办公系统,跨平台的系统,支持APP,pc网页版,pc客户端等。 信呼协同办公OA系统...日期:2022-06-02 1、完善系统安全性。 2、系统优化等。 3、添加水印功能。 4、增加进销存模块。

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

    资源目录:【】Java就业班OA项目实战01【】Java就业班OA项目实战02【】Java就业班OA项目实战03【】Java就业班OA项目实战04【】Java就业班OA项目实战05【】Java就业班OA项目实战06【】Java就业班OA项目实战07【】Java...

    2011-06-17日破解版-通达OA2010破解版-同步官方自动升级程序

    通达OA2010 3.6 110610 补丁自动升级-纯净版(含全套热门组件破解版本)——通达OA2010完美平台版最新OA补丁集成“OA破解补丁、通达即时通讯服务器版本IM、OA精灵 去官方链接及去除通达官方相关信息版(通达OA精灵去...

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

    3、 通达OA 精灵版本:最新版本号 2011-06-15(去除通达官方信息及链接,已封装,安装即可) 4、 邮件代理服务程序:最新版本号 2011-05-20 补丁 5、 定时任务服务版本:最新版本号 2010-12-03补丁 6、 守护服务...

    【高质量OA系统Axure原型】员工端OA办公系统移动端原型模板V1.2(功能齐全,小贵但值,不坑人).rp

    产品简介:本作品为【OA办公系统员工端高保真原型模板】配套的后台管理端原型模版,企业可通过该系统高效地处理办公行政人事等事务。管理端涵盖了工作台 、日程待办、组织、员工、考勤、薪酬、审批、招聘、绩效、...

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

    3、 通达OA 精灵版本:最新版本号 2011-06-15(去除通达官方信息及链接,已封装,安装即可) 4、 邮件代理服务程序:最新版本号 2011-05-20 补丁 5、 定时任务服务版本:最新版本号 2010-12-03补丁 6、 守护服务...

    OA办公系统源码

    专业OA办公系统源码 开发工具:Visual Studio .NET 2005 + Server2005 项目描述:OA办公系统基于B/S架构设计。 包括文件管理、共享下载、消息管理、公文流传、通知管理、内部论坛、人力资源管理、资产管理 等。 ...

    OA办公系统

    在“06办公自动化管理系统”这个文件中,可能包含了OA系统的源代码或部分模块的实现,初学者可以通过阅读和学习这些代码,了解OA系统如何处理上述功能。代码可能涉及到的技术有: - **Web开发框架**:如Spring Boot...

    通达OA2010 3.6.110712补丁1

    3、 通达OA 精灵版本:最新版本号 2011-06-15(去除通达官方信息及链接,已封装,安装即可 4、 邮件代理服务程序:最新版本号 2011-05-20 补丁 5、 定时任务服务版本:最新版本号 2010-12-03补丁) k) 6、 守护服务...

    小微OA系统领悟版 1.0.zip

    小微OA系统是一个开源的,简单易用,审批灵活,...小微OA系统领悟版 1.0 更新日志:2015-09-06 1.编辑器修改为Tinycme 2.修复邮件接受两个以上附件时错误 3。简化任务流程 取消接受环节。 4。改善微信企业号相关功能。

    通达OA2013ADV破解版7.25.141212

    通达OA2013ADV最新版本,版本号7.25.141212 由于csdn只能上传60M以内的文件,请在这里下载完整版本 http://pan.baidu.com/s/1eQgXy06

    通达OA2013简体中文版MYOA_2013_v6.0.11.06完美平台补丁

    安装通达OA2013简体中文版 更新于 2012-11-06 16:47 本安装程序不能用于版本升级,也不要覆盖安装正在运行中的旧版本OA,否则会造成数据丢失 2.******补丁开始安装步骤:安装时请点击停止通达服务,退出右下角通达...

Global site tag (gtag.js) - Google Analytics