“纯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小容器。
随着开发语言的不断演化,“面对对象”语言逐渐占领了绝大部分的开发环境,以往的过程化语言是一种比较直观的语言,比较容易入门,但是由于过于偏重过程而忽视了结构,当系统开始变得复杂的时候就非常容易失控,而“面对对象”语言良好的结构可以更好的进行复杂系统的开发和控制,虽然“面对对象”语言的执行效率较过程化语言差一些,但是随着计算成本的日益降低,“面对对象”语言还是占据了大部分的开发领域。
如今,针对关系型数据库的开发大部分都采用了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小容器。