能用编码方式实现的奏尽量表用HQL语句

解决方案 »

  1.   

    用hibernate的好处好处:1:修改了表时,对程序影响小,只需要修改hbm.xml文件。 2:简单的update,load.save比较简单,不用写sql代码 insert into等 
    其实如果我们要转换类型的话,在hibernate代码里面还要要写的,对吧,比如我们要把一个字段转成date型,那我们在程序中to_date()一下,这与数据库就有关了,因为每个数据库函数都有些不同,如果用了特定的函数,那hibernate也要修改,所以说的数据库换了,对程序没什么影响 ,这句话是不对的,像上面的那个情况就是要修改 还有就是像复杂的操作,比如要用事务来做的,那就一定要用procedure来做了,用hibernate要在程序中写很大一段hql代码。所以这种情况,数据库修改了,还是对项目有影响 的
      

  2.   

    1:修改了表时,对程序影响小,只需要修改hbm.xml文件。有可能还要改view或BO
      

  3.   

    大家对hibernate有不同的看法,可以发表一下。还有就是对ibatis的看法,也可以说说,我们的目的就是用最好用的。对自己项目确实有帮助的。
      

  4.   

    我写了一个 framework, 对 JDBC 的封装比 ibatis 好很多。
    http://sourceforge.net/projects/velocityweb
      

  5.   

    就你这样看待hibernate还不早死光光. 感觉你对hibernate的认识还是不够深入啊.
      

  6.   

    楼上的说得对啊,哈哈,虽然我是最早一批用hibernate的,但后来做管理了,所以对它也生了。所以我们大家一起讨论啊,同时也是请教
      

  7.   

    这只能说明你们的技术实力有限,X软(肯定不是微软)就是用的自己的框架,我们没有实力做自己的框架,不过Hibernate的烂确是早就体会到了,现在的项目是直接用spring jdbcdaosupport,数据库连接及事务一样可以不写代码,爽歪歪。
      

  8.   

    hibernate难道就是为了省几条sql吗???
      

  9.   

    如果能封装一个好的jdbc类,完全可以代替hibernate,我也不是很喜欢hibernate
      

  10.   

    其实Hibernate 也不是一无是处,偶对Hibernate一知半解,但自己写过ORM的平台。对类似应用要用好感觉需要很强的面向对象抽象设计能力,楼主提到的一些概念好像开发层面的问题居多。
      

  11.   

    我也觉得Hibernate不是我想要的,对iBatis比较喜欢。当然,工作中使用的是公司自己的写的ORM。
      

  12.   

    方便和效率,总是一对矛盾,我选择效率,不然Oracle数据库SQL调优什么的岂不白学了,狗屁不是了
      

  13.   

    Hibernate 和ibatis 都有他们的好处  也有不足  就需要具体情况具体分析!难道你能说哪个不如哪个,就忽略哪个?
      

  14.   

    我自己写了一个封装了JDBC的业务处理平台架构。在这个架构之上进行编程,就真的像塔积木一样方便,我下属看过的人都说好,我自己感觉比JDBC好用,开发人员完全不用管数据库连接,关闭,数据库连接池、数据库处理、查询分页等问题。
    其实如果大家能用心在JDBC进行封装,还是可以架构自己的平台的,完全不用hibernate,而且控制更加的灵活。当然,我觉得ibatis也可以。其实我个人感觉hibernate也做不到跨数据库,如果项目业务关系复杂的话(我们一般做的项目都是电信的),你必定会用到与数据库相关的函数。而且有时还真应该用procedure.所以数据库换了,程序代码和procedure也必须相应修改。不知大家怎么看,
      

  15.   

    select username,age from User where "+scope,paras.toArray());
    我想问一下:这样做与直接使用JDBC有什么区别。可能大家要说,用hibernate至少省去了连接database的那段代码,但是我们并不要先一次作数据库查询时都要写的,我们可以把它写在一个action基类中,这个类 extends Action(在华为项目中如此实现)。这样所有的数据库操作的地方都用写那么一段连数据库的代码。
    --------------------------------------------------------------------------
    你可以再多加一些东西,让这个语句自动完成对象关系的映射。这里好像与“省去了连接database的那段代码”没任何关系吧?不知道你为什么会这样想。hibernate决不是为了省去几行代码。下面再谈谈使用procedrue,在一般的商业项目中(不是demo),一般的业务都是较复杂的,所以操作数据库时很多时候都是要用procedure来做,如果用hibernate代码的话,要用事务,还在写一大堆的代码,所以我们就是用procedure实现,再在hibernate中进行调用,但我要问的是,这与用jdbc中调用有什么区别啊,没有什么区别。
    ------------------------------------------------------------------------
    不知道你用的是hibernate2还是hibernate3,不知道你有没有了解过hibernate3的session-per-request模式,如果使用这个模式开发,只需在应用程序开始配置好一个过滤器,以后你就再也不需要和事物打交道了,你的代码中只需要和业务相关的代码。而且hibernate3中的异常也已经改为不需查异常了。不知道我说的这个你知道不知道
    严重同意:TinyJimmy(Jimmy) ( ) 信誉:105 
    楼主的问题层次是不是浅了点啊?我认为你根本不了解hibernate.
      

  16.   

    public class HibernateFilter extends HttpServlet implements Filter {
        private FilterConfig filterConfig;
        private SessionFactory sf;
        private Logger logger = LogManager.getLogger(HibernateFilter.class);    public void init(FilterConfig filterConfig) throws ServletException {
            logger.debug("初始化session factory");
            sf = HibernateUtil.getSessionFactory();
        }    //Process the request/response pair
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain) throws ServletException,
                IOException {
            logger.debug("进入hibernate filter");
            try {
                logger.debug("开启事务");
                sf.getCurrentSession().beginTransaction();            chain.doFilter(request, response);            logger.debug("关闭事务");
                sf.getCurrentSession().getTransaction().commit();        } catch (Throwable ex) {
                ex.printStackTrace();
                try {
                    if (sf.getCurrentSession().getTransaction().isActive()) {
                        logger.debug("发生异常,回滚事务");
                        sf.getCurrentSession().getTransaction().rollback();
                    }
                } catch (Throwable rbEx) {
                    logger.debug("发生异常,回滚事务失败");
                    rbEx.printStackTrace();
                }            // Let others handle it... maybe another interceptor for exceptions?
                throw new ServletException(ex);
            } finally {
                logger.debug("结束hibernate filter");
            }    }    //Clean up resources
        public void destroy() {
        }
    }
      

  17.   

    可能是因为JDBC已经很熟了,我没觉得hibernate有多么大的好处。
    连ibatis都比它强,ibatis实现SQL纯配置化和可定制缓存+DAO模式我觉得就是即实用也足够!
    有人说你不用hibernate那些个程序员把SQL给你写得到处都是:JSP上、JAVABEAN里...你都不知道他会写到哪里去...
    把SQL扔到JSP上的程序员就能把hibernate用好用神?我不信。
      

  18.   

    我不喜欢hibernate原来公司有个项目就用这东东,最后有好多问题!
      

  19.   

    ForumSearchForm form=(ForumSearchForm)actionForm;
        String hql="select forumBean.username,fromBean.age from ForumBean as forumBean";
        if(form==null)
        {
          return list(session,hql,1,10);
        }
        else
        {
            String where="";
           return list(session,hql,form.getPageNo(),form.getPageSize());
        }
    ------------------------------------------------------------------------
    从这段代码可以看出楼主和楼主的同仁们对MVC还没有理解,对struts和hibernate各自所处的地位和作用也不很清楚,只是一味的赶时髦用了这些个框架!
      

  20.   

    所以楼主就得出以上结论!可能还有另外一些感受:struts的唯一好处就是FormBean映射!!
      

  21.   

    hibernate的流行应该是跟它的完全对象化数据库表是很有关系的,其实就操作数据库本身来说,它的技术我觉得并不怎么样,但它确实满足了一部分人对对象化的追求以及表面上带来的一些方便。
      

  22.   

    用hibernate代码量减少,这一条还不够吗?
      

  23.   

    我从试用hibernate后就觉得它还不如jdbc方便。
    一直没用。
      

  24.   

    继续讨论啊,我在改一个hibernate的项目,好郁闷啊.
      

  25.   

    1、维护代码与数据库的表的同步方便:
      先写bean,在类的注释及方法注释中写hibernate 的XDoclet标记,用Ant生成hbm文件,生成数据库的表,写一个程序将所有基础数据插入表.这样所有的bean的改动都可以一次性同步
    2、使用Criteria来创建查询(不是用HQL),省去了在写HQL或SQL或存储过程的大量排错时间
    3、不同数据库间可移植。有以上三点足以解决使用SQL的不足,或许有人说到效率问题(谁能保证每个程序的写的效率都很高?),但与它节约的开发时间比,很多时候是微不足道的。
      

  26.   

    要达到修改表结构后代码不需要改,其实有比Hibernate更好的封装方案,也不一定非要ORMapping才行,能快速编程,架构简单清晰才是正道,对于太复杂的东西,还是用jdbc来搞算了,其他的不见得比JDBC能简单
      

  27.   

    水平不够就不要用hbm吗  用了反而有可能变成累赘
    我水平不够 我不用 我用ibatis 感觉挺好用
      

  28.   

    复杂的统计之类的还是用JDBC:)
      

  29.   

    Java开源项目讨论高级Q群:18349943
      

  30.   

    但是大家有没有想过,在我们的真实项目中,不会这么简单的,就拿上面的这个例子来说,from user,这样的话是查询出了所有的字段,根据数据库优化理论,我们知道,这样必定会影响性能,合理的是你用那个字段,你就查询出那个,结果我们又修改为以下:
    select username,age from User where "+scope,paras.toArray());
    --------------------
    多余的,这样的优化hibernate会替你做,也就是所谓的lazy-load,但是代价就是长连接,也就是说,在你调用getter的时候,session必须不是关闭的。1、维护代码与数据库的表的同步方便:
      先写bean,在类的注释及方法注释中写hibernate 的XDoclet标记,用Ant生成hbm文件,生成数据库的表,写一个程序将所有基础数据插入表.这样所有的bean的改动都可以一次性同步
    -----------------------------
    代码的健壮依赖于 bean,xdoclet标签,ant等等,你不觉得太容易出错了吗?而且还有个可怕的开源代码的升级彼此不协同而且不负责任。3、不同数据库间可移植。
    -----------------------------
    数据库间的移植有没有hibernate都不会简单,如果你认为仅仅修改了hibernate conf文件中的方言就完成了移植,我只能说相关人员的数据库能力不过关。
      

  31.   

    hibernate最大的好处是对数据库操作的封装,当然灵活性和反映速度要比直接使用jdbc差得多,针对配置复杂的问题可以通过自己编写插件来解决,我就编了一个jsf+spring+hibernate的工具,仅需一个按钮就可以完成数据库表到整个基本业务的代码编写、配置和数据操作,包括分页。我专门做了一下测试,不断地切断和连接数据库,发现hibernate的确能很好的处理数据库连接的变化,如果是自己写jdbc,各个方面都要考虑到,那可是个艰巨挑战。
      

  32.   

    to asd_(CSDN旷代灌水VIP)代码的健壮依赖于 bean,xdoclet标签,ant等等,你不觉得太容易出错了吗?而且还有个可怕的开源代码的升级彼此不协同而且不负责任。
    -----------------------------
    在数据库的表有变动时,你认为依赖人力维护代码容易,还是依赖工具维护容易,你有没有照我说的试过?数据库间的移植有没有hibernate都不会简单,如果你认为仅仅修改了hibernate conf文件中的方言就完成了移植,我只能说相关人员的数据库能力不过关。
    -----------------------------你认为直接用SQL时移植的工作量大还是用Hibernate时的移植工作量大?
      

  33.   

    我觉得大家都是习惯于以前面对关系型数据库的表操作,如此很难进行较好的面向对象的设计,而Hibernate的一个目标就是让你脱离关系型的束缚,从对象出发.真实项目中用jdbc做持久化应该会很痛苦吧.
      

  34.   

    Hibernate对于一些老的系统(数据库设计的不规范的),用起来的确很不方便。
    如果是新设计的数据库,还是比较方便的。