zoukankan      html  css  js  c++  java
  • Hibernate 小阶段总结

    (一)Hibernate入门

          通俗的话来说:Hibernate是用于面向对象操控数据库,对JDBC进行轻量级封装。(在java世界中传统的来说是JDBC访问数据库。)

          1)Hibernate定性:对象关系映射框架。(底层依旧是JDBC)

          2)Hibernate框架的结构图

          

            解析:Java Application 应用程序

                 Persistent Object 持久化对象

               Hibernate(Configuration、Session Factory、Session、 Transation、Query、Criteria)六大接口

               JNDI:(Java Naming and Directory Interface)是java的命名与目录接口 

                 JDBC:(Java Date Base Connectivity)数据库连接,是一种执行语句的Java API

               JTA:(Java Transaction API)全局事务处理 

          3)什么是ORM?

            ORM是对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),

            是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

            从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

          4)什么是持久化?

            持久化是程序数据在瞬时状态和持久状态间转换的过程

          POJO(plain ordinary java object) 简单无规则java对象纯的传统意义的java对象。就是说在一些Object/Relation Mapping工具中,

          能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。我的理解就是

          最基本的Java Bean,只有属性字段及setter和getter方法。 

          解析一:一个POJO(Plain Ordinary Java Object普通的java对象)持久化以后就是PO

                 JavaBean=POJO

                 PO=POJO+xml配置
               直接用它传递、传递过程中就是DTO(Data Transefer Object)
                直接用来对应表示层就是VO

          解析二:其对象或实例将存储在数据库表中的Java类在Hibernate中称为持久化类

              PO=JavaBean+xml配置

              POJO名称用于强调一个给定的对象是一个普通的Java对象,而不是一个特殊的对象,好更不是Enterprise JavaBean(ORM框架的实现产品)。

     

          5)持久化对象的唯一标识是OID

              解析:我们都知道,Java中安内存地址不同区分同一个类的不同对象

                             关系数据库用主键区分同一条记录

                             Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系

          01.什么是OID?

            解析:OID 是持久化类(Student)与数据表主键对应属性, 用来唯一区分持久化对象。

          02.尽量使用包装类

              解析:一个学生成绩为0,无法区分是参加了考试考取了0分,还是没有成绩。

                 如果使用包装类,数据库就会存入null,证明该学生没有参加考试

            区别:java的包装类和基本数据类型

              Java的基本类型包装类:

              Integer 、Long、Short、Byte、Character、Double、Float、Boolean、BigInteger、BigDecmail

              其中BigInteger、BigDecimal没有相对应的基本类型,主要应用于高精度的运算,BigInteger 支持任意精度的整数,BigDecimal支持任意精度带小数点的运算。

              Java语言提供了八种基本类型:(六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 )
                整数:包括int,short,byte,long ,初始值为0
                浮点型:float,double ,初始值为0.0
                字符:char ,初始值为空格,即'' ",如果输出,在Console上是看不到效果的。
                布尔:boolean ,初始值为false

          6)主键生策略(基本)

            

           * increment

                由hibernate完成 主键递增,

              原理:select max(id) , insert时max(id)+1 ,完成主键递增

              优点:跨数据库

              缺点:多线程并发访问问题(第一个线程执行成功,第二个线程报错)

           * identity

             由底层数据库来完成自增 ,要求数据库必须支持自增主键  mysql支持 ,oracle不支持

             * sequence

               编号列生成由底层数据库提供序列,来完成主键自增,要求数据库必须支持序列 mysql不支持,oracle支持

               create sequence myseq; 创建序列

             insert into customer values (myseq.nextval); 插入数据时调用序列,序列+1

            * native

              采用数据库支持自增策略, mysql就用identity 、oracle就用sequence

              策略1) ---> 策略4) 要求数据库主键必须为数字 ,因为只有数字才能自增

           * uuid

              32位 唯一字符串, 主键使用varchar 类型

              真实开发中,用程序提供uuid值

           *assigned

             手动指定主键的值,该主键一般有实际意义,例如订单单号(20160114-A002)20160114-B001  20160114-C002。

         7)Hibernate中Java对象的三种状态之间的转换

            

            

          8)脏检查和缓存机制

            什么是脏检查:当事务提交时,Hibernate会对session中的PO(持久化对象)进行检测,判断持久化对象的状态是否发生了改变,如果发生了改变就会将改变更新到数据库中。

                   (现数据比原数据是否改变) 

            Session会话中flush()方法和clear()方法的共同点都是往数据库

                               Flush()数据库同步的不清除缓存的

                               Clear()清除缓存的

     

  • 相关阅读:
    sqlplus中文问号
    mysql8.0 Authentication plugin 'caching_sha2_password' cannot be loaded
    Idea2018激活
    bzoj-5049-线段树
    HDU-6070-二分+线段树
    Aizu-2200-floyd+dp
    bzoj-4565-区间dp+状压
    bzoj-3195-状压dp
    bzoj-4870-组合dp+矩阵幂
    swiper使用心得
  • 原文地址:https://www.cnblogs.com/yejiaojiao/p/5807426.html
Copyright © 2011-2022 走看看