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

xiaoxiao2024-04-12  21

业务逻辑接口设计 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)测试类
转载请注明原文地址: https://www.6miu.com/read-5014940.html

最新回复(0)