hibernate入门知识详解

本文详细介绍了Hibernate ORM框架的基础知识,包括概述、搭建应用开发环境、创建第一个Hibernate应用程序的步骤,以及配置和加载存储对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate的入门知识

一,hibernate概述

Hibernate 是由JBoss公司著名构架师Gavin King设计,开发的一个开源ORM框架,可以从不同的角度解析Hibernate。

1.     它是连接java应用程序和关系数据库的中间件

2.     它对JDBC  API进行了封装,负责Java对象的持久化

3.     在分层的软件架构中它位于持久化层,封装了所有数据访问细节,使业务逻辑层专注于实现业务逻辑。

4.     它是一种ORM工具,能够建立面向对象的域模型和关系模型的映射。

二.搭建Hibernate应用开发环境

       1)下载和安装配置

           第一步:下载。登录到Hibernate官方网站http://www.hibernate.org/6.html,下载

              第二步:解压获取必需类库文件。解压缩丛Hibernate网站下载的hibernate发布包,在根目录下有Hibernate3.jar文件,该文件就是Hibernate Core的核心类库文件,把它添加到Hibernate应程序中,在根目录lib/required目录下的所有jar文件都是Hibernate3核心类库文件编译和运行所必须的第三方类库文件,也添加到Hibernate应用程序中。如图所示所需的包

 

三.第一个Hibernate应用程序

              我们所做的第一件事就是创建我们的开发目录,并把所需要的java库文件放进去。解压缩丛Hibernate网站下载的Hibernate发布包,并把/lib目录下所有需要的库文件拷到我们新建的开发目录下的/lib目录下。

1)         第一个class

我们的第一个持久化类是一个带有一些属性(property)的简单

1.JavaBean类:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


你可以看到这个类对属性的存取方法(getter and setter method)使用了标准JavaBean命名约定。同时把类属性的访问级别设为私有的(private),这是推荐的设计,但并不是必须的。Hibernate也可以直接访问这些属性,而使用访问方法的好处是提供了重构时的健壮,为了通过反射机制来实例化这个类的对象,我们需要提供一个无参的构造器。

   所有的持久化类都要求有无参的构造器,因为Hibernate必须使用java反射机制来为你创建对象。构造器的访问级别可以是Private,然而当生成运行时代理时这则要求使用至少package级别的访问控制,这样在没有字节码的指令的情况下,从持久化类里获取数据会更有效率

2.映射文件:

              Hibernate需要知道怎样去加载和存储持久化的对象。这正是hibernate映射文件发挥作用的地方,映射文件告诉Hibernate,应该访问数据库里面的哪一个表及应该使用表里面的那些字段。

       一起看一下映射文件的基本结构:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

[....]

</hibernate-mapping>

 
      

 

 

 

 

 

在hibernate-mapping标签之间,含有一个class元素,所有的持久化实体类(再次声明,或许接下来会有依赖类,就是那些次要实体)都需要一个这样的映射,来把类对象映射到sql数据库里的表

User类对应的映射文件

<hibernate-mapping

   package="com.hbsi.domain">--指定java实体类的包名

 

   <class name="User" table="user">---说明实体类怎样映射成表

      <id name="id" column="id">--column可省略

        <generator class="native"/>--声明主键

      </id>

      <property name="name"/>

      <property name="brithday"/>

   </class>

 

 

 
 

 

 

 

 

 

 

 

 


               id元素标识符属性的声明,name=”id”声明了java属性的名字(hibernate会使用getId()和SetId()来访为它),column属性则告诉Hibernate,我们使用User表的哪一个字段作为主键,嵌套的generator元素指定了标识符生成策略,在这里我们指定为native。它根据已配置的数据库自动选择最佳的标识符生成策略。

               和id元素一样,property元素的name属性告诉hibernate使用哪个getter和setter方法,在此类之中会寻找getName(),getBrithday()

3.Hibernate配置

       现在我们已经有了一个持久化类和它的映射文件,该是配置Hibernate的时候了。为了保存Hibernate的配置,我们可以使用一个简单的Hibernate.properties文件,或者一个稍微复杂的Hibernate.cfg.xml。

 

 

 

<!DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

 

<hibernate-configuration>

    <session-factory>

       <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

       <property name="connection.url">jdbc:mysql:///demo</property>

      

       <property name="connection.username">root</property>

       <property name="connection.password">123</property>

       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

       <property name="hibernate.hbm2ddl.auto">create</property>

       <property name="hibernate.show_sql">true</property>

   

      

       <mapping resource="com/hbsi/domain/User.hbm.xml"/>

      

    </session-factory>

</hibernate-configuration>

 
 

 

 

 

 

 

 


最开始的四个Property元素包含JDBC链接信息。方言(dialect)的property元素指明Hibernate生成的特定SQL变量。

把这个文件拷贝到源代码目录下面,这样他就位于classpath的根目录的最后。Hibernate在启动时会在classpath的根目录查找名为hibernate.cfg.xml的配置文件。

Hibernate.show-sql:指定是否把hibernate运行时的sql语句输出到控制台。

Hibernate.format_sql:指定是否把hibernate运行时的sql语进行格式化以便于阅读。

Hibernate.Hbm2ddl.auto:指定应用程序在运行时,当产生SessionFactory实例时对是否自动检查数据库结构,可选值有:vaildate(检查数据库结构),update(数据库结构发生变化是修改),create(将数据库的DDL导出到数据库)和crete-drop(SessionFactory实例创建时将数据库schema的DDL导入到数据库,在sessionFactory被显示关闭时将数据库自动删除)

启动和辅助类

 是时候加载和储存一些Event对象了,但首先我们得编写一些基础的代码以完成设置。此过程包括创建一个全局sessionFactory,并把它储存在应用程序代码容易访问的地方。SessionFactory可以创建打开新的session,一个session代表一个单线程的单元操作,sessionFactory则是一个线程安全的全局对象,只需要被实例化一次。

     我们将创建一个HibernateUtil辅助类来负责启动Hibernate和更方便的操作SessionFactory,让我们来看一下他的实现吧!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


把HibernateUtil.java 放在开发目录的源代码路径下,与方User的包并列。

4.加载并存储对象

我们终于可以使用Hibernate来加载和存储对象了,编写一个带有main()方法的TestHibernate类

public class TestHibernate {

public static void main(String[] args) {

User user=new User();

         user.setName("Tom");

         user.setBrithday(new Date());

         addUser(user);

         }

         public static void addUser1(User user){

                   Session session=null;

                   Transaction tx=null;

                   try{

                            session=HibernateUtil.getSession();

                            tx=session.beginTransaction();

session.save(user);

                           

                            tx.commit();

                           

                   }finally{

                           

                            if(session!=null)

                                     session.close();

                   }

         }

        

}

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 


我们创建了个新的User对象并把它传递给Hibernate。现在Hibernate负责与SQL打交道并把INSERT命令传给数据库。在运行之前,让那个我们来看一下处理session和Transaction的代码。

      首先,只要你持有SessionFactory(幸亏我们有HIbernateUtil,可以随时获取得到),大可在任何时候,任何地点调用这个方法

   其次,session在第一次被使用的时候,其生命周期就开始。然后它被Hibernate绑定到当前线程。当事务结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前线程剥离,并且关闭它。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值