业务逻辑接口设计
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)测试类
分享到:
相关推荐
控制层依赖于业务逻辑层,只与接口耦合,但绝不与任何具体的业务逻辑组件耦合;同样,业务逻辑层依赖于DAO层,也不会与任何 具体的DAO组件耦合,而是面向接口编程。采用这种方式的软件实现,即使软件的部分发生改变...
业务逻辑层使用Struts Action类实现各功能模块的业务逻辑,主要包括商品管理Action、购物车Action、订单Action和支付Action等。这些Action类通过Hibernate框架操作数据持久层中的数据表,完成商品信息查询、添加、修改...
从设计模式考虑,提出从业务逻辑层分出数据接口层,负责与数据层沟通,实现业务逻辑层与数据层的真正独立,提高系统的可扩展性、可复用性和可维护性,并通过具体应用实例实现数据访问对象(DAO)设计模式。
深入分析业务逻辑,完成了系统业务流程的设计,主要 包括终端注册及登录流程、终端上报信息流程、终端控制流程等。在 平台设计一方面:完成了平台的功能设计和数据库设计。在平台开发架 构的选择上,电信MZM业务运营...
过M2M网关来实现M2M业务逻辑。具体的说,本文的工作主要集中在以下几个方 面。在需求分析方面:从M2M业务入手,分析了M2M业务流程。提出使用M2M网关 实现M2M业务逻辑的解决方案。深入研究了移动现有数据通信技术,将...
系统分由五个功能模块构成,分别是用户信息管理、拍卖物品...系统 的设计基于MVC模式,分为用户界面、业务逻辑和数据操作三层。系统的开发基 于JSP技术,使用Tomcat作为Web服务器,采用MySQL数据库管理系统存储数 据。
该系统的功能模块分为接口层、业务逻辑层和数据访问层。接口层可以与用户通信并提供外部接口。系统通过界面层收集用户数据,用户进行注册、登录、浏览和评分。业务逻辑层可进行用户信息管理和电影信息管理;业务逻辑...
(3)完成系统各模块业务逻辑的设计与实现,使用Swagger接口工具实现各模块接口的动 态生成与可视化,将RBAC权限管理模型进行拓展,在用户角色与权限菜单间增添动作细化权 限操作。最后使用Swagger 和Seige工具对系统...
DAO模式的作用是将底层数据访问操作与高层业务逻辑 分离,对上层提供面向对象的数据访问接口,从而实现了业务核心和具体数据源的 解耦。 通过实践证明Struts框架层次清晰,页面导航便利的特点,可以实现系统的 快速...
接口设计:详细定义系统内各模块之间交互的API接口,包括请求类型、参数列表、响应格式等,确保模块间高效通信。业务逻辑实现:围绕SpringBoot框架,通过编写具体的业务逻辑代码来实现海鲜商品的展示、搜索、购买、...
后端包括数据模型、数据访问层、业务逻辑层和API接口。前端使用Vue Cli 4.5.15作为开发工具,主要引用了Element-UI、Axios和ECharts等框架和插件。后端使用了SpringBoot2.2.5框架,结合MyBatis Plus和Redis作为数据...
使用 Spring 框架实现模块的基本功能和业务逻辑。 使用 Spring Security 实现权限控制功能。 使用 Spring Boot 构建项目,简化配置和部署过程。 通过以上设计与开发实现,Java 公共资源模块可以作为系统的核心组成...
设计合理的RESTful API接口,实现前后端数据交互和业务逻辑处理。 使用Spring Security等安全框架实现用户身份认证和权限管理,保障用户数据的安全性和隐私保护。 使用Spring Data JPA等持久化框架操作数据库,包括...
业务与实现分离,逻辑与数据分离;以统一的服务接口规范为核心,使用开放标准。从功 能上来说,系统是比较完备的,系统以 Web 界面与用户交互,为用户提供信息并接受其操 作,同时通过数据库管理系统来存储信息数据...
在实现部分,论文详细介绍了各个功能模块的实现细节,包括前后端交互、数据库设计、业务逻辑处理等。此外,还对系统进行了全面的测试,验证了其功能和性能达到预期目标。 毕设源代码部分,提供了系统的完整代码实现...
基于Spring Boot的医院管理系统涉及多个功能模块,如病人管理、医生管理、预约挂号、医疗记录管理。以下是一个基本的设计和实现...在接口中处理请求、调用服务层处理业务逻辑,并返回相应的数据。 3. 前端部分: - 页
SpringBoot025网上超市的设计与实现是一个基于Spring Boot和MySQL的在线购物平台。该项目使用了Spring Boot作为后端框架,以及MySQL作为数据库。以下是对该毕业设计项目的简要介绍:项目结构:该网上超市项目采用了...
项目采用了前后端分离的设计模式,后端使用SpringBoot进行开发,负责处理业务逻辑和数据处理,前端则采用Vue.js进行开发,负责页面展示和用户交互。这种设计模式使得前后端的开发可以并行进行,提高了开发效率。在...
源代码部分则是该秒杀系统的具体实现,包含了前后端分离的设计思路、数据库设计、接口定义、业务逻辑实现等关键代码。这些代码结构清晰、逻辑严谨,具有较高的可读性和可维护性,非常适合作为学习和实践的参考。同时...
只要在准确理解一个系统的业务逻辑之后才可能开发出适应其应用的应用系统来,并且在系统之间模块的科学划分与结构组织都是在正确理解实际应用中的业务逻辑需求的前提下完成的。 此外、利用SQL 2000建立好关系数据库...