• hibernate知识点理解


    1.只有业务逻辑层出现的问题?
        1.切换数据库麻烦
        2.sql编写起来麻烦
        3.我们的程序员不需要关注数据库,只希望关心业务本身
       
    2.hibernate的好处
        1.程序员只关心业务逻辑,使角色更加清楚
        2.分层更清楚
        3.通用修改更强,适合数据库平台的切换
        4.对象化,数据库关系变成java对象关系,更加方便操作
        5.性能保证,hiernate可能按照不同的数据库操作,但是会最优sql语句
        6.增加程序的鲁棒性。
       
    3.hibernate开放的三种方式
        1.有Domain object >> mapping >> db(官方推荐)
        2.有DB开始,用工具生成mapping和Domain object。(项目中大部分使用这种,先设计数据库,在建类)
        3.由映射文件开始
       
    4.POJO(plain old/ordinary java object简单的java对象)
        1.使用POJO名称主要是为了EJB混淆起来
        2.有一个主键,用于唯一标识
        3.有其他的属性
        4.有对应的get/set方法
        5.属性一般用private修饰
        6.一定有一个无参的构造函数
       
    5.对hibernate而言,在进行更新,删除,查询数据时必须用事务,增加的时候可以不用

    6.session.load(Employee.class,id)
        1.反射机制
       
    7.hibernate要求domain中的类必须实例化
        1.如果不实例化,操作的时候将不知道操作的是那条记录,序列化可以唯一的标识该对象
        2.可以在网上传输和文件传输
       
    8.hibernate中重要的类和接口
        1.Configuration类:Configuration conf = new Configuration().configure();
        2.SessionFactory接口:SessionFactory sf = cfg.buildSessionFaction();现在
            ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                    .applySettings(configuration.getProperties())
                    .buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        3.Session接口:
            1.Session接口是Hibernate应用使用最广泛的接口。Session也被称为持久化管理器,
                它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。
            2.不是线程安全的,因此在设计软件架构时,应避免多个线程共享一个Session实例。
            3.Session是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。
                Session对象通过SessionFactory构建:
            4.Session session = SessionFactory.openSession();
           
    9.对持久化类的理解:
        一个持久化类从定义上和一个普通的JavaBean类没有任何区别,但它与Session关联起来,就具有了持久化的能力。
        这种持久化操作是受Session控制的,即通过Session对象装载、保存、创建、或查询持久化对象PO。

    10.Session类的主要方法:
        1.建立查询对象
            createQuery()方法:用来从Session生成Query对象。
            beginTransaction()方法:用来从Session生成Transaction对象。
        2.管理Session的方法:
            isOpen(),flush(),clear(),evict()和close()等方法。
        3.获取持久化对象:get()和load()方法.
            get()方法
            public object get(Class entityClass,Serializable id)
            entityClass 表明类的类型,id是对象的主键值,如果id是int类型,应通过new Integer(id)的方法把它变成一个Integer对象。
        4.load()方法
            public object load(Class entityClass,Serializable id)
            load()方法和get()方法都能通过主键id值从数据库中加载一个持久化对象PO。
            两者的主要区别:当数据库中不存在主键id值,load()方法会抛出org.hibernate.ObjectNotFoundExceptio,get()方法则抛出java.lang.NullPointerException。
        5.持久化对象的保存、更新、和删除:
            save(),update(),saveOrUpdate()和delete()等方法。

    11.理解Sesion的缓存
        在Session接口的实现类org.hibernate.impl.SessionImpl中定义了一系列的Java集合,这些Java集合构成了Session的缓存。
       
    12.Session缓存的三大作用
        1.减少访问数据库的频率。
        2.保证缓存中的对象与数据库中的相关记录可以保持同步。
        3.当缓存中的持久化对象存在循环关系时,Session会保证不出现访问对象的死循环,以及由死循环引起的JVM堆栈溢出异常。

    13.注意:Session的commit()和flush()方法的区别:
        1..flush():清理缓存并执行一系列SQL语句,不提交事务。
        2.commit():会先调用flush()方法,然后提交事务。提交事务意味着数据所做的更新被永久保存下来。

    14.ORM:对象关系映射

    15.openSession()和 getCurrentSession()区别
        ①采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会
        ②采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭.
        ③使用getCurrentSession()需要在hibernate.cfg.xml文件中加入
        如下配置:
        * 如果使用的是本地事务(jdbc事务)
        <property name="hibernate.current_session_context_class">thread</property>
        * 如果使用的是全局事务(jta事务)
        <property name="hibernate.current_session_context_class">jta</property>
        简单解释一下jdbc事务和jta事务的区别吧!

    魔由心生,有万境纵横,无一道清静,无量寿佛!
  • 相关阅读:
    SpringCloudAlibaba学习笔记-简介
    SpringCloudAlibaba学习笔记-目录
    go语言学习笔记-目录
    go语言学习笔记-配置idea开发go编程语言并配置导入本地包
    go语言学习笔记-Windows10开发环境安装和环境变量配置
    我与阿里云的日常-QuickBI开发教程
    我与阿里云的日常-阿里云帐号注册
    消息队列 RabbitMq(6)高级特性
    消息队列 (5) RabbtMQ SpringBoot整合
    Nginx的安装和使用
  • 原文地址:https://www.cnblogs.com/qihuan/p/4010764.html
Copyright © 2020-2023  润新知