大家好呀,首先声明我是一个程序猿!一个以写出好程序自豪的程序猿,我现在编写的程序是依靠于 Java 语言,更进一步的说是 JavaWeb 方向,最近在研究 SpringMVC,Spring+Hibernate4,在这个过程中遇到了小小的疑问。有点强烈的强迫症(或许程序猿大都存在吧),总是觉得不解决,如鲠在喉。在 Spring 集成 Hibernate3 的时候,Spring 为编程者们提供了一个 HibernateTemplate 类,其中的方法式编程让我大受启发。但是在 Hibernate4 中已经不提供这个类了(因为 Hibernate 已经做得足够好了),如果当我现在有这么一个需求的时候,那么我的代码将变得非常恶心。具体需求如下:
Dao层:
当捕获到HibernateException(RuntimeException的子类)的时候,需要在后台以日志的方式记录,同时需要将异常告知上一层,最后统一在Controller层中做统一处理(给前台页面一个友好的提示)。
问题:如果在dao层中将所有的代码都try{}catch{}的话,那么看上去是非常恶心的(我觉得恶心),现在我想要通过回调的方式对所有方法进行处理。但是已经没有这个HibernateTemplate类了,所以是需要我自己写一个吗?还是大家有更好的办法呢?希望大家可以将大家平时的写法告知一下(由于保密原则,部分代码也行,如果大家觉得代码有所泄露,可以处理一下),不胜感激!请大家帮助一下。
一个挑剔的程序猿
1
thinkmore OP 大家如果有GitHub上什么好的项目,也可以推荐一下,最好是Spring+Hibernate的项目,XML配置更好,Thanks
|
2
belin520 2014-10-06 19:15:09 +08:00 via Android
谁声大听谁的!!
|
3
belin520 2014-10-06 19:16:33 +08:00 via Android
我擦,回错贴了,不好意思,容我回来把楼上的字粘贴走
|
4
casparchen 2014-10-06 19:21:48 +08:00 via Android
楼主太啰嗦了,看了一点实在看不到关键内容,放弃了
|
5
thinkmore OP @casparchen 好吧,简而言之,我想要知道大家Dao层是如何写的,不太想要看到session.query(sql)这种答案。要显示捕获异常(即使是RuntimeException)
|
7
wanjun 2014-10-06 20:10:58 +08:00
没有你这么用过,
用纯servlet的时候,会有个总的servlet入口,在这里处理异常,内部不做处理 用spring+cxf 的时候,配置一个 cxf异常拦截,内部也不做任何处理 也就是在底层不考虑异常,只管往外层抛,在最外层统一处理下就ok |
8
arslion 2014-10-06 20:19:50 +08:00
关注
我一般都直接log的, 没往外抛过.. |
9
wecoders 2014-10-07 09:57:22 +08:00
@thinkmore try/catch不需要在dao层写,直接放controller里面,或者直接统一扑捉异常(拦截),然后打印日志,并显示错误页面。
|
11
thinkmore OP @wecoders 如你这种说法,只管往外抛的话那么如果我想要自定义异常明显行不通,其次不是所有的Dao方法都可以不写try/catch的呀!
|
12
epkT6QJ3RSaz6AnJ 2014-10-08 02:10:54 +08:00
|
13
epkT6QJ3RSaz6AnJ 2014-10-08 02:14:00 +08:00
// This is it
@Repository public class YourFooDao { @Resource private SessionFactory sessionFactory; private Foo get(long id){ return (Foo) sessionFactory.getCurrentSession().get(id); } } |
14
epkT6QJ3RSaz6AnJ 2014-10-08 02:16:13 +08:00 1
我的理解就是@Repository和@Resource一块使用,spring 帮你实现了如下连接中的功能
http://www.springbyexample.org/examples/simple-hibernate-xml-config-code-example.html |
15
thinkmore OP @epkT6QJ3RSaz6AnJ 很感谢你的回答,让我有了一点感觉了,诚然在hibernate4中不在使用template了,只需要注入sessionFactory,然后得到Session就行了,现在我想要的是做这些处理的时候,在Dao层,人为捕获异常,然后将异常信息记录成为日志,并且向上一层抛出自定义异常(RuntimeException),这里我想要把某些公共的代码提取出来编程类似于HibernateTemplate的那种回调式方法或者叫做方法式编程,但是功力不够呀!望指导
|
16
epkT6QJ3RSaz6AnJ 2014-10-09 00:18:07 +08:00 1
@thinkmore 貌似AOP编程可以解决吧,用@AfterThrowing之类的吧
可以参考这个大牛的文章,IOC和AOP是Spring两大核心内容要好好学下,这样基本可以搞定了吧 http://www.mkyong.com/spring3/spring-aop-aspectj-annotation-example/ |
17
thinkmore OP @epkT6QJ3RSaz6AnJ,非常感谢,满意结贴!顺便吐槽一句为啥不能上传图片呢?
|
18
epkT6QJ3RSaz6AnJ 2014-10-09 17:01:02 +08:00
@thinkmore 连代码都不高亮
|