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()清除缓存的

 

时间: 2024-08-24 03:38:33

Hibernate 小阶段总结的相关文章

一个Hibernate小程序

基本步骤 在前一篇博文Hibernate环境搭建中为大家详细的介绍如何搭建一个学习新类库的学习环境.今天,为大家带来一个Hibernate小例子,让大家能够快速上手. 步骤如下: 1.配置hibernate.cfg.xml 2.编写映射文件User.hbm.xml 3.编写一个持久化类User.java 4.编写辅助类HibernateUtil.java 5.加载并存储对象UserManager.java 配置Hibernate.cfg.xml a.在新建的XHibernate项目的src目录下

Hibernate小程序制作

要使用hibernate,至少要有三个步骤: 创建持久化类 编写映射文件 编写配置文件 在已经有测试用的数据库的前提下,我们来写一个小程序. 数据库为 school--->student---->id ,name, age 创建持久化的类 持久化的类可以是一个普通的Java类(POJO类),而且一定要有现代战争无参的构造器.(略) 编写映射文件 我们创建了student表,又创建了Student类,虽然表的字段和类的属性是对应的,但是系统并不知道他们的关系,所以我们要编写 映射文件,映射文件保

Struts2+EasyUI+Hibernate小实例

概述 这个实例主要是前台数据到后台数据的传递和后台数据到前台数据的传递,完成数据的新增,以及对新增数据的展示.下面是详细的过程: Hibernate(数据库部分) 这里只是数据库的连接和数据库实体与物理表的映射. 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Conf

Spring+Hibernate小异常

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection at org.springframework.orm.hibernate3.Hiberna

MyEclipse10下开发第一个Hibernate小程序

一.首先,我们新建一个Java项目,取名为HibernateTest. 二.因为Hibernate框架是用面向对象的思想来操作数据库,那么一定要建立数据库和表. (1).这里我使用的是MySQL 5.6版本的数据库,大家可以去网上下载MySQL,我没有使用MySQL自带的管理工具和命令行工具,使用的是一款SQLyog工具,下载地址:http://download.csdn.net/detail/u012561176/8728955 ,其中关于一些数据库的jar包,也可以通过这个地址下载:http

Hibernate 小章总结(三)

脏检查及刷新缓存机制 当事务提交时,Hibernate会对Session中持久状态的对象进行检测,判断对象的数据是否发生了改变,这种判断称为脏检查 Session session; Transaction tx; @After public void afterTest(){ tx.commit(); HibernateUtil.closeSession(); } @Before public void initDate(){ session=HibernateUtil.getSession()

Hibernate 小章总结(二)

Hibernate中Java对象的三种状态 在hibernate中,对象有三种状态:临 时状态(Transient).持久状态(Persistent)和游离状态(Detached). 处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject). 1. 临时状态 由 new命令开辟内存空间的Java对象,例如: User user=new User(); 临 时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系.

Hibernate 小章总结(一)

Hibernate简介 Hibernate是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有. 它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来.无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate. Hibernate不仅负责从Jav

Hibernate小笔记

Hibernate的API中有5个非常重要的接口: Session.SessionFactory.Configuration.Transaction和Query,他们是Hibernate组成的核心. Session接口: Session负责执行被持久化对象的增.删.改.查操作,类似于JDBC的Connection和Statement,要注意的是:session是非线程安全的,一般来说,一个线程包含一个session对象. SessionFactory接口:用来产生Session的工厂类,它负责为