当前访客身份:游客 [ 登录  | 注册加入尚学堂]
启用新域名sxt.cn
新闻资讯

struts2.3+spring3.3+hibernate3.6OA项目实战(二)

goldbin 发表于 2年前  | 评论(1 )| 阅读次数(917 )|   1 人收藏此文章,   我要收藏
摘要 struts2.3+spring3.3+hibernate3.6OA项目实战-组织管理

组织管理

用例图

根据需求文档画出用例图

领域模型

根据需求文件和用例图,使用OOP的分析设计方法画出领域模型

POJO类

@Entity
@Table(name="tb_org")
public class Organization {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	private String name;
	@Column(unique=true)
	private String sn;
	private String remark;
	@OneToMany(mappedBy="parent")
	private Set<Organization> orgs;
	@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
	@JoinColumn(name="p_id")
	private Organization parent;
         //setter和getter方法
@Entity
@Table(name="tb_person")
public class Person {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	private String name;
	private String sex;
	private String duty;
	private String phone;
	private String address;
	private String remark;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="o_id")
	private Organization org;
         //setter和getter方法

用例实现的时序图

 

看图写代码

考虑到OA项目中模块比较多,我们可以建立一个公共接口,里面定义一些每个模块都可能用的到方法。这样可以简化业务接口。提供代码重用性。

公共接口如下:

package com.bjsxt.oa.manager;

import java.util.List;

public interface CommonManager {

	public <T> T findEntity(Class<T> entityClass,int id);
	
	public void saveEntity(Object entity);

	public void deleteEntity(Object entity);
	
	public <T> List<T> findAll(Class<T> entityClass);
	
	
}

并且提供一个业务类的超类:
package com.bjsxt.oa.manager.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.bjsxt.oa.manager.CommonManager;

public class SupportManagerImpl extends  HibernateDaoSupport implements CommonManager {

	@Autowired
	public void setSf(SessionFactory sf){
		setSessionFactory(sf);
	}
	
	public <T> T findEntity(Class<T> entityClass, int id) {
		return getHibernateTemplate().get(entityClass, id);
	}

	public void saveEntity(Object entity) {
		getHibernateTemplate().save(entity);
	}

	public void deleteEntity(Object entity) {
		getHibernateTemplate().delete(entity);
	}

	public <T> List<T> findAll(Class<T> entityClass) {
		return getHibernateTemplate().find("from "+entityClass.getName());
	}

}

接下来才是机构模块的业务接口:OrgManager
package com.bjsxt.oa.manager;

import java.util.List;

import com.bjsxt.oa.po.Organization;

public interface OrgManager extends CommonManager{

	/**
	 * 查询机构列表
	 * @param pid 0 或者 非 0 ,0表示查询顶级机构列表
	 * @return
	 */
	List<Organization> findOrgByParent(int pid);
	
	/**
	 * 删除机构,如果机构下有子机构,或者有人员则不能删除,返回false。
	 * @param id
	 * @return
	 */
	boolean deleteOrg(int id);
	
	/**
	 * 保存机构
	 * @param org 新机构的名字,和描述
	 * @param pid 父机构的ID,0 添加一个顶级机构,非0 ,在pid下添加一个子机构
	 */
	void saveOrg(Organization org,int pid);
}

并且提供实现:
package com.bjsxt.oa.manager.impl;

import java.util.List;

import org.springframework.stereotype.Service;

import com.bjsxt.oa.manager.OrgManager;
import com.bjsxt.oa.po.Organization;

@Service
public class OrgManagerImpl extends SupportManagerImpl implements OrgManager{

	public List<Organization> findOrgByParent(int pid) {
		if(pid==0){//查询顶级机构
			return getHibernateTemplate().find("from Organization where parent is null");
		}
		return getHibernateTemplate().find("from Organization where parent.id=?",pid);//查询某个机构下子机构列表
	}

	//根据当前的部门ID,查询当前部门下是否有子机构
	public boolean deleteOrg(int id) {
		String hql="select count(*) from Organization where parent.id=?";//查询当前机构下的子机构总数
		long l =(long) getSession().createQuery(hql).setInteger(0, id).uniqueResult();
		if(l>0){
			return false;
		}
		long c =(long) getSession().createQuery("select count(*) from Person where org.id=?").setInteger(0, id).uniqueResult();
		if(c>0)
			return false;
		getHibernateTemplate().bulkUpdate("delete from Organization where id=?",id);//hibernateTemplate里面执行修改、删除HQL语句的方法
		return true;
	}

	public void saveOrg(Organization org, int pid) {
		Organization parent =null;
		if(pid!=0){//非0 表示 :新增一个子机构,0表示 : 新增等级机构
			//首先去查父机构对象
			parent =getHibernateTemplate().get(Organization.class, pid);
			org.setParent(parent);
		}
		getHibernateTemplate().save(org);//先调用save方法,主键ID就会自动生成,才能获取ID。
		org.setSn( parent==null? org.getId()+"":parent.getSn()+"_"+org.getId() );
	}

	
}

分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183