Hibernate——总结

学完了ssh,从Hibernate中提取出了下面一些知识点,分享一下,同时欢迎朋友们帮助补充。

一、 Hibernate概念及功能

        Hibernate是开放源代码的对象/关系映射框架,可以将对象与对象关系映射至关系数据库,而不用手动在数据库中创建表。Hibernate封装了通过JDBC访问数据库的操作,向上层提供了面向对象的访问数据API,是应用程序和数据库之间的桥梁。

       Hibernate是一种轻量级的框架,可以开发各种java应用程序。在基于MVC设计模式的java Web应用中,Hibernate可以作为数据库访问层。

二、Hibernate的核心组件以及运行过程

        hibernate的运行过程(各组件之间的调用关系):应用程序先调用Configuration类,该类负责读取配置文件和映射文件,并将读取的信息生成一个SessionFactory对象,SessionFactory对象生成一个Session对象,Session对象生成Transaction对象。get()、load()、save()、update()等方法均由Session对象提供。

      

       1.  Configuration是Hibernate的一个入口,在新建一个Configuration的实例时,Hibernate会在classPath或WEB-INF/classes目录中查找配置文件。如果存在配置文件,加载其内容,如果不存在,抛异常。

       2. SessionFactory产生Session的实例。

       3. Session用来操作持久化对象,通过get()、 set() 、update() 、save()等方法完成对持久化对象(PO)的操作

       4.  Query用来操作持久化对象的查询操作,可以控制查询如何执行,.list()  .Iterator()

                 Iterator  iter = session.createQuery("from  User").iterate();

                 List  list = session.createQuery("from  User").list();

       5. Transaction使用Hibernate必须显式调用      

       6.  配置文件:配置文件中配置连接数据库的参数,以及指定映射文件

        7. 映射文件:映射持久化对象与数据库表,映射PO之间的关系与表之间的关系,映射PO属性与表字段。每个表对应一个扩展名为.hbm.xml的映射文件。需要掌握映射文件的常用标签元素<class> 、 <id> 、 <property> 、 <generator> 、 <one-to-one>  、 <man-to-one> ,以及一些属性inverse、cascade、lazy等等。

三、持久化对象的状态

   1.  持久化?

                 持久化是指通过将数据保存到能够长久保存的设备中,以达到反复利用的目的,这称为持久化。这里指的是保存到数据库中。

    2.持久化对象

                持久化对象,我理解的就是和数据库表和映射文件对应的javaBean。里面有属性值,有get() 、set()方法。

   3.三种状态

            

              

              

    从图中可以看出,

            load()、get()、find()、iterate()方法返回的对象总是处于持久化状态。

            save()、saveOrUpdate()方法把瞬时状态的对象变成持久化状态。

            delete() 把持久化状态的对象编程瞬时状态。

            close()、evict()、clear()方法把持久化状态的对象变成离线状态。

            update()、saveOrUpdate()、lock()方法把离线状态的对象编程持久化状态。

   

 四、关系映射

        hibernate的映射关系之前的博客中已经讲过了。因为Hibernate的核心功能是完成持久化对象和数据库的映射,所以,Hibernate映射是比较重要的,映射关系通过配置映射文件来完成。

五、查询语句

       Hibernate的数据查询主要有三种方式,HQL(Hibernate Query Language),Criteria Query, Native SQL。其中,HQL的功能要更强大一些,比较常用。HQL与Sql类似,只是Sql针对表中字段进行查询,而HQL针对持久化对象。

六、 优化策略——缓存

       Hibernate的缓存,前面的博客写过了。Hibernate中的缓存分为两层,一级缓存、二级缓存。

       一级缓存同二级缓存的比较:

       1. 生命周期

                   一级缓存通过Session实现,生命周期同Session一样;二级缓存生命周期同SessionFactory一样,查询缓存生命周期同SessionFactory一样。

       2. 缓存的对象

                   一级缓存缓存实体对象,二级缓存缓存指定的实体对象,查询缓存只缓存实体对象的id和普通属性字段

       3. 配置使用(配置步骤在前面的博客中)

                 一级缓存不用配置,也无法禁用,它相当于session的一个map,当执行save()、load()等方法时,数据就会自动存入一级缓存中。

                 二级 缓存需要配置,可以开启和禁用。

                 查询缓存需要配置,可以开启和禁用。

七、主键生成策略

       assigned:自定义主键。例如,我们注册邮箱时,每次申请的用户名就是自定义的主键。

       uuid:是系统产生的一串随机无序字符串,为String类型,

       native:是数据库产生的自增数据,为int类型。

       这里只介绍了三种主键生成策略,其实,具体采用哪种策略,要依据程序需要以及所用数据库来定。参考文章:

http://www.blogjava.net/huxiaowi/archive/2010/07/29/327404.html

      

八、几个重要属性

       inverse:标记由哪一方来维护关联关系。用在双项关联中。inverse设置为true时,表示关联关系由对方完成。

       cascade:级联操作,对一个对象执行了操作之后,对其指定的级联对象也需要执行相同的操作。取值all表示所有情况下都执行级联操作。取值none表示所有情况下都不执行级联操作。取值save-update表示在保存和更新的时候执行级联操作。取值delete时,在删除时执行级联操作。cascade只影响添加、删除和修改操作。

       lazy:延迟加载。只在需要用到的情况下,才发出select语句查询需要的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值