• hibernate简介(Session,几种状态,方法······等)


    • 1.Hibernate是什么?

               Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

        对象关系映射简称ORM(Object Relational Mapping),由于我们目前使用的编程语言大都是面向对象的编程,使用的数据库也大多都是关系型数据库,数据得以对象的形式在程序中使用,并且程序中 的有些对象(数据对象)得永久保存在数据库中,故就出现了ORM,说得更通俗点:ORM就是将数据库中的数据和程序中的对象进行互相的转换!

        如今的ORM框架可以说是很丰富的:

      2.Hibernate跟jdbc的关系

             Hibernate封装JDBC,持久化内存中的对象,同步到数据库 .

                 1.关于封装,我得强调两点:

          (1).把尽可能多的东西藏起来.对外提供简捷的接口.

          (2)把所有的属性藏起来

              当然我们,我们如果能够做到单一原则就更好了

              2.关于持久化的概念

               持久化定义:将程序数据在持久状态和瞬时状态间转换的机制。

                 这里讲的是Hibernate的话得讲一下中的几种状态:瞬时状态,持久状态,脱管状态

      1. 瞬时状态(Transient):指一个对象在内存中开辟空间.如 User user=new User();此时user对象就是瞬时状态的.
      2. 持久状态(Persistent):数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。可以以文件,数据库以及xml等形式.
      3. 脱管状态(Detached):当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。  

       这里我想总结一点关于瞬时状态和持久状态:瞬时态就是存在于内存中的,如果电脑关了后,再启动,之前在内存中的对象已经不在了,如果持久状态的话,保存在磁盘上的数据对象,当需要时还是可以加载到内存中,不会因电脑的启动而受到影响!

      3.Session

       Session接口是Hibernate向程序提供操纵数据库的最主要接口,

    • 瞬时状态(Transient):没与session关联
    • 持久状态(Persistent):与session关联,没close
    • 脱管状态(Detached):当session.close后

    4.Session的方法详解

    1.保存 

              svae:立即插入数据库,并且返回主键

              persist:不立即(延迟)插入数据库,无返回值

    2.获取

                 load:加载对象后,对对象的改动不会立即刷新到db,必须flush到db

                           ex: User user=session.load(User.class,2);

                                    user.setName('gt');

                                    user.flush();   (延迟加载)

                 get:加载对象后,对对象的改动立即刷新到db

    3.更新

               update:持久化对象,更新

         saveOrUpdate:包含save()和update()功能,如果传入的参数是临时对象(没有保存过)就调用save()方法;如果传入的参数是游离对象,就调用update()方法

               merge:不会持久化对象,只会把托管对象的修改更新到db

    4.删除

              delete:从数据库中删除与JAVA对象对应的记录

    5.清理

               flush:把缓存同步到db

               clear:清除session的缓存大小(更新批量时,应考虑)

    5.映射关系

        详见博客内单独介绍的文章

  • 相关阅读:
    iOS代码段整理
    Git命令行
    Vue开发系列四- 网络请求库vue-resource的使用
    Vue开发系列三 调试
    Vue开发系列三-打包
    Vue开发系列二 熟悉项目结构
    错误及经验记录
    cocopods sh 项目运行权限问题
    关于添加UITextField添加输入内容判定导致九宫格键盘无法使用问题
    catagory添加属性
  • 原文地址:https://www.cnblogs.com/wql025/p/4822904.html
Copyright © 2020-2023  润新知