Dear All: 各位 V2exr 们,Java 程序猿来寻求帮助来了。 - V2EX
thinkmore
V2EX    Java

Dear All: 各位 V2exr 们,Java 程序猿来寻求帮助来了。

  •  1
     
  •   thinkmore
    generalthink Oct 6, 2014 4222 views
    This topic created in 4236 days ago, the information mentioned may be changed or developed.

    大家好呀,首先声明我是一个程序猿!一个以写出好程序自豪的程序猿,我现在编写的程序是依靠于 Java 语言,更进一步的说是 JavaWeb 方向,最近在研究 SpringMVC,Spring+Hibernate4,在这个过程中遇到了小小的疑问。有点强烈的强迫症(或许程序猿大都存在吧),总是觉得不解决,如鲠在喉。在 Spring 集成 Hibernat3 的时候,Spring 为编程者们提供了一个 HibernateTemplate 类,其中的方法式编程让我大受启发。但是在 Hibernate4 中已经不提供这个类了(因为 Hibernate 已经做得足够好了),如果当我现在有这么一个需求的时候,那么我的代码将变得非常恶心。具体需求如下:

    Dao层:
    当捕获到HibernateException(RuntimeException的子类)的时候,需要在后台以日志的方式记录,同时需要将异常告知上一层,最后统一在Controller层中做统一处理(给前台页面一个友好的提示)。

    问题:如果在dao层中将所有的代码都try{}catch{}的话,那么看上去是非常恶心的(我觉得恶心),现在我想要通过回调的方式对所有方法进行处理。但是已经没有这个HibernateTemplate类了,所以是需要我自己写一个吗?还是大家有更好的办法呢?希望大家可以将大家平时的写法告知一下(由于保密原则,部分代码也行,如果大家觉得代码有所泄露,可以处理一下),不胜感激!请大家帮助一下。
    一个挑剔的程序猿

    18 replies    2014-10-09 17:01:02 +08:00
    thinkmore
        1
    thinkmore  
    OP
       Oct 6, 2014
    大家如果有GitHub上什么好的项目,也可以推荐一下,最好是Spring+Hibernate的项目,XML配置更好,Thanks
    icanfork
        2
    icanfork  
       Oct 6, 2014 via Android
    谁声大听谁的!!
    icanfork
        3
    icanfork  
       Oct 6, 2014 via Android
    我擦,回错贴了,不好意思,容我回来把楼上的字粘贴走
    casparchen
        4
    casparchen  
       Oct 6, 2014 via Android
    楼主太嗦了,看了一点实在看不到关键内容,放弃了
    thinkmore
        5
    thinkmore  
    OP
       Oct 6, 2014
    @casparchen 好吧,简而言之,我想要知道大家Dao层是如何写的,不太想要看到session.query(sql)这种答案。要显示捕获异常(即使是RuntimeException)
    Kai
        6
    Kai  
       Oct 6, 2014   1
    移动到 /go/java
    wanjun
        7
    wanjun  
       Oct 6, 2014
    没有你这么用过,
    用纯servlet的时候,会有个总的servlet入口,在这里处理异常,内部不做处理
    用spring+cxf 的时候,配置一个 cxf异常拦截,内部也不做任何处理

    也就是在底层不考虑异常,只管往外层抛,在最外层统一处理下就ok
    arslion
        8
    arslion  
       Oct 6, 2014
    关注
    我一般都直接log的, 没往外抛过..
    wecoders
        9
    wecoders  
       Oct 7, 2014
    @thinkmore try/catch不需要在dao层写,直接放controller里面,或者直接统一扑捉异常(拦截),然后打印日志,并显示错误页面。
    thinkmore
        10
    thinkmore  
    OP
       Oct 7, 2014
    @wanjun 你的意思是我只管往外抛了?然后统一配置异常页面,但是我是需要进行日志记录的呀
    thinkmore
        11
    thinkmore  
    OP
       Oct 7, 2014
    @wecoders 如你这种说法,只管往外抛的话那么如果我想要自定义异常明显行不通,其次不是所有的Dao方法都可以不写try/catch的呀!
    epkT6QJ3RSaz6AnJ
        13
    epkT6QJ3RSaz6AnJ  
       Oct 8, 2014
    // This is it

    @Repository
    public class YourFooDao {

    @Resource
    private SessionFactory sessionFactory;

    private Foo get(long id){
    return (Foo) sessionFactory.getCurrentSession().get(id);
    }
    }
    epkT6QJ3RSaz6AnJ
        14
    epkT6QJ3RSaz6AnJ  
       Oct 8, 2014   1
    我的理解就是@Repository和@Resource一块使用,spring 帮你实现了如下连接中的功能
    http://www.springbyexample.org/examples/simple-hibernate-xml-config-code-example.html
    thinkmore
        15
    thinkmore  
    OP
       Oct 8, 2014
    @epkT6QJ3RSaz6AnJ 很感谢你的回答,让我有了一点感觉了,诚然在hibernate4中不在使用template了,只需要注入sessionFactory,然后得到Session就行了,现在我想要的是做这些处理的时候,在Dao层,人为捕获异常,然后将异常信息记录成为日志,并且向上一层抛出自定义异常(RuntimeException),这里我想要把某些公共的代码提取出来编程类似于HibernateTemplate的那种回调式方法或者叫做方法式编程,但是功力不够呀!望指导
    epkT6QJ3RSaz6AnJ
        16
    epkT6QJ3RSaz6AnJ  
       Oct 9, 2014   1
    @thinkmore 貌似AOP编程可以解决吧,用@AfterThrowing之类的吧
    可以参考这个大牛的文章,IOC和AOP是Spring两大核心内容要好好学下,这样基本可以搞定了吧
    http://www.mkyong.com/spring3/spring-aop-aspectj-annotation-example/
    thinkmore
        17
    thinkmore  
    OP
       Oct 9, 2014
    @epkT6QJ3RSaz6AnJ,非常感谢,满意结贴!顺便吐槽一句为啥不能上传图片呢?
    epkT6QJ3RSaz6AnJ
        18
    epkT6QJ3RSaz6AnJ  
       Oct 9, 2014
    @thinkmore 连代码都不高亮
    About     Help     Advertise     Blog     API     FAQ     Solana     3339 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 73ms UTC 13:53 PVG 21:53 LAX 06:53 JFK 09:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86