dao接口,代码为:
/** * 根据传入的部门主键查找对应的部门 * @param id部门的主键 * @return Department */ public Department findById(Long id) throws DepartmentDAOException;
daoimpl,代码为:
/** * 根据传入的部门主键查找对应的部门 * @param id部门的主键 * @return Department * @throws DepartmentDAOException */ public Department findById(Long id) throws DepartmentDAOException { try { return (Department)this.getSqlMapClientTemplate().queryForObject("Department.getDepartmentById", id); } catch (Exception e) { logger.serious(e.getMessage(), e); throw new DepartmentDAOException("DepartmentDAOImpl.findById","DAOException",e); } }
service接口,代码为:
/** * 根据传入的部门主键查找对应的部门 * @param id部门的主键 * @throws DepartmentServiceException * @return DepartmentVO */ public DepartmentVO doFindById(Long id) throws DepartmentServiceException;
serviceimpl,代码为:
/** * 根据传入的部门主键查找对应的部门 * @param id部门的主键 * @throws DepartmentServiceException * @return DepartmentVO */ public DepartmentVO doFindById(Long id) throws DepartmentServiceException { try { Department pojo = departmentDAO.findById(id); DepartmentVO vo = new DepartmentVO(); BeanUtils.copyProperties(vo, pojo); return vo; } catch (Exception e) { logger.serious(e.getMessage(), e);//这个日志级别是自定义的,对log4j源码进行了修改 throw new DepartmentServiceException("DepartmentServiceImpl.doFindById","ServiceException",e); } }
自己包装了DepartmentDAOException,DepartmentServiceException,它们都继承自BaseException,BaseException又继承Exception,在打印异常信息时采用log4j不采用java里面的打印堆栈语句,这样做的好处是我们可以控制异常信息的打印与否,比如在给客户演示时,数据库里的数据不完整,我们并不希望客户看到这些信息,另一方面客户期望的是一个没有问题的系统,客户并不关心这些,我们可以通过这种方式不打印异常信息,只是把这些异常信息写入日志,过后我们检查日志,定位问题。
关于代码中使用的logger.serious,在log4j中并不存在,我是修改了源码,加入了一个日志级别,可以参考我的另一篇文章《为log4j增加日志级别》,下层的异常一层层向上抛,抛到action进行处理,写入日志或是通过struts进行处理等等,或许有人认为这样处理太麻烦了,麻烦是麻烦了点,不过带来的好处只在亲身体验过就知道了,当然这只是一种处理方法,不知道还是没有更好的处理办法