您的位置:首页 > 职场人生

Hibernate为java程序员带来了什么

2009-04-27 15:15 543 查看
      最近在看Hibernate框架,写点零碎的心得吧。
      Hiberante最初被设计来管理平衡Java的面向对象特性和DB的面向连接特性。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
      那么,hibernate在哪些方面为我们编程提供了方便?
      第一,对数据库设计管理,更加规范,可操作性强。举简单的例子,程序中对一个实体进行操作,如何在数据库中进行对应操作。在使用Hibernate之前,你修改一个学生信息,必然需要在多个表中进行更新。查找也同样在多个表中取得数据,这样你不得不在数据库操作的java类中做相关操作,而这种做法其实是面向过程的,而且容易出错,使程序员陷入担心(程序员总是会怀疑,我写的sql语句是否真的完成所有映射关系),和崩溃的边缘(一旦这时加入新的表,产生新的映射关系,不得不对所有相关的sql语句进行修改)。在Hibernate引入后,你在编程前就可以把这些繁琐的工作用Hibernate设置好(映射),OK,下次我们需要修改一个实体就只用对该实体操作,剩下的Hibernate可以为你完成。
      第二,兼容性。Hibernate还有一个特点,就是对数据库方言的翻译。不同的数据库可能都使用sql语言,但sql语言的标准却不唯一,工程在需要更换数据库时存在出错的危险。Hibernate采用hql语言,进行了面向对象封装,标准唯一,对底层数据库能很好兼容。打个比方,各种数据库的sql标准是gb2312 ,gbk,那么hql就是utf-8。
      第三,操作性能的提高。cache机制,缓存往往是提高系统性能的最重要手段,对数据起到一个蓄水池和缓冲的作用。Cache对于大量依赖数据读取操作的系统而言尤其重要。在大并发量的情况下,如果每次程序都需要向数据库直接做查询操作,它们所带来的性能开销是显而易见的,频繁的网络舆,数据库磁盘的读写操作都会大大降低系统的性能。此时如果能让数据库在本地内存中保留一个镜像,下次访问的时候只需要从内存中直接获取,那么显然可以带来不小的性能提升。引入Cache机制的难点是如何保证内存中数据的有效性,否则脏数据的出现将会给系统带来难以预知的严重后果。虽然一个设计得很好的应用程序不用Cache也可以表现出让人接受的性能,但毫无疑问,一些对读取操作要求比较高的应用程序可以通过Cache获得更高的性能。对于应用程序,Cache通过内存或磁盘保存了数据库中的当前有关数据状态,它是一个存储在本地的数据备份。Cache位于数据库和应用程序之间,从数据库更新数据,并给程序提供数据。
      第四,安全性能的提升。最近比较火热的sql注入技术,对号称安全性良好的B/S模式产生了极大的冲击,黑客高手用简单的sql语句+浏览器就可以对服务器端的db进行破坏。最近看的一篇sql注入入门:http://blog.sina.com.cn/s/blog_5dcf0e570100ch57.html.原理是利用非法嵌套sql语句代码给服务器端程序执行,骗过检验程序。而hql语句加上hibernate自身的安全性为WEB安全注入了重要的一剂强心针。
      最后,就是代码自动生成功能,可以根据db中的表直接生成Ob.java和ObDAO.java文件,set,get基本method,数据库查询的基本method。数据库连接配置的简化。这里属于敏捷开发的范畴,也是框架的基本使命之一。
      期待下一篇吧:hibernate实战入门!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐