HibernateReview Day1 - Introduction

Hibernate已经学过去大概有半个月了,然后默默的忘掉了……所谓Practice makes perfect. 我尽力重新拾起来。

 

1.什么是ORM

 

在介绍Hibernate之前,我们先学习下ORM。

ORM全名是Object/Relation Mapping,即对象/关系数据库映射。ORM是一种规范,顾名思义,它描述了这一类框架的基本特征:完成面向对象编程语言到关系型数据库的映射关系。

 

对于用类似Java的语言进行应用开发的时候,我们从项目已开始就进行的是面向对象分析、设计和编程,但是当进行持久化数据库访问的时候,我们又必须又用到关系型数据库的访问方式。ORM此时,就拯救程序员于水火,它把关系型数据库包装成面向对象的模型。当我们应用ORM框架时,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象。

 

应用程序-------CRUD----->持久化对象(ORM工具)<-----相互映射------> 关系数据库

 

而Hibernate就是比较流行的ORM框架之一。

 

2.什么是Hibernate

 

Hibernate是一个面向Java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构当中,将开发者从繁重的数据持久化任务释放出来(当然,不是百分百)。

 

Hibernate不仅管理Java类到数据库的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法(如HQL),可以大幅度减少开发人员使用SQL和JDBC处理数据的时间。

 

Tips:POJO:Plain Ordinary Java Objects,普通Java对象,即普通JavaBeans;

PO:Persistent Object,持久化对象。

 

3. Hibernate的数据库操作

 

上文中提到ORM中一个重要的工具:PO。PO用来完成持久化操作,即以面向对象的方式操作关系型数据库。Hibernate中的PO完全可以用POJO来做为持久化对象使用。所以Hibernate又被称为低侵入式设计,即Hibernate不要求持久化继承人和父类,或者实现任何接口,这样可以保证代码不被污染。

public class News{

    //新闻类的标识属性

    private int id;

    //新闻标题

    private String title;

    //新闻内容

    private String content;



    //setters and getters

    ...

}

这个普通的JavaBean目前还不具备持久化操作的能力,为了使其具备持久化能力,还需要配置News.hbm.xml文件。

<?xml version="1.0" encoding="gb2312"?>

<!-- 指定Hiberante3映射文件的DTD信息 -->

<!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>

    <!-- 每个class元素对应一个持久化对象 -->

    <class name="News" table="news">

        <!-- id元素定义持久化类的标识属性 -->

        <id name="id">

            <!-- 指定主键生成策略 -->

            <generator class="identity"/>

        </id>

        <!-- property元素定义常规属性 -->

        <property name="title"/>

        <property name="content"/>

    </class>

</hibernate-mapping>

主键生成策略详见>>>《Hibernate主键生成策略》

到此,我们可以看到,PO=POJO + XML映射文件。

接下来,要配置hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>

<!-- 指定Hibernate配置文件的DTD信息 -->

<!DOCTYPE hibernate-configuration PUBLIC

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

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- hibernate- configuration是连接配置文件的根元素 -->

<hibernate-configuration>

    <session-factory>

        <!-- 指定数据库方言 -->

        <property name="dialect">

            org.hibernate.dialect.OracleDialect

        </property>

        <!-- 指定连接数据库的url,hibernate连接的数据库名 -->

        <property name="connection.url">

            jdbc:oracle:thin:@localhost:1521:orcl

        </property>

        <!-- 指定连接数据库的用户名 -->

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

        <!-- 指定连接数据库的密码 -->

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

        <!-- 指定连接数据库所用的驱动 -->

        <property name="connection.driver_class">

            oracle.jdbc.OracleDriver

        </property>

        <!-- 数据库实例名称 -->

        <property name="myeclipse.connection.profile">orcl</property>

        <!-- 罗列所有的映射文件 -->

        <mapping resource="com/zf/entity/News.hbm.xml" />



    </session-factory>



</hibernate-configuration>

最后一步,完成消息插入的代码:

public class NewsManager

{

    public static void main(String[] args)

        throws Exception

    {

       //实例化Configuration,

        Configuration conf = new Configuration()

       //下面方法默认加载hibernate.cfg.xml文件

            .configure();

       //以Configuration创建SessionFactory

       SessionFactory sf = conf.buildSessionFactory();

       //创建Session

       Session sess = sf.openSession();

       //开始事务

        Transaction tx = sess.beginTransaction();

       //创建消息实例

        News news = new News();

       //设置消息标题和消息内容

        news.setTitle("这里是新闻标题");

       news.setContent("这里是新闻的正文。"

            + "欢迎来这里交流http://www.cnblogs.com/zifo");

       //保存消息

        sess.save(news);

       //提交事务

        tx.commit();

       //关闭Session

       sess.close();

       sf.close();

    }

}

 

这就完成了一个简单的Hibernate消息插入的例子。

总结起来,为了使Hibernate进行持久化操作,通常有如下步骤:

1)开发持久化类,由POJO和映射文件组成。

2)获取Configuration。

3)获取SessionFactory。

4)获取Session,打开事务。

5)用面向对象的方式操作数据库。

6)关闭事务,关闭Session。

你可能感兴趣的:(Hibernate)