热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java业务类_Java_业务层开发

业务是整个项目的核心,每一个业务的处理都是由控制层调用的(本次不考虑控制层,只考虑客户端直接调用业务层的形式),所以整个代码里业务层依然是

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

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

*

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.定义业务层工厂类

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

975b6d3918ed26987a14305adf42e8f4.png

package xxx.factory;

import xxx.service.IEmpService;

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

}

}

73e3cbc6f7eea6b8e865acb495718a3a.png



推荐阅读
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
author-avatar
王耀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有