欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate框架学习笔记_Hibernate入门

程序员文章站 2024-03-23 12:54:10
...
  • 数据持久化的介绍
  • ORM的概念及实现
  • 了解Hibernate的作用
  • Hibernate的体系结构
  • 创建第一个Hibernate的应用

一、持久化介绍

面向对象的开发方法已经成为开发方法中的主流。对象只能保存在内存中,一旦发生断电或其他突然性状况致使计算机不能正常工作时,内存中的数据将会全部丢失。为达到数据永久保存的目的,就必须对数据进行持久化操作。
数据的持久化操作,一般情况下都是将数据“固化”到磁盘中。到目前为止,有三种媒介常用于永久性的保存数据,一是格式化文本文件,而是XML文件,三是数据库系统。
关系型数据库存放的只是关系数据,而非面向对象的数据,对象与关系是业务实体的表现形式,业务实体在内存中表现为对象,而在数据库中则表现为关系数据。内存中的对象之间存在着关联与继承的关系,而在数据库中,关系数据是无法直接表达多对多的关联与继承关系的。

二、持久层技术

持久化是将内存中的数据保存至磁盘中的操作,而持久化层则是软件开发模型领域的一个基本概念。
随着计算机软件技术的发展,应用软件的体系结构也由最初的单层结构向双层、三层甚至多层结构发展。最初的单层结构软件一般采用文件系统来保存数据。
双层软件模型实现了数据层与应用层的分离。其中应用层只负责接收用户输入的数据,然后进行业务逻辑的处理以及将处理后的结果返回给用户等工作。而数据层则只负责数据的持久化操作,保存业务中的持久化数据。双层体系的软件结构模型如图:

Hibernate框架学习笔记_Hibernate入门

三、三层体系结构

三层体系结构的模型分为表示层、业务逻辑层与数据层。实际上是把双层结构中的应用层划分为了表示层与与业务逻辑层。

  • 表示层:提供与用户进行交互(显示与收集数据)的界面
  • 业务逻辑层:用于进行各种业务逻辑的处理,如验证表单数据、保存数据到数据库等操作。
  • 数据层:负责存放和管理应用的持久性业务数据
    三层体系结构的软件模型分离了显示逻辑与业务逻辑,使得程序的可读性大大增加,同时降低了程序开发的复杂度。三层体系结构特别适合用于Web应用程序的开发,也是当前最流行的应用软件结构。
    Hibernate框架学习笔记_Hibernate入门
  • 四、四层式

    四层模式进一步将三层模式中的业务逻辑层分离出一个单独的持久层,进行数据的持久化操作。一般来说,这种开发模式对大型的软件项目非常有用。

  • 表示层:提供与用户进行交互的界面
  • 业务逻辑层:进行软件核心业务逻辑的处理
  • 持久层:用于进行对象的持久化操作
  • 数据层:用于保存持久化数据
  • Hibernate框架学习笔记_Hibernate入门

    图4.1 一般处理持久层的方法

    Hibernate框架学习笔记_Hibernate入门
    图4.2 持久层框架处理模式

    五、ORM简介

    持久层核心概念:ORM Object Relation Mapping(对象关系映射)把对象-对象关系 映射到数据库里面

  • 一种为了解决面向对象与关系数据库存在的不匹配的现象的技术,将java程序中的对象自动持久化到关系数据库中。
  • Object(对象):在业务逻辑层和表示层将各参与的实体进行封装。
  • Relation(关系型数据库),在目前的系统中大多数情况下都是关系型数据库。
  • 对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中变现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
  • 六、流行的ORM中间件产品

    Hibernate框架学习笔记_Hibernate入门

    七、持久层框架能做什么

  • 减少乏味编码(获取数据库连接、执行sql、关闭连接……)
  • 更加面向对象设计,目前的持久层框架,大多已经建立在面向对象的设计思想之上
  • 更好的性能,持久层框架大多提供了优秀的性能优化机制,如内置的数据库连接池支持。
  • 更好的移植性,基于java的跨平台特性,系统可以在不同操作系统之间切换,但由于数据库的差异,可移植性遇到了阻力。
  • 八、Hibernate简介

    Hibernate框架学习笔记_Hibernate入门

  • Hibernate是一个面向java环境的对象/关系数据库映射工具
  • Hibernate不仅仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法。
  • Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中95%的工作。
  • 对于以数据为中心的程序来说,Hibernte可能不是最好的解决方案;在于哪些在基于java的中间层应用中,是Hibernate最有用的应用场合。
  • Hibernate可以帮助开发者消除或者包装那些针对特定厂商的SQL代码,建立数据库平台的应用程序。
  • Hibernare“全面型“的体系结构最大程度上完成了对持久层功能的封装,也使得在开发中所付出的工作量最少。”全面型“的体系结构方案,将应用层从底层的JDB/JTA API中抽象出来,而ate来处理这些细节。
    Hibernate框架学习笔记_Hibernate入门

    图8.1 Hibernate “全面型”体系结构

    九、Hibernate框架的体系构成

    Hibernare运行时涉及组成部分(1):4

  • SessionFactory:针对单个数据库映射关系经过编译后的内存镜像,它是生成Session的工厂
  • Session:表示应用程序与持久层之间交互操作的一个单线程对象,生存期很短,隐藏了JDBC连接,也是Transaction的工厂。其中包含了一个持久化对象的缓存,在遍历对象图或根据持久化标识查找对象时会用到。
  • 持久化对象及其集合:带有持久化状态的、具有业务功能的单线程对象,生存期很短。这些对象可以是普通的JavaBeans/POJO,唯一特殊的是他们仅与一个Session相关联,这个Session被关闭的同时,这些对象也会脱离持久化状态,可以被应用程序的任何层*使用。
  • 瞬态(transient)以及托管(detached)的对象及其集合:持久化类的没有与session相关联的对象实例。他们可能是在被应用程序实例化后(通过new方法获得的对象),尚未进行持久化的对象,也可能是因为实例化他们的session已经被关闭而脱离持久化的对象。
  • 事务Transaction:应用程序用来指定原子操作单元范围的对象,它是单线程的,生存期很短,通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。
  • ConnecttionProvider:生成JDBC连接的工厂,(同时也起到连接池的作用)。它通过抽象将应用从底层的Datasource或DirverManager隔离开
  • TransactionFactory:生成Transaction对象实例的工厂。
  • 十、应用实例

    Hibernate框架学习笔记_Hibernate入门

    图10.1 jar包

    10.1、建立JavaBean

    public class User{
        private String name;
        private Sting pwd;
    
    }

    10.2、建立实体映射文件

    User.hbm.xml
    Hibernate框架学习笔记_Hibernate入门

    10.3、配置hibernate.cfg.xml

    Hibernate框架学习笔记_Hibernate入门

    10.4、建立HibernateUtils类

    Hibernate框架学习笔记_Hibernate入门

    public class HibernateUtil {
        static SessionFactory sessionFactory;
        static{
            Configuration con=new Configuration();
            con.configure();
            sessionFactory=con.buildSessionFactory();       
        }
        public static Session getSession(){
            return sessionFactory.openSession();
        }
    
    }
    

    10.5、管理持久化对象

    保存

    public saveUser(User user){
    //获取session用于数据库操作
    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTrasaction();
    session.save(user);
    tx.commit();
    }

    删除

    public deleteUser(User user){
    //获取session用于数据库操作
    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTrasaction();
    session.delete(user);
    tx.commit();
    }

     查询列表(使用hql)

    public List getAllUserList(){
    //获取session用于数据库操作
    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTrasaction();
    
    //获取Query对象
    String hql = "form User";
    Query query = session.createQuery(hql);
    
    //执行Query
    List result = query.list();
    tx.commit();
    return result;
    }

    总结:
    ORM简介
    Hibernate简介
    Hibernate的组成部分
    开发第一个Hibernate应用程序

    相关标签: Hibernate入门