zoukankan      html  css  js  c++  java
  • HibernateReview Day1

    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。

  • 相关阅读:
    《深入理解Android内核设计思想》已陆续在全国各大书店及网上书店上市,感谢大家一直以来的支持~~
    PKUSC2019 D2T2
    Java面试(二)
    Java面试(一)
    MFC学习(七) 单文档程序
    MFC学习(六)计算器
    C++ 面试题(转载)
    MFC学习(五)常见面试题
    MFC学习(四) 消息机制
    MFC学习(三)程序入口和执行流程
  • 原文地址:https://www.cnblogs.com/zifo/p/3390711.html
Copyright © 2011-2022 走看看