热门标签 | 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



推荐阅读
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文深入探讨了Hibernate框架中乐观锁和悲观锁的机制及其多态特性。乐观锁假设数据在大多数情况下不会发生冲突,因此在读取数据时不加锁,而是在更新时检查版本号以确保数据未被修改。相比之下,悲观锁则认为数据在并发环境下容易产生冲突,因此在读取数据时立即加锁,以防止其他事务访问同一数据,从而避免潜在的数据不一致问题。文章还详细分析了这两种锁机制在实际应用中的优缺点,并介绍了Hibernate中的多态特性如何与锁机制结合,以实现更高效的数据管理和并发控制。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • C# 中 SQLite 报错:在 "\\s\\" 附近出现语法错误,如何解决? ... [详细]
  • 深入解析Android GPS机制:第五部分 ... [详细]
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社区 版权所有