• 持久化框架Hibernate 开发实例(一)


    1 Hibernate简介

      Hibernate框架是一个非常流行的持久化框架,其中在web开发中占据了非常重要的地位,

    Hibernate作为Web应用的底层,实现了对数据库操作的封装。HIbernate框架的应用可以

    改变传统JDBC操作数据库的方式。

    1.1 ORM简介

      ORM的全称是Object/Relation Mapping即对象/关系映射。ORM在单独的持久化层,由

    ORM中间件对数据细节访问进行封装。ORM可以通过映射来实现数据操作转换为对象的操作。

    对象指使用的编程语言是面向对象的,而关系则指使用的数据库是关系型数据库。对象/关系映射则

    是指完成面向对象语言到关系型数据库的映射,通过映射后,我们可以先该操作对象一样来操作

    我们的数据库。

    1.2 Hibernate框架的优势

      1.2.1 免费的,开放源代码。

      1.2.2 轻量级开发,实现O/R映射非常简单。

      1.2.3 可扩展性强。

      1.2.4 拥有众多社区支持

      1.2.5 使用XML配置对象-关系映射而不依赖于任何代码,如果需要修改,只需要修改XML配置文件即可。

      1.2.6 可以独立设计域模型和数据模型。

    1.3 Hibernate框架概述

      Hibernate作为ORM映射工具,了解整体架构对了解Hibernate的工作原理和以后学会使用

    将有指导性的作用。

      1.3.1 会话工厂

        会话工厂是对属于单一数据库的编译过的映射文件的线程安全的,不可变的缓存快照。

      1.3.2 会话

        会话是单线程,声明短暂的对象,代表应用程序和持久化层之间的一次对话。封装了

      一个JDBC连接,也是事务的工程。保存有必须(一级)持久化对象缓存,用于遍历对象图,

      或通过表示查找对象。

      1.3.3 持久化对象

        持久化对象是声明周期短暂的单线程对象,把数据库实现做为一个独立的逻辑,包含了持久化

      状态和商业功能。它们可能是普通的JavaBeans/POJOs,唯一特别的是,他们从属于且

      仅从属于一个Session。一旦Session被关闭,他们将从Session中取消联系,可以在任何

      程序中自由使用。

      1.3.4 临时对象

        没有从属于一个Session的持久化类的实例。他们可能是刚被程序实例化。还没有来得及持久化的

      对象,或是被一个已经关闭的Session所实例化的对象。

      1.4.5 事务

        单线程,生命周期短暂的对象,应用程序用它来表示一批不可分割的操作。

      1.4.6 连接提供者(可选)

        略

      1.4.7 事务工厂(可选)

        略

    2 Hibernate的配置和相关类

    2.1 Configuration类

      Configuration类负责管理Hibernate的配置信息,一个Configuration类的实例代表了

    应用程序中Java类到到数据库的映射的集合。应用程序通常只是创建一个Configuration实例,

    并通过它创建SessionFactory实例。例如下面的代码:

     1 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 

      Configuration是Hibernate的入口,在新建 一个Configuration的实例时,Hibernate会在

    类路径中查找文件hibernate.properties和hibernate.cfg.xml,如果这两个文件同时存在,

    则hibernate.cfg.xml将会覆盖hibernate.properties文件,如果两个文件都不存在,将抛出异常。

    2.2 Hibernate 配置文件

      hibernate配置文件是重点,以现在最长用的hibernate.cfg.xml格式的配置文件为例进行说明,

    请参考以下代码。

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6 <session-factory>
     7     <!-- 数据库连接URL -->
     8     <property name="connection.url">
     9         jdbc:mysql://localhost/javaweb
    10     </property>
    11     
    12     <!-- 数据库连接驱动 -->
    13     <property name="connection.driver_class">
    14         com.mysql.jdbc.Driver
    15     </property>
    16     
    17     <!-- 数据库用户名 -->
    18     <property name="connection.username">root</property>
    19     
    20     <!-- 数据库用户密码 -->
    21     <property name="connection.password">123456</property>
    22     
    23     <!-- 数据库方言 -->
    24     <property name="dialect">
    25         org.hibernate.dialect.MySQLDialect
    26     </property>
    27     
    28     <!-- 指定映射文件 -->
    29     <mapping resource="com/javaweb/hibernate/Product.hbm.xml"/>
    30 
    31 </session-factory>
    32 </hibernate-configuration>

     代码解析:数据库方言设置数据库产品的类型,因为我们使用的是MySql数据库,所以这里设置属性值为

    org.hibernate.dialect.MySQLDialect。

    2.3 SessionFactory类

      SessionFactory负责Session实例的创建。为了创建一个SessionFactory对象,必须在

    Hibernate初始化时创建一个Configuration类的实例,并将已写好的映射文件交由它处理。

    这样Configuration对象就可以创建一个SessionFactory对象,当SessionFactory对象创建

    成功后,Configuration对象就没有用了。

    3 Hibernate中的对象

      Hibernate中对象有三种状态,临时对象,持久化对象,脱管对象。

    3.1 三种状态概述

      3.1.1 临时状态

        对象在保进行数据库保存操作之前被称为临时状态,此时的数据库中并没有该对象的任何

      信息及该对象的id信息。在程序退出时江丢失临时状态对象的任何信息。

      3.1.2 持久化状态

        对象在保存到数据库后但并没有脱离Session的时候被称为持久化状态。该状态的

      数据库中已经有了该对象的信息,而且该对象的id为数据库中对应记录的主键值,

      3.1.3 托管状态

        Session关闭之后,与次Session相关联的持久化对象就变为托管对象,

      可以继续对这个对象做修改。托管对象拥有数据库的标识id,所以它可以通过update(),

      saveOrUpdate()等方法,再次与持久层关联。

    3.2 持久化类 

      上面所述的三中对象状态,在变成过程中就体现为持久化类的实例。例如:

     1 package com.javaweb.hibernate;
     2 
     3 public class User {
     4     private String username;
     5     private String password;
     6     
     7     //无参构造函数
     8     public User(){
     9     }
    10     
    11     //自定义构造函数
    12     public User(String username,String password ){
    13         this.username=username;
    14         this.password=password;
    15     }
    16 
    17     public String getUsername() {
    18         return username;
    19     }
    20 
    21     public void setUsername(String username) {
    22         this.username = username;
    23     }
    24 
    25     public String getPassword() {
    26         return password;
    27     }
    28 
    29     public void setPassword(String password) {
    30         this.password = password;
    31     }
    32 }

       

    具体开发代码请参考下一篇文章:《持久化框架Hibernate 开发实例(二)》
  • 相关阅读:
    C# 中对COOKIES的操作
    guruguru
    异或序列
    最优贸易
    farm
    Fruit Ninja
    商务旅行
    Generation I
    Heritage of skywalkert
    Bichrome Tree
  • 原文地址:https://www.cnblogs.com/tdcqma/p/4835748.html
Copyright © 2020-2023  润新知