Hibernate是目前很流行的一个对象/关系映射(Object/Relation Mapping,ORM)框架,在企业级应用开发中得到了广泛的应用。那么什么是ORM呢?
IT界就是这样,总是喜欢制造一些看似高深莫测的名词出来,把我们忽悠得晕头转向,什么ORM,云计算等等不一而足。好像只有这样才能显示出IT的高贵。不过,这可害惨了初学者,他们可能在心里犯嘀咕:这玩意儿会不会很难啊,我能不能学会啊?简言之,就是对初学者的自信心造成了一定的负面影响。
对于这个问题,我们可以借用毛爷爷的一句经典言论:战略上藐视它,战术上重视它。也就是说,我们要首先树立信心,相信它也不是什么高深莫测的玩意儿,是完全可以学会的。为了达到这个目的,我们就在战术上重视它,认真学习,从而达到学会的战略目标。 任何一项技术都是为了解决某个问题而存在的,而不是为了存在而存在。ORM无非是说:我们目前的主流程序设计语言是面向对象的,我们都喜欢对对象(Object)进行操作;比如一个user对象,它肯定有自己的ID,姓名、年龄和性别等等属性,我们通过user对象对其属性进行操作,显得自然而方便;然而,这个user对象必须被保存到数据库中(即所谓的持久化),才能供以后多次使用;目前主流的数据库都是关系型(Relation)的,此user对象的ID等等属性都是数据库中的某张表的某一行的那几个列;如果我们使用传统的JDBC来访问这些属性的话,不仅繁琐(写过JDBC代码的童鞋们都会懂的)、不直观(我们得自己想象某个列的值是某个对象的某个属性,即我们是对列进行操作而不是对对象进行操作),而且不得不重复编写大量的JDBC代码;这样的后果就是,开发效率低,出错几率大;为了解决这个问题,Hibernate横空出世,借助于它的帮助,我们只需要在对象级别操作对象的属性(是不是很符合人类的自然思维呢?),然后Hibernate自动帮我们把我们对对象的操作反馈到数据库中相应表的相应行中的一个或多个字段上(这其中的JDBC代码和SQL语句它就帮我们自动生成了)。这样一来,我们是不是省了很多事呢?开发效率和质量会由此提升。 现在,你是不是跃跃欲试,想尝试一下Hibernate的这些强大功能呢?笔者开始学习Hibernate的时候,也是这样的。但是笔者所见到的万恶的学习资料在介绍如何编写第一个Hibernate程序的时候,不是要用到Maven,就是要用到ant等等笔者一无所知的东西!这样不是陡增我的学习难度吗?幸好跌跌撞撞一路走来,总算度过了最黑暗的时刻。痛定思痛,为帮助今天的初学者少走一点弯路,能够尽快编写出自己的第一个Hibernate程序以提高自信,达到战略上藐视它的目的,下面就介绍如何用纯手工的方法来编写自己的第一个Hibernate程序(Hibernate 3.6.7 Final,下载地址:http://sourceforge.net/projects/hibernate/files/hibernate3/3.6.7.Final/)。 在这里先申明一下,纯手工编写的目的有三:一是不需要你预先熟悉eclipse等IDE或ant等工具的用法;二是让你明白程序运行的机理,知其然并知其所以然;三是让你知道若使用IDE,它都帮你做了什么,不要因为使用了IDE,就不明白程序是如何运行起来的了。 好了,闲话少说,进入正题。为了编写这个程序,笔者选择使用SQL Server 2008作为我们的数据库服务器,原因是相对于其他DBMS,它是比较简单易用的。一句话,降低难度,尽快写出我们的第一个程序。在这里我们模拟用户管理,假设每个用户都有自己的ID、姓名、年龄和性别这几个属性。我们先在SQL Server中建立数据库mydb,然后建立表users,包括以下几个字段:ID(identity(1,1),即自增字段,从1开始,每次自增1),name(nvarchar(10)),age(int)和gender(nvarchar(1))。接下来,我们用Hibernate写一个程序,往这个表中添加一个用户的信息。为了编写这个程序,笔者在目录E:\DemoPrograms下新建了一个FirstHibernate目录,专门存放本程序涉及到的所有文件。 第一步,我们要写好一个代表用户实体的类,在这里我们写一个User类(User.java)。与数据库中的users表的字段相对应(映射,mapping),我们为User类定义好ID等属性,以及这些属性的setter和getter方法,方便对用户实体的这些属性的操作。代码如下(若定义类时为其声明所在的包,则放置编译后产生的class文件易出错,所以本文中所有的类都没有package声明): public class User { private int id; private String
|