一.业务层的设计
概念:
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 }