【IT168 专稿】
Hibernate作为当今最为流行的框架技术之一,提供了非常好的数据持久层解决方案,将对象和数据库表之间建立起一个映射关系,程序员可以按照Java的基本语义进行持久层开发,方便的使用对象编程的思想操作数据库,把大部分精力集中在业务层的开发上。但是,在Hibernate直接调用JDBC访问数据库是非常复杂和浪费时间的,如何简单、高效的实现数据库访问层就变得尤为重要了。而Myeclipse的出现,就能实现Hibernate快速数据库访问。
本文我先简单介绍一下Myeclipse插件和Hibernate框架,然后介绍快速实现Hibernate快速数据库访问的原理,最后给出实例说明原理。
一、Myeclipse插件和Hibernate框架简介
MyEclipse是一个专门为Eclipse设计的商业插件和开源插件的完美集合。MyEclipse为Eclipse提供了一个大量私有和开源的Java工具的集合,很大程度上解决了各种开源工具的不一致和缺点问题,并大大提高了Java和JSP应用开发的效率。MyEclipse的实际价值来自其发布的大量的可视化开发工具和实用组件。如CCS/JS/HTML/XML的编辑器,帮助创建EJB和Struts项目的向导并产生项目的所有主要的组件如Action/Session Bean/Form等,此外还包含编辑Hibernate配置文件和执行SQL语句的工具。MyEclipse的开发者是Genuitec。MyEclipse的官方网站为http://www.myeclipseide.com。总之,Myeclipse插件功能十分完善,具备了完备的编码、调试、测试和发布等功能,并且完整支持HTML、Struts、JSF、CSS、JSP、SQL、Hibernate、Spring 等技术。
Hibernate是一个免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)。为了方便企业应用与数据库之间的频繁交互,开发人员在两者之间设计了一个“持久层”,它是专注于实现数据库持久化的一个相对独立的领域。作为一个持久层框架实现,Hibernate对JDBC 进行了轻量级的对象封装,提供了强大而高效的对象到关系型数据库的持久化服务。利用Hibernate,我们可以按照Java 的基本语义进行持久层开发,随心所欲地使用对象编程的思想操作数据库,把大部分精力集中在业务层次上,完全抛开一些冗长无味的代码编写工作。同时,Hibernate也提供了面向对象的查询语言HQL,在POJO 和关系型数据库之间构建了一条快速、高效、便捷的沟通渠道。Hibernate 技术实质上是一个为企业应用提供各种数据库服务的中间件。企业应用通过Hibernate 与数据库联系,对数据进行操作。而Hibernate 通过properties 文件和xml mapping 文件将POJO类映射到数据库表的对应行,从而,企业应用可以通过持久化的对象类直接访问数据库,而不必使用JDBC 和SQL 连接数据库和操作数据。这样一来,对数据的操作变得跟操作对象一样简单。例如,使用Hibernate 的查询,可以直接返回包含某个值对象的列表,而不必像传统的JDBC访问方式一样把结果集的数据逐个装载到值对象中,大大简化了开发工作。
二、Myeclipse插件实现Hibernate快速数据库访问的原理
Myeclipse 提供了对Hibernate 很好的支持,它使得Hibernate 的实现极其简单,大部分基础代码都可以由它帮你完成,极大地提高了开发效率。Hibernate 基础代码包括POJO 类和Hibernate 映射文件。以往,在最原始的配置文件编写方式——手工编写时,从业务逻辑出发,我们不但需要考虑到实体类以及数据库表的对应关系,还要遵循Hibernate 的相关规范,一行一行地编写,难免顾此失彼,既耗时也容易出错。此时,应用Hibernate 至少在代码编写上较之传统的数据库访问方式并没有显著改善。Myeclipse 的出现改变了这种情况,它帮我们完成了大部分烦琐重复的工作。虽然现在这类工具很多,但无疑它的功能是最完备的。现在,通过Myeclipse,我们可以根据数据库表结构轻松地导出对应的映射文件和POJO 类。这样操作极大地减少了编码的工作量并且在最大程度上保证了映射文件、POJO 类与实际数据库结构的一致性、同步性,提高了编码的质量,而且不容易出错,是目前国外非常流行的开发方式之一。
我们需要安装了Myeclipse 插件的Eclipse 3.0 开发环境、Mysql 数据库,以及相应的JDBC 驱动程序。
(1)创建一个示例数据库
这个示例数据库非常简单,仅有一张表格,表格名:t_employee,它包含两个字段:递增主键“id”和用户名“name”。
(2)创建Hibernate 配置文件
启动Myeclipse,新建一个Java Project,利用Myeclipse 添加“Hibernate capabilities”,这时,Myeclipse 会把使用Hibernate时所需的各个库添加进来,并生成hibernate.cfg.xml,它是Hibernate的配置文件,主要用于配置数据库连接以及其它各种属性。
现在,我们所要做的只是输入一些数据库连接的属性并且将JDBC 驱动包添加进来,Myeclipse 会自动帮我们生成这个文件,不需要我们手工编写。
<hibernate-configuration> <session-factory> <propertyname="myeclipse.connection.profile">hitt_mysql </property> <property name="connection.url">jdbc:mysql://localhost:3306/ test</property> <property name="connection.username">root</property> <property name="connection.password">admin</property> <property name="connection.driver_class">com.mysql. jdbc. Driver</property> <property name="dialect">org.hibernate.dialect.MySQL Dialect</ property><mapping resource="TEmployee.hbm.xml"/> </session-factory> </hibernate-configuration>
(3)创建POJO 类和Hibernate 映射文件
打开Myeclipse Database Explorer,找到我们的表t_employee。Myeclipse 可以根据选择的表的结构,自动完成对象类到数据库的映射,避免了手工编写的缺陷。这里,项目中生成了TEmployee.java 和Temployee.hbm.xml,前者是数据库表对应的POJO 类,后者则是两者之间的映射关系文件,这些也都是由Myeclipse 帮我们写好的,不需要花费太大精力。
TEmployee.java 文件:
public class TEmployee extends AbstractTEmployee implements Serializable{ public TEmployee(){ } public TEmployee(java.lang.Integer id){ super(id); } } Temployee.hbm.xml 文件: <hibernate-mapping> <class name="TEmployee" table="t_employee"> <id name="id" column="id" type="integer"> <generator class="native"/> </id> <property name="name" column="name" type="string" not-null="true" /> </class> </hibernate-mapping>
(4)持久化对象的操作
上面的步骤已经完成了Hibernate 的基础代码和配置文件的编写,还需要编写一个简单的持久化代码来测试这个实例。这里,我们以插入一个名为“Doudy”的记录为例。
Configuration config=new Configuration().configure(); SessionFactory sessionFactory=config.buildSessionFactory(); session=(sessionFactory).openSession();
这里利用默认的配置文件hibernate.cfg.xml 创建且初始化了Configuration 实例,完成了与数据库的连接,并得到了Session实例,通过它就可以完成对象持久化操作。
tran=session.beginTransaction(); TEmployee employee=new TEmployee(); employee.setName("Doudy"); session.save(employee); session.flush(); tran.commit(); Assert.assertEquals(employee.getId().intValue()>0,true);
这样我们就把TEmployee 对象实例保存到数据库中,即在数据库表中添加了一条“Doudy”的记录。
Hibernate 的持久化服务,让开发人员得以把大部分精力用在业务逻辑的实现上,而无须为数据库的连接一筹莫展,让操作数据像操作对象一样方便,可以更好地运用面向对象的思想开发;Myeclipse作为一个优秀的集成开发环境,进一步简化了Hibernate 的持久化实现,自动生成大部分的基础代码,使我们真正从烦琐的代码编写中解放出来。现在,我们所要做的重点仅仅是考虑数据库表的构建、业务逻辑实现等核心内容,无论是开发效率或是项目质量都获得了显著的提高。