`
L.G.Alexander
  • 浏览: 155893 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

5、业务逻辑接口设计与实现

阅读更多
业务逻辑接口设计
1、打开Organization.hbm.xml
 <set access="field" name="children" inverse="true">
      <key column="pid"/>
      <one-to-many class="com.oa.model.Organization"/>
    </set>

里面添加inverse="true",默认不写是false,双向关联,从parent加载children是可以的,从children加载parent也是可以的,这就是双向关联。
在bibernate里面如果从一的一方去加载多的一方就非常占内存,不容易,就像刘翔要记住13亿中国人一样困难,如果从多的一方去加载多的一方

就比较容易,就像13亿人去记住刘翔。这时就需要修改使inverse="true",让多的一方来维护一的一方。在Organization.java里面修改:
/**
 * @hibernate.set inverse="true"//让多的一方来维护一的一方
 * @hiberante.key  column="pid"
 * @hibernate.one-to-many class="com.oa.model.Organization"
 */
private Set<Organization> children;//一个机构的子机构(一个机构有多个子机构,所以是一对多的关系)


2、业务逻辑接口设计与实现
业务接口类
package com.oa.manager;
import java.util.List;
import com.oa.model.Organization;
public interface OrganizationManager {
	/**
	 * 为什么不写成OrganizationID,设计上比较好,有pid,父机构的id就能得到对应的Organization
	 * 为什么传递参数的时候不传递children,因为我们设置了inverse="true",不让它从一的一方加载多的一方,因为那样比较占内存.
	 * @param org
	 * @param parentId
	 */
	void addOrganization(Organization org,int parentId);
	void deleteOrganization(int orgId);
	void modifyOrganization(Organization org,int parentId);
	Organization findOrganization(int orgId);
	/**
	 * 查询机构列表,如果parentId=0,那么就返回顶级机构列表,如果parentId!=0,则返回它的机构列表
	 * @return
	 */
	List<Organization> findOrganizations(int parentId);
}
写OrganizationManager的实现类,让实现类继承HibernateDaoSupport,因为hibernate的HibernateDaoSupport对dao进行了一次封装,我们继承它可以很方便的进行dao的操作。
OrganizationManagerImpl.java
package com.oa.manager.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.oa.manager.OrganizationManager;
import com.oa.model.Organization;
public class OrganizationManagerImpl extends HibernateDaoSupport implements	OrganizationManager {

	public void addOrganization(Organization org, int parentId) {
		if (parentId != 0)
			org.setParent((Organization) getHibernateTemplate().load(Organization.class, parentId));
		getHibernateTemplate().save(org);
	}

	public void deleteOrganization(int orgId) {
		getHibernateTemplate().delete(getHibernateTemplate().load(Organization.class, orgId));
	}

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

	@SuppressWarnings("unchecked")
	public List<Organization> findOrganizations(int parentId) {
		return (List<Organization>) getHibernateTemplate().find("from Organization o where o.parent.id = ?", 

parentId);//HQL语句
	}

	public void modifyOrganization(Organization org, int parentId) {
		if (parentId != 0)
			org.setParent((Organization) getHibernateTemplate().load(Organization.class, parentId));
		getHibernateTemplate().update(org);
	}
} 
3、测试业务逻辑
1)修改applicationContext-common.xml:
   
<!-- configure transaction's propagational feature -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="modify*" propagation="REQUIRED"/>
            <tx:method name="*" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    
    <!-- configure which class's which method take part in transaction -->
    <aop:config>
        <aop:pointcut id="allManagerMethod" expression="execution(* com.oa.manager.*.*(..))"/>
        <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
    </aop:config>
2)配置applicationContext-beans.xml:
  
 <bean id="orgManager" class="com.oa.manager.impl.OrganizationManagerImpl">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
3)测试类


















分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics