业务是整个项目的核心,每一个业务的处理都是由控制层调用的(本次不考虑控制层,只考虑客户端直接调用业务层的形式),所以整个代码里业务层依然是一个标准,控制层要想取得业务层对象,一定也是依靠工厂类。

1.定义业务层开发标准

考虑到日后要加入事物的控制问题,所以建议方法上要有一些特殊的考虑,请使用正常的名字。例如: insert() update()

将所有的业务层都保存在service的子包下

范例:定义IEmpService

如果数据层的标准定义是根据实体表来决定的,那么业务层可不是与表一一对应的。

package xxx.service;

import java.util.List;

import java.util.Map;

import java.util.Set;

import xxx.vo.Emp;public interfaceIEmpService {/**

* 实现雇员信息增加操作,在本操作中需要使用IEmpDAO接口中的如下方法:

*

首先要利用IEmpDAO.findByID()方法判断要增加的雇员编号是否存在。

*

如果雇员编号不存在,则使用IEmpDAO.doCreate()方法保存雇员信息

* @param vo 包含了要增加数据的VO类对象

* @return 数据增加成功返回true,否则返回false

* @throws Exception IEmpDAO接口中的抛出异常*/

publicboolean insert(Emp vo) throws Exception;/**

* 实现数据的修改操作,调用的是IEmpDAO.doUpdate()方法,此操作属于全部修改

* @param vo 包含要修改的数据信息

* @return 修改成功返回true,否则返回false

* @throws Exception IEmpDAO接口中的抛出异常*/

publicboolean update(Emp vo) throws Exception;/**

* 实现数据的批量删除操作,在本操作中需要执行如下调用:

*

判断要删除数据传入的集合内容是否为空(判断null以及size)

*

如果确定有删除的数据,则调用IEmpDAO.doRemove()方法删除

* @param ids 包含了要删除数据的所有ID内容

* @return 删除成功返回true,否则返回false

* @throws Exception IEmpDAO接口中的抛出异常*/

public boolean delete(Setids) throws Exception;/**

* 根据雇员编号查询出一个雇员的完整信息,调用的是IEmpDAO.findById()方法查询

* @param id 要查询的雇员编号信息

* @return 如果可以查询到雇员则以VO的形式返回,如果查询不到则返回null

* @throws Exception IEmpDAO接口中的抛出异常*/

public Emp get(intid) throws Exception;/**

* 查询雇员的全部数据,调用的是IEmpDAO.findAll()方法查询

* @return 所有的查询记录,以List集合返回

* @throws Exception IEmpDAO接口中的抛出异常*/

public Listlist() throws Exception;/**

* 实现数据模糊查询操作,同时会返回符合查询要求的数据量,本次操作要调用以下的功能:

*

调用IEmpDAO.findAllSplit()方法,分页查询要显示的数据

*

调用IEmpDAO.getAllCount()方法,统计数据的个数

* @param column 模糊查询字段

* @param keyWord 模糊查询关键字

* @param currentPage 当前所在页

* @param lineSize 每页显示的长度

* @return 本方法要返回两个数据,所有使用Map集合返回,出现的内容如下:

*

key = allEmps、value = IEmpDAO.findAllSplit(),返回的是List<Emp>

*

key = empCount、value = IEmpDAO.getAllCount(),返回的是Integer

* @throws Exception IEmpDAO接口中的抛出异常*/

public Map listSplit(String column,String keyWord,int currentPage,intlineSize) throws Exception;

}

2.定义业务层实现类

注意事项:

要通过DAOFactory找到所需要的数据层的接口;

要控制DatebaseConnection类取得Connection接口对象;

不管操作如何,最后一定要关闭数据库,如果有异常交给被调用处处理;

可以在xxx.service.impl子包中定义业务层的实现子类

范例:定义EmpServiceImpl子类

package xxx.service.impl;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Set;

import xxx.dbc.DatabaseConnection;

import xxx.factory.DAOFactory;

import xxx.service.IEmpService;

import xxx.vo.Emp;/**

* 当取得了本类对象时,就意味着可以进行数据库操作了。

* @author James

**/

public classEmpSericeImpl implements IEmpService {private DatabaseConnection dbc = newDatabaseConnection();

@Overridepublicboolean insert(Emp vo) throws Exception {try{//利用DAOFactory类中的getIEmpInstance()方法取得IEmpDAO接口对象//在调用getIEmpInstance()的时候需要通过DatabaseConnection对象取得Connection接口对象,传递进去//调用IEmpDAO接口中findById()方法判断要增加的雇员编号是否存在

if(DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findById(vo.getEmpno()) == null) {return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doCreate(vo);

}return false;

}catch(Exception e) {throwe;

}finally{this.dbc.close();;

}

}

@Overridepublicboolean update(Emp vo) throws Exception {try{return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doUpdate(vo);

}catch(Exception e) {throwe;

}finally{this.dbc.close();;

}

}

@Overridepublic boolean delete(Setids) throws Exception {try{if(ids.size() == 0) { //没有要删除的数据

return false;

}return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doRemove(ids);

}catch(Exception e) {throwe;

}finally{this.dbc.close();;

}

}

@Overridepublic Emp get(intid) throws Exception {try{return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findById(id);

}catch(Exception e) {throwe;

}finally{this.dbc.close();;

}

}

@Overridepublic Listlist() throws Exception {try{return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findAll();

}catch(Exception e) {throwe;

}finally{this.dbc.close();;

}

}

@Overridepublic Map listSplit(String column, String keyWord, int currentPage, intlineSize)

throws Exception {try{

Map map = new HashMap();

map.put("allEmps", DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findAllSplit(column, keyWord, currentPage, lineSize));

map.put("empCount", DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).getAllCount(column, keyWord));returnmap;

}catch(Exception e) {throwe;

}finally{this.dbc.close();;

}

}

}

3.定义业务层工厂类

由于最终业务层是要留给控制层使用的,所以必须有工厂类,但是与数据层工厂类相比,业务层的工厂类不需要传递参数。

package xxx.factory;

import xxx.service.IEmpService;

import xxx.service.impl.EmpSericeImpl;public classServiceFactory {public staticIEmpService getIEmpServiceInstance() {return newEmpSericeImpl();

}

}

java业务类_Java_业务层开发相关推荐

  1. 【飞秋】存储过程与业务类实现业务的差异比较

    以下比较不太全面,纯粹是个人的理解.可能是针对前一篇文章的补充与说明 1.批量数据的处理比较 业务逻辑:单位A部门划转到B部门,业务规则是把A部门的100人的关联单位改为B部门,同时在人员岗位变化子表 ...

  2. java工具类调用Service层类的方法

    在spring mvc 模式中,Service层的类被非Service或者非Controller层的代码调用后,是不能直接使用的.比如在工具类或者配置类中如果需要调用Service层的代码,则需要在该 ...

  3. 2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出“方法 method() 被

    2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出"方法 metho ...

  4. java 用面向接口编程的方式开发打印机_Java“打印机”模型理解面向接口编程。实现接口定义类,接口实现类,核心“业务”类分离...

    接口定义类 IinkBox.java package printerDemo.iface; public interface IInkBox { public String getColor(); } ...

  5. JAVA三层架构,持久层,业务层,表现层的理解

    转自:https://blog.csdn.net/ljf_study/article/details/64443653 SSH: Struts(表示层)+Spring(业务层)+Hibernate(持 ...

  6. SpringBoot实现Java高并发秒杀系统之DAO层开发(一)

    SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...

  7. 怎么创建数据表的实体类和业务类_微服务项目第13天:商品分类业务的实现

    今天是刘小爱自学Java的第143天. 感谢你的观看,谢谢你. 学习计划安排如下: 商品分类业务的初步实现. 数据模型的分析:数据表字段的设计,Java中对应的实体类,前端页面vue组件. 业务模型的 ...

  8. Java无线数据增值业务概述

    最近,有关无线数据增值服务的报道越来越多,特别是有关支持下载服务的技术平台的报道和评论,如Java/J2ME,BREW等,引起众人的关注.无线数 据增值服务这个主题对于中国的业界和消费者是比较新的事物 ...

  9. SpringBoot实现Java高并发秒杀系统之Service层开发(二)

    继上一篇文章:SpringBoot实现Java高并发秒杀系统之DAO层开发 我们创建了SpringBoot项目并熟悉了秒杀系统的表设计,下面我们将讲解一下秒杀系统的核心部分:Service业务层的开发 ...

最新文章

  1. 《为了你我愿意热爱整个世界》
  2. androidstudio常见问题
  3. 【正一专栏】2018年欧冠八强猜想
  4. c++中的向量容器(vector)
  5. Mind Master Pro 8.0——安装教程
  6. 登录样式:log4j 2,上下文,自动清除…全部不附加任何字符串!
  7. 递归方程组解的渐进阶的求法——代入法
  8. java10 WeakHashMap
  9. 可用于Asp.net的嵌入式数据库SqlCE4.0试用笔记
  10. 【库安装】windows下Python安装protobuf
  11. java注释越多_java 注释+常便量
  12. 人人都能学会的python编程教程4:关系运算符与循环
  13. 建设医疗人工智能的“四步曲”
  14. js格式化显示xml
  15. Kubuntu20.04开启UI的root登录
  16. C# 串口通讯 串口调试助手源码
  17. ArcGIS三维分析之ArcGlobe简要说明
  18. 光猫、路由器、交换机、wifi的概念和作用
  19. java部门管理_系统管理模块_部门管理_实现基本的增删改查功能
  20. sdlc esd.oracle.com,jdk下载安装

热门文章

  1. 从JDK源码看关闭钩子
  2. kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap
  3. 三层交换机关于VLAN的划分以及ACL的使用
  4. VS IED 自己开发小插件
  5. 动态规划(四)--最长公共子序列
  6. shell 脚本的使用
  7. Linux如何查看所有的用户和组信息
  8. Leetcode 448. Find All Numbers Disappeared in an Array
  9. 关于类型的存储时间和链接
  10. textbox点击后弹出系统键盘导致背景重置为白色的问题