Hibernate 的学习小结

首先让我以下面几个问题来总结性的谈谈Hibernate。
Hibernate 是什么?
Hibernate在英意中表达的是“冬眠,潜伏不动”之意,到J2EE这块领域对它的解释是:ORM持久层框架,是对JDBC封装的框架。(ORM——Object/Relational Mapper 对象关系型数据映射)
那具体来说什么又是持久层呢?所谓持久层是指专注于实现数据持久化的一个相对独立的领域!下图是对系统架构整体分层的结构图(图一),持久层其代表的是某个特定系统中的一个逻辑层次,这个层次将数据使用者与数据实体相关联。                         
上层应用结构
持久层
Data Access Logic
Transaction Layer
Database
Hibernate 具体是干什么的呢?
Hibernate简化了数据库应用程序的数据库操作。它以一种近乎完美的方式封装了繁琐的SQL查询语句,使数据库访问变得灵活而简结。它将数据库访问的方式、驱动配置等信息放到XML配置文件或是properties资源文件中,并提供了各种数据库“方言”来配合各种不同数据库的操作,这大大增加了可移植性。由此带来的是数据库应用程序的易编写,易配置,易维护。
理论上的知识总是要通过实践才能更清楚的得以认识充分,我在学习hibernate的过程中也是采用这种边实践边看书理解的方式;下面就以一简单例子来讲述自己在学习中是什么体会关于:Hibernate的配置,Hibernate的具体开发过程,Hibernate在开发工具中的体现等具体问题的!
a. Eclipse+Tomcat+Lomboz+Hibernate3.0.1的插件;
b. Myeclipse+ Eclipse+ Hibernate3.0.1的插件;
在实际开发中我是选用前者,而不是选用后者;前者的配置是比较麻烦,而且其开发界面也没有后者那么的友好;但是从企业角度来考虑,后者的工具使用是需要注册码的,这就无疑给企业的长远利益带来不良的影响;其实在第一种选择方案中,只要将其插件配置完备,其开发性能与工具的使用并没有多大的区别。
安装的过程相对比较简单,只是一个解压与复制粘贴的过程,但是要 注意:每次安装完插件要在Eclipse的安装目录下: eclipse/configuration/,应该把名称为org.eclipse.update的文件夹删掉,这样在打开Eclipse的时候就会识别出你新安装的插件,不会保留原来的插件配置。关于插件的位置以及有关工具附在后页中。的是
Hibernate 的配置:
在开始说其配置之前,先要将项目所需的库文件导入项目中;在此新建一JAVA项目,名为test,将test所需的库文件(hibernate包和数据库驱动包)导入其中;具体做法可以参见Eclipse建立用户包的过程。导入进项目的包之后,就是搭建项目的框架,具体就是新建文件夹web/WEB-INF/classes和web/WEB-INF/lib框架如图:
可以将 刚才hibernate包和数据库驱动包中的文件都放入项目的lib文件夹下面,这样会为以后项目的可移植性打下一个小基础。
   现在开始引入主角了,关于hibernate的配置,在Hibernate配置文件中包括哪些内容呢?其实和一般的配置文件有许多相近之处,里面包括数据库的配置信息:数据库驱动程序,URL,用户名,密码等资料;其中也有一些特别之处,那就是配置文件中包括映射文件等信息,具体看看如下文件内容:
……
<hibernate-configuration>
    <session-factory name="sessionFactory">
        <property name="hibernate.connection.url">jdbc:mysql://localhost/testdb
             </property>//数据库 URL指定
     <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver
        </property>//数据库驱动
        <property name="hibernate.connection.username">root</property>//用户名
        <property name="hibernate.connection.password">111111</property>//密码
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect//特定数据库标识
        </property>
//是否将运行期生成的SQL输出到日志以供调试
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.transaction.factory_class">
            org.hibernate.transaction.JDBCTransactionFactory
        </property>//事务管理类型,这里我们使用JDBC Transaction
        <mapping resource="User.hbm" />//映射文件
        </session-factory>
</hibernate-configuration>
……
在Eclipse中装入那些插件之后,可以直接生成hibernate.cfg.xml文件,当然要自己输入配置信息。 注意:在直接生成的hibernate.cfg.xml文件中,有时会出现org..hibernate.transaction.JDBCTransactionFactory有两个小点的错误或者是没有XML头文件信息
Hibernate 映射文件
在开始Hibernate映射文件说明之前,先要在数据库中存在数据表,要不是对谁的映射呢;在此顺便可以引入在Hibernate中有关ORM的理解,ORM就是对象关系映射;这里的“关系”指的是“关系型数据库”中的关系,也就是一张表;ORM的映射机制是将数据库中的表和面向对象语言中的对象建立了映射。在数据库testdb中建有一张表user,其中的属性有userid,int,Key;userName,varchar(50);userPassword varchar(16);“关系”有了,那对应的“对象”也自然少不了,在此可以用一个简单的Java类(Plain Ordinary Java Object,POJO 可以理解为一个不包含逻辑代码的值对象),也就是我们平常所说的最简单的JAVA BEAN,如下面的这个类:
public class User {
       //primary key
       private java.lang.Integer id;
       // fields
       private java.lang.String userName;
       private java.lang.String userPassword;
……
……
   // 各属性对应的get和set方法。
}
对象与关系的建立之后,那是怎样可以让它们之间发生必然的联系了,这个时候Hibernate中提供的映射文件,就可以将关系与对象联系起来;这种联系的意义在于上层业务逻辑可以不管数据库中的关系,而直接针对POJO类来进行操作,也就是对对象进行相应的业务操作;这种方式的建立也脱离了我们在原来开发过程中的有直接对数据库进行操作(即纯JDBC方面的操作),更能体现MVC的框架与层次结构。那Hibernate提供的映射文件到底是什么样的呢,如下面代码:
……//文件头省略
<hibernate-mapping package="common">
//映射对象所在的包
    <class name="User" table="user" >
//映射类名,与数据库表名对应
       <id name="Id" type="integer" column="UserID" >
           <generator class="native"/>
       </id>
//映射表的属性, id表示主键的映射,name表示在对应的类中其属性的名称,其中type为类//弄是指hibernate内部定义的数据类型。Column表示在表中的字段名。generator主键产 //生器其对应属性的意义可以参见附页(二)
    <property   name="UserName" column="UserName" type="string"
            not-null="false" length="50" />
<property    name="UserPassword" column="UserPassword"   type="string" not-null="false" length="50"/>
//以上是表中其他相关属性与类中对应的关系。
    </class>   
</hibernate-mapping>
映射文件又是什么样产生的呢?在没有使用 Eclipse之前,我用的是Ant+ Middlegen-Hibernate工具来生成,其具体配置可以参见《 hibernate开发指南》;在此讲讲在Eclipse中是什么样使用的,用Eclipse工具生成映射文件之前要先在数据库中有相应的数据表,再建一Hibernate Mapping Files文件,其中有相应配置的说明,直接点下一步即可。其中要 注意的是:在生成 Hibernate Mapping Files文件之后可以立即生成其对应的POJO类以及DAO类。为了防止系统生成很多无用的文件,可以不让其生成这些对应的POJO类以及DAO类,而只生成需要的映射文件;其它的文件可以自己写。
另外在写完映射文件之后别忘了在配置文件中加一行:<mapping resource="User.hbm" />
 
上面的工作已经可以体现 Hibernate的重要思想,那么具体是怎样利用的呢。先看下面的编写的类:
……引入的 hibernate包文件略
 public class UserDAO {
    private Session session;//该 session不同于Http中的session ,其是Hibernate
//内部独有的    
    public UserDAO(){
        Configuration config = new Configuration().configure();
        SessionFactory sessionFactory = config.buildSessionFactory();//读取 hibernate配置文件的信息。构造一session工厂,
        session = sessionFactory.openSession(); //创建 session  
    }
    public List getUserList(){     
        return (List)session.createCriteria(User.class).list();//通过类直接取
//出数据库中与之相对应的关系,并以记录返回!
    }  
……其它的方法略    
}
上面的 DAO(DAO Data Access Object 数据访问与业务逻辑)类中使用了Hibernate独有的sessionFactory 和 session,通过sessionFactory可以得到很多的session,通过session可以让对象与数据库建立访问连接,同时session自身有很多方法可以直接进行对象的操作。
Session是持久层操作的基础,相当于JDBC中的Connection。Session实例通过SessionFactory;Session是Hibernate运作的灵魂,作为贯穿Hibernate应用的关键,Session中包含了数据库操作相关的状态信息。如对JDBC Connection 的维护,数据实体的状态维持等。对Session 进行有效管理的意义,类似JDBC 程序设计中对于JDBC Connection 的调度管理。有效的Session管理机制,是Hibernate应用设计的关键。大多数情况下,Session 管理的目标聚焦于通过合理的设计,避免Session 的频繁创建和销毁,从而避免大量的内存开销和频繁的JVM垃圾回收,保证系统高效平滑运行。
SessionFactory负责创建Session,SessionFactory是线程安全的,多个并发线程可以同时访问一个SessionFactory 并从中获取Session 实例。而Session并非线程安全,也就是说,如果多个线程同时使用一个Session实例进行数据存取,则将会导致Session 数据存取逻辑混乱。
更多 session相关内容可以在《Hibernate 开发指南》中的session管理章节中找到。在应用中由于SessionFactory是‘重量级’的所以尽量在项目中少创建;而对于 session的使用应该尽量小心。
 
在做 JSP开发的时候可以先将编写的方法进行测试之后再与页面之间建立联系。下现的代码只有部分:其调试程序相对来说简单再此不多说了!
……
        UserDAO userDAO = new UserDAO();
        List userList = userDAO.getUserList();     
        for (Iterator iter = userList.iterator(); iter.hasNext();) {
            User element = (User) iter.next();
            System.out.println("UserName: " + element.getUserName());
            System.out.println("UserName: " + element.getUserPassword());
    }
……
   回顾上面所做的操作可以归纳为下面几个步骤:
1. Hibernate开发环境的配置
2. Hibernate针对具体项目的基本工作
3. 项目中 Hibernate配置文件的书写
4. Hibernate映射文件的写法与 POJO类的实现
5. 针对应用的业务逻辑( DAO类的)编写
6. 调试并实现。
学习的过程还在进行,相信有这些基础知识方面的认识,在学习 Hibernate高级特性及其它相关知识也比较简单了!由于时间的原因在整理过程中也有很多疏忽的地方,以后再将其补充得更完整。
 
 
1、Java  
下载地址: http://dlc.sun.com/jdk/j2sdk-1_4_2_07-windows-i586-p.exe;
2、Tomcat  这里的tomcat的版本是5.0的,安装版或是解压版都是可以的。
 下载地址: http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.0.28/bin/jakarta-t omcat-5.0.28.exe
3、Tomcat插件  tomcatPluginV3.zip(下载之前需要查看插件是否适合eclipse的版本)
  下载地址: http://www.sysdeo.com/eclipse/tomcatPluginV3.zip
4、Eclipse 开发IDE eclipse-SDK-3.0.1-win32.zip
下载地址: http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/R-3.0.1 -200409161125/download.php?dropFile=eclipse-SDK-3.0.1-win32.zip 语言包 NLpack-eclipse-SDK-3.0.x-win32.zip
下载地址: http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/L-3.0.1 _Translations-200409161125/NLpack-eclipse-SDK-3.0.x-win32.zip
5、lomboz插件 lomboz插件需要下载两个部分,一个是emf环境,另一个是lomboz插件
  下载地址:http://eclipse.mirrors.tds.net/tools/emf/downloads/drops/2.0.1/R20040917 1617/emf-sdo-runtime-2.0.1.zip
6、hibernate lib
     下载地址:http://www.chinaitlab.com/www/techspecial/hibernate/
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值