如下一段获取数据代码的问题:

 public Serializable getById(Serializable id) throws BaseBusinessException {
  if (id == null)
   throw new BaseBusinessException("根据给出的Id获得对象时,ID不得为空!");
  try {
   return basicDAO.findById(id);

  } catch (BaseDBException e) {
   log.error("根据给出的Id获得对象:" + getObjectName() + "失败");
   e.printStackTrace();
   throw new BaseBusinessException(e.getMessage());
   // }
  }
 }

问题:

  问题1: e.printStackTrace();  会造成有一部分日志不在控制范围内,

应该这样写

   log.error("根据给出的Id获得对象:" + getObjectName() + "失败",e);

 

  问题2:   throw new BaseBusinessException(e.getMessage());

    这种方法直接抛出异常到界面,会非常不友好

    对于一种get数据的方法,应该将这些异常捕获,用log.erro打印到后台,前端返回null即可

 

 改良1 :  可采用标注型事务

        原来我们都是采用 前缀控制的 声明式事务,这种方法对方法名有所限制,而且不太灵活

可以采用标注型控制,在方法上加上  @Transactional 即可

 @Transactional
 public Serializable getById(Serializable id) throws BaseBusinessException

 

 

改善后的代码

 @Transactional
 public Serializable getById(Serializable id) throws BaseBusinessException {
  if (id == null)
   throw new BaseBusinessException("根据给出的Id获得对象时,ID不得为空!");
  try {
   return basicDAO.findById(id);

  } catch (BaseDBException e) {
   log.error("根据给出的Id获得对象:" + getObjectName() + "失败", e);
   //e.printStackTrace();
   //throw new BaseBusinessException(e.getMessage());
   // }
  }
  return null;
 }

 

 

 

 

 

posted on 2013-08-18 19:15  运筹帷幄  阅读(467)  评论(0编辑  收藏  举报