一、持久化对象和标识符
    1、持久化类
        配置完关系后,操作的实体对应的类,成为持久化类 (Customer)

2、持久化类标识符(oid:object id)
    
    3、持久化类主键的生成策略
        <id name="cust_id">
            <generator class="native"></generator>        
        </id>
        generator的class属性的取值:
        
        数据库底层生成主键:
            identity:底层以自增的方式生成主键 例如mysql
            sequence:底层以序列方式生成主键 例如oracle
            native:根据数据库底层的主键生成策略自动选用identity还是sequence (使用最多)
        hibernate生成主键:
            increment:自增
            uuid:生成不重复的字符串        
        手动指定主键:
            assigned
           
        代理主键:没有实际业务意义的字段
        自然主键:可以具备主键的要求(唯一不空) 与此同时还具备业务意义(身份证、手机号、学号....)
            
        
二、hibernate持久化对象的三种状态 和 一级缓存
    1、持久化对象的三种状态
        瞬时态:实体没有oid 也与session没有关联
        持久态:实体有oid 与session有关联
        脱管态:实体有oid 与session失去关联
        
        代码演示:
            Session session = HibernateUtils.openSession();
            Transaction transaction = session.beginTransaction();
            
            Customer customer = new Customer(); //瞬时态
            customer.setCust_name("jd"); //瞬时态
            System.out.println(customer); //瞬时态
            session.save(customer); //执行完毕后 持久态
            System.out.println(customer); //持久态
            
            transaction.commit(); //持久态
            session.close(); //脱管态
            
            System.out.println(customer);  //脱管态
            
    2、hibernate的一级缓存(重点)
        hibernate存在两级缓存:
            一级缓存:hibernate的内置缓存,session级别的缓存
            二级缓存:hibernate的外置缓存,sessionFactory级别缓存  
            
        验证一级缓存是存在的?
            Session session = HibernateUtils.openSession();
            Transaction transaction = session.beginTransaction();
            //查询对象
            Customer customer = session.get(Customer.class, 4L);//发送sql查询数据 封装Customer  将customer缓存在session中
            Customer customer2 = session.get(Customer.class, 4L);//从session获取4号customer
            System.out.println(customer);
            System.out.println(customer2);
            transaction.commit();
            session.close();
            
        持久态对象具备自动发送sql的能力
        为什么持久态对象可以自动发送sql?一级缓存内部存在快照区
        

三、事务相关
    1、事务的特性ACID
        原子性:事务是数据库操作最小单位 不可再分割
        一致性:同时成功或同时失败
        隔离性:多个事务互不影响的
        持久性:当事务提交 数据就会被持久化到磁盘上
    
    2、并发操作出现的问题
        脏读:A事务读取到B事务尚未提交的数据(最不安全的 开发中必须要避免的)
        不可重复读:一个事务中多次读取数据的内容不一致
        虚读/幻读:一个事务中多次读取数据的条数不一致
        
    3、设置数据库的隔离级别(isolation)解决并发问题
        read uncommitted: 都不能解决  没人用
        read committed:解决脏读    oracle的默认隔离级别
        repeatabel read:解决不可重复读和脏读     mysql的默认隔离级别
        serializable:都能解决  性能很低
        
    4、hibernate与事务相关的配置
        1、session与线程绑定
            作用:业务层使用session控制事务  dao层使用同一个session进行实体操作
            <property name="hibernate.current_session_context_class">thread</property>
            
        2、hibernate可以配置隔离级别
            <property name="hibernate.connection.isolation">1/2/4/8</property>
            //十六进制数
            read uncommitted: 1   0001
            read committed:2      0010
            repeatabel read:4      0100
            serializable:8       1000

四、hibernate的查询操作(重点)
    hibernate的查询方式:5种
    1、oid方式        get/load方法
    2、对象导航方式
    3、HQL方式        Hibernate Query Language    面向对象+结构化查询   (重点)
    4、QBC方式        Query By Criteria            完全面向对象的(api)
    5、SQL方式        通过sql语句查询

Hibernate知识点小结(二)的更多相关文章

  1. Hibernate知识点小结(三)-->一对多与多对多配置

    一.多表关系与多表设计 1.多表关系        一对一:            表的设计原则(分表原则):                优化表的性能                基于语意化分表 ...

  2. Hibernate知识点小结汇总

    Hibernate部分 1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复 ...

  3. Hibernate知识点小结(四)--JPA

    一.jpa的简介和入门 JPA:Java Persistence API,接口规范    Hinernate内部为JPA规范提供实现        开发步骤(EntityManager):       ...

  4. Hibernate知识点小结(一)--快速入门

    一.Hibernate的简介    1.Hibernate是一个开放源代码的对象关系映射框架    2.对象关系映射:ORM  Object Relation Mapping        对象与数据 ...

  5. Spring知识点小结(二)

    一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源:        导入dbcp的jar包:dbcp+pool+connector                代码实现:  ...

  6. Struts2知识点小结(二)

    一.结果视图的配置    <result name="success">/success.jsp</result>        1.局部结果视图      ...

  7. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  8. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

  9. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. solidity语言

    IDE:Atom 插件:autocomplete-solidity 代码自动补齐   linter-solium,linter-solidity代码检查错误   language-ethereum支持 ...

  2. 关闭Windows 系统当前连接的Wifi以及判断物理\虚拟网卡,有线\无线网卡

    1.关闭wifi ,调用Api [DllImport("Wlanapi.dll", SetLastError = true)] public static extern uint ...

  3. oracle学习篇九:同义词

    Oracle数据库中提供了同义词管理的功能.Oracle同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性. 在Oracle中对用户的管理是使用权限的方式来管理的,也就是说, ...

  4. java参数传递之值传递

    一 概述 1.什么是参数传递? 调用方法时向形参传递数据的过程叫做参数传递.在编程语言中有两种传递方式:值传递与引用传递.必须强调的是,这里提到的两种传递方式不是仅限于java使用到的传递方式,而是出 ...

  5. 概述File i/o

    1.File对象既可表示文件,也可表示目录(文件夹). 2. 创建一个File对象 File file = new File (String pathName[文件路径名]); 3.在Windows操 ...

  6. LARAVEL学习--安装

    之前一直使用Codeignitor框架进行PHP的开发,Codeignitor是一个非常优秀的框架,上手简单,文档极其友好,流行程度甚高(这带来了很好的社区支持+云环境支持),很轻量,可扩展性佳,性能 ...

  7. phpmyadmin-错误:配置文件权限错误,不应任何用户都能修改!这里有答案

    今天在linux下使用phpMyadmin的时候突然出现这个红色警告.差点把我吓晕在电脑前.不过冷静想一下这个报错,肯定就是linux权限那几个 ‘7’ 惹的祸. 于是 通过命令  ‘ll’ (这是英 ...

  8. HTML表单特别效果—音量调节,购物数量

    <form oninput="x.value=parseInt(a.value)+parseInt(b.value)">0<input type="ra ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

    1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑. ...

  10. WebService小例子———

    WebService学习(刚开始) ———————————————————————————————————————————————————————————————————— WebService:跨平 ...