EJB原理之(四)--ORM的出现

“纯SQL阶段”基本可以实现所有想要的功能,只是不断重复的SQL语句最终让开发陷入了困境,后来事务容器的出现基本解决了这种SQL重复的问题,但是又有一系列的问题出现了,就是“面对对象”问题。
   
    随着开发语言的不断演化,“面对对象”语言逐渐占领了绝大部分的开发环境,以往的过程化语言是一种比较直观的语言,比较容易入门,但是由于过于偏重过程而忽视了结构,当系统开始变得复杂的时候就非常容易失控,而“面对对象”语言良好的结构可以更好的进行复杂系统的开发和控制,虽然“面对对象”语言的执行效率较过程化语言差一些,但是随着计算成本的日益降低,“面对对象”语言还是占据了大部分的开发领域。

    如今,针对关系型数据库的开发大部分都采用了JAVA、C#这样的面对对象语言进行开发,但是开发的过程中又产生了一个问题,基于对象的开发和基于表格的存储之间有一道明显的鸿沟,就是对象的关系不容易用表格表示,同时所有的对象存取最终都需要转化成SQL进行操作,非常麻烦,为了解决这一问题,产生了个新的体系---对象关系映射(Object Relational Mapping,简称ORM),这个体系的主要作用就是将对象的关系映射为关系型数据库的关系,最终使用一个统一的体系进行存取,让开发者更关注业务结构而不是SQL语句。

    以上面说到的发帖为例,在一个面对对象体系中,理想的结构应该是这样的:


    //加分
    public void 用户加分( int 分数, 用户 user ) {
   
        user.分数 = 分数;

        save ( user );       

    }

    //发帖
    public void 发帖 ( 帖子 帖子1, 用户 user ) {

        帖子1.user = user;
        save ( 帖子1 );
        用户加分 ( 1, user );   

    }

    //回复
    public void 发帖 ( 回复 回复1, 用户 user ) {

        回复1.user = user;
        save ( 回复1 );
        用户加分 ( 1, user );   

    }

    其中一个SQL语句都没有,SQL语句和对象的映射都本隐藏了,业务的开发变的非常简洁和快速,这两年有一个名词非常的火爆,就是Hibernate,EJB3.0中的CMP也是借鉴了Hibernate的实现方式,Hibernate的ORM做得非常优秀,很好的填平了面对对象和关系型数据库之间的那道鸿沟。

    关于ORM,在Hibernate之前有过很多的产品,比如Oracle的TopLink,EJB1.0,2.0中的CMP,但是都没有引起过特别大的反响,以前使用EJB的时候,我从不用CMP,因为我觉得那个东西是个泥潭,一旦用不好就无法自拔,一直都敬而远之,直到看到了Hibernate。

   在针对关系型数据库的开发过程中,有两个东西让我兴奋不已,一个是前面说到的“事务容器”,这个东西让我们不用再重复的写SQL语句,还有一个就是“Hibernate”,这个东西让我们连SQL语句都不用写了。
  
   EJB在发展到3.0的时候终于抛弃了以前的CMP模式,采用的新CMP模式和Hibernate基本一样,也有很多人说EJB3.0就是Hibernate,但不管怎么样,有了良好ORM的EJB体系终于是一个很完善的体系了。
  
    前面的几章里,我们大概讲了一下我们进行关系型数据库开发所经历的几个阶段,为后面进一步剖析EJB体系做一个铺垫,因为EJB体系的出现主要为了解决我们开发中遇到的困惑,进一步简化开发的难度,降低开发的风险。在后面的内容中,我将用一个实例来不断分析EJB体系的原理,最终会产生一个类似于手工作品的EJB小容器。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值