zoukankan      html  css  js  c++  java
  • 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事务的区别吧!
  • 相关阅读:
    [LeetCode 1029] Two City Scheduling
    POJ 2342 Anniversary party (树形DP入门)
    Nowcoder 106 C.Professional Manager(统计并查集的个数)
    2018 GDCPC 省赛总结
    CF 977 F. Consecutive Subsequence
    Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
    Poj 2337 Catenyms(有向图DFS求欧拉通路)
    POJ 1236 Network of Schools (强连通分量缩点求度数)
    POJ 1144 Network (求割点)
    POJ 3310 Caterpillar(图的度的判定)
  • 原文地址:https://www.cnblogs.com/zhao123/p/4009999.html
Copyright © 2011-2022 走看看