今天廷鹏师弟来的java建议
如下一段获取数据代码的问题:
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;
}
最新文章
- Swift_String的操作
- ASP.NET Web API中的Controller
- Wampserver主机服务配置方法
- CocoStudio基础教程(5)使用CocoStudio场景编辑器关联组件
- ArcGIS Engine Style文件操作
- Java开发者易犯错误Top10
- [转]Hibernate映射的基本操作
- OpenCV探索之路(八):重映射与仿射变换
- Python强大的可变参数传递机制
- php 与mysql 数据库
- spring cloud config客户端
- HTML for android 移动小球
- 算法初级面试题05——哈希函数/表、生成多个哈希函数、哈希扩容、利用哈希分流找出大文件的重复内容、设计RandomPool结构、布隆过滤器、一致性哈希、并查集、岛问题
- Win7 默认.lnk打开方式全是别的程序 还原的办法
- 1037 Magic Coupon (25 分)
- 在 R 中使用 Python 字符串函数
- linux 安装python
- css3中-moz、-ms、-webkit分别代表的意思
- HttpClient远程调用接口
- ios 6.0模拟器页面调出pop窗口消失后无法使用键盘