当前位置: 首页 > news >正文

业务层设计

一.业务层的设计

概念:
  mvc 设计模式, 其中 M 表示 Modle 层(模型层), 其中模型层包括了数据层(dao) 和业务层(servive).
  业务层最终是被控制层调用了,此时如果修改了业务层的代码那么控制层的代码也随之要修改,耦合度较高
  要解决这样的问题需要为业务层定义一套标准(一个接口)

1.定义出 service 层的接口 (IEmpService)

 1 public interface IEmpService {
 2     /**
 3      *     实现数据的增加 调用 dao 层的 insert()方法
 4      * @param vo 包含了要插入的数据的 vo 对象
 5      * @return 成功返回 true 否则返回 false
 6      */
 7     public boolean addEmp(Emp vo);
 8     /**
 9      *     根据编号删除数据 调用 dao 层的 deleteById()方法
10      * @param id 要删除的数据的编号
11      * @return 成功返回 true 否则返回 false
12      */
13     public boolean removeEmpById(Integer id);
14     /**
15      *     修改数 调用 dao 层的 update() 方法
16      * @param vo 保存了要修改的数据的 vo 对象
17      * @return 修改成功返回 true 否则返回 false
18      */
19     public boolean editEmp(Emp vo);
20     /**
21      *     根据编号查询数据
22      * @param id 要查询的数据编号
23      * @return 有数剧返回 Emp 对象 否则返回 null
24      */
25     public Emp findEmpById(Integer id);
26     /**
27      *     实现模糊分页查询, 调用 dao 层的方法
28      *     <li>调用 selectSplitAll() 方法,取得雇员信息的集合</li>
29      *     <li>抵用 selectCount() 方法, 取得查询到的数据量
30      * @param kw 模糊查询的关键字
31      * @param cp 当前页
32      * @param ls 每页显示的数据量
33      * @return 保存雇员集合与数据量的 Map 对象
34      */
35     public Map<String,Object> findAllSplit(String kw,Integer cp, Integer ls);
36     /**
37      *     批量删除数据
38      * @param ids 保存了要删除的数据的编号的集合
39      * @return 删除的行数
40      */
41     public boolean removeBacth(List<Object> ids);
42 }

2.定义出 service 接口的实现类

  1 public class EmpServiceImpl implements IEmpService {
  2     //获取连接对象
  3     private Connection conn = DBUitl.getConnection();
  4     
  5     //需要调用数据层的方法所以需要确定数据层的实现类对象
  6     private IEmpDAO empDAO = new EmpDAOImpl(conn);
  7 
  8     @Override
  9     public boolean addEmp(Emp vo) {
 10         try {
 11             //可能需要事务处理 (取消事务的自动提交)
 12             return this.empDAO.insert(vo)>0;
 13             //可能需要事务处理 (提交事务)
 14         } catch (Exception e) {
 15             e.printStackTrace();
 16             //可能需要事务处理 (事务回滚)
 17         } finally {
 18             DBUitl.close(conn);
 19         }
 20         return false;
 21     }
 22 
 23     @Override
 24     public boolean removeEmpById(Integer id) {
 25         try {
 26             //可能需要事务处理 (取消事务的自动提交)
 27             return this.empDAO.deleteById(id)>0;
 28             //可能需要事务处理 (提交事务)
 29         } catch (Exception e) {
 30             e.printStackTrace();
 31             //可能需要事务处理 (事务回滚)
 32         } finally {
 33             DBUitl.close(conn);
 34         }
 35         return false;
 36     }
 37 
 38     @Override
 39     public boolean editEmp(Emp vo) {
 40         try {
 41             //可能需要事务处理 (取消事务的自动提交)
 42             return this.empDAO.update(vo)>0;
 43             //可能需要事务处理 (提交事务)
 44         } catch (Exception e) {
 45             e.printStackTrace();
 46             //可能需要事务处理 (事务回滚)
 47         } finally {
 48             DBUitl.close(conn);
 49         }
 50         return false;
 51     }
 52 
 53     @Override
 54     public Emp findEmpById(Integer id) {
 55         try {
 56             //可能需要事务处理 (取消事务的自动提交)
 57             return this.empDAO.selectById(id);
 58             //可能需要事务处理 (提交事务)
 59         } catch (Exception e) {
 60             e.printStackTrace();
 61             //可能需要事务处理 (事务回滚)
 62         } finally {
 63             DBUitl.close(conn);
 64         }
 65         return null;
 66     }
 67 
 68     @Override
 69     public Map<String, Object> findAllSplit(String kw, Integer cp, Integer ls) {
 70         Map<String,Object> map = new HashMap<String, Object>();
 71         try {
 72             //查询雇员的信息
 73             map.put("emplist",this.empDAO.selectSplitAll("%"+kw+"%", cp, ls));
 74             //统计数据量
 75             int number = this.empDAO.selectCount(kw);
 76             //计算出总的页数
 77             //int allPages = number/ls+number%ls==0?0:1;
 78             //int allPages = (int)Math.ceil(number/(double)ls));
 79             map.put("count",number);
 80             map.put("allPages",(int)Math.ceil(number/(double)ls));
 81             map.put("kw",kw);
 82             map.put("cp",cp);
 83             map.put("ls",ls);
 84             return map;
 85         } catch (Exception e) {
 86             e.printStackTrace();
 87         } finally {
 88             DBUitl.close(conn);
 89         }
 90         return null;
 91     }
 92 
 93     @Override
 94     public boolean removeBacth(List<Object> ids) {
 95         try {
 96             //可能需要事务处理 (取消事务的自动提交)
 97             return this.empDAO.deleteBatch(ids)>0;
 98             //可能需要事务处理 (提交事务)
 99         } catch (Exception e) {
100             e.printStackTrace();
101             //可能需要事务处理 (事务回滚)
102         } finally {
103             DBUitl.close(conn);
104         }
105         return false;
106     }
107 }

测试

1 public class Test {
2     public static void main(String[] args) throws Exception {    
3         IEmpService empService = new EmpServiceImpl();
4         Map<String,Object> map = empService.findAllSplit("A", 1, 10);
5         System.out.println("查询到的数据量是:" + map.get("count"));
6         System.out.println("雇员信息是: " + map.get("emplist"));
7     }
8 }

 

转载于:https://www.cnblogs.com/yslf/p/10732097.html

相关文章:

  • final Map可以修改内容,final 常量不能修改
  • npm安装包时 --save 和 --save-dev 的区别
  • 05-数据仓库之建模实例
  • 2018-2019 20165239 Exip MSF基础应用
  • Netty源码分析(五):EventLoop
  • 是时候放弃tensorflow集群投入horovod的怀抱
  • OO第二阶段作业总结
  • MUI 返回顶部
  • 知识点---js监听手机返回键,回到指定界面
  • 无论你是什么职业,这篇职场生存法则都是你必备的
  • 余莹是谁?
  • 37.C#--面对对象_类的基本使用
  • C++STL之vector用法总结
  • Angular-使用好NgForOf的trackBy带来性能上的提升
  • 微服务
  • Angular4 模板式表单用法以及验证
  • Fundebug计费标准解释:事件数是如何定义的?
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MQ框架的比较
  • mysql 数据库四种事务隔离级别
  • MySQL几个简单SQL的优化
  • PAT A1120
  • PHP那些事儿
  • Promise面试题,控制异步流程
  • 工作中总结前端开发流程--vue项目
  • 后端_MYSQL
  • 机器学习中为什么要做归一化normalization
  • 简单基于spring的redis配置(单机和集群模式)
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 力扣(LeetCode)22
  • 面试遇到的一些题
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 1.Ext JS 建立web开发工程
  • mysql面试题分组并合并列
  • 阿里云ACE认证之理解CDN技术
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 如何在招聘中考核.NET架构师
  • #14vue3生成表单并跳转到外部地址的方式
  • $(selector).each()和$.each()的区别
  • (04)odoo视图操作
  • (09)Hive——CTE 公共表达式
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (六)c52学习之旅-独立按键
  • (六)软件测试分工
  • (一)Dubbo快速入门、介绍、使用
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • .net Stream篇(六)
  • .net 获取url的方法
  • .Net6使用WebSocket与前端进行通信
  • .NET中两种OCR方式对比
  • @Autowired和@Resource装配
  • @RestControllerAdvice异常统一处理类失效原因