zoukankan      html  css  js  c++  java
  • 持久化框架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 开发实例(二)》
  • 相关阅读:
    Maximum Depth of Binary Tree
    Single Number
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Remove Element
    Remove Duplicates from Sorted List
    Add Two Numbers
    编译视频直播点播平台EasyDSS数据排序使用Go 语言 slice 类型排序的实现介绍
    RTMP协议视频直播点播平台EasyDSS在Linux系统中以服务启动报错can’t evaluate field RootPath in type*struct排查
    【解决方案】5G时代RTMP推流服务器/互联网直播点播平台EasyDSS实现360°全景摄像机VR直播
  • 原文地址:https://www.cnblogs.com/tdcqma/p/4835748.html
Copyright © 2011-2022 走看看