一、Hibernate框架
        Hibernate是一个开放源代码的对象关系映射框架,它对 JDBC进行了非常轻量级的对象封装,它将POJO类与数据库表建立映射关系,是一个
    全自动的ORM框架,hibernate可以自动生成SQL语句,自动执行。Hibernate可以应用在任何使用 DBC的场合,既可以在Java的客户端程序使用,
    也可以在Servlet/JSP的Web应用中使用。Hibernate下载orm,jar包官网:https://hibernate.org/orm/releases/
二、ORM(对象关系映射)模型框架
        用于实现面向对象编程语言里不同类型系统的数据之间的转换。对象关系映射,是随着面向对象的软件开发方法发展而产生的。面向对象的
    开发方法是当今主流开发方法,关系数据库是应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务
    实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多
    关联和继承关系。因此,ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
三、Hibernate配置文件
    1.映射文件
        映射配置文件主要是用于描述实体类与数据表之间的映射关系。位置要与实体类在同一个包下。名称:类名.hbm.xml

      <hibernate-mapping>
<class name="*.*.*" table="t_customer" catalog="***">
<id name="id" column="c_id">
<generator class="identity" />
</id> <property name="name" column="c_name" length="20" /> <set name="orders" inverse="false" cascade="save-update">
<key column="c_customer_id" />
</set>
</class>
</hibernate-mapping>

(1)统一声明包名,这样在<class>中就不需要写类的全名。
        (2)关于<class>标签配置
            name 属性:类的全名称
            table 表的名称,可以省略,这时表的名称就与类名一致
            catalog 属性:数据库名称 可以省略.如果省略,参考核心配置文件中 url 路径中的库名称
        (3)关于<id>标签,<id>是用于建立类中的属性与表中的主键映射。
            name 类中的属性名称
            column 表中的主键名称 column 它也可以省略,这时列名就与类中属性名称一致
            length 字段长度
            type 属性 指定类型
            <generator>它主要是描述主键生成策略。
        (4)关于<property>标签 ,是描述类中属性与表中非主键的映射关系。
    2.核心配置文件
        主要包含了连接数据库相关信息,hibernate相关配置等。位置:在项目根目录下创建一个。名称:hibernate.cfg.xml
        根据hibernate.properties文件下的信息可以配置

<hibernate-configuration>
<session-factory>
<!-- 配置关于数据库连接的四个项 driverClass url username password -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///**</property>
<property name="hibernate.connection.username">***</property>
<property name="hibernate.connection.password">***</property> <!-- 设置连接提供者 -->
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<!-- c3p0连接池的配置 -->
<property name="hibernate.c3p0.max_size">20</property> <!-- 最大连接池 -->
<property name="hibernate.c3p0.min_size">5</property> <!-- 最小连接数 -->
<property name="hibernate.c3p0.timeout">120</property> <!-- 超时 -->
<property name="hibernate.c3p0.idle_test_period">3000</property> <!-- 空闲连接 --> <!-- 可以将向数据库发送的sql显示出来 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化sql -->
<property name="hibernate.format_sql">true</property> <!-- hibernate的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 自动创建表 -->
<property name="hibernate.hbm2ddl.auto">create</property> <!-- 用于设置事务提交方式 -->
<property name="hibernate.connection.autocommit">false</property> <!-- 配置hibernate的映射文件所在位置 -->
<mapping resource=".././*.hbm.xml" /> </session-factory>
</hibernate-configuration>

注意:无论是映射文件还是核心配置文件,都要有约束在xml文件中,已3.0.dtd为例:

 <!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

位置是:hibernate的jar包下的\project\etc\hibernate.properties
四、Hibernate工作原理:
    1.通过 Configuration().configure();        读取并解析 hibernate.cfg.xml 配置文件。
    2.由hibernate.cfg.xml中的<mappingresource="xx/xx/xxx.hbm.xml"/>        读取解析映射信息。
    3.通过 config.buildSessionFactory();        得到 sessionFactory。
    4.sessionFactory.openSession();        得到 session。
    5.session.beginTransaction();        开启事务。
    6.session.getTransaction().commit();        提交事务
    7.关闭 session;
五、Hibernate持久化类与 主键生成策略
    在 hbm.xml 中可以设置的主键生成策略如下:
    主键生成器                                                描述
    increment                                                  代理主键。由 hibernate 维护一个变量,每次生成主键时自动以递增。 问题:如果有多个应用访问一个数据库,由于每个应用维护自己                           的主键。此时主键可能冲突。建议不采用。
    identity                                                      代理主键。由底层数据库生成表识符。条件是数据库支持自动增长数据类型。 比如:mysql 的自增主键,oracle 不支持主键自动生成。                          如果数据库支持自增建议采用。
    sequence                                                  代理主键。Hibernate 根据底层数据库序列生成标识符。条件是数据库支持序 列。比如 oracle 的序列。如果数据库支持序列建议采用。
    native                                                        代理主键。根据底层数据库对自动来选择 identity、sequence、hilo由于生成主键策略的控制权由 hibernate 控制,所以不建议采用。
    uuid                                                        代理主键。Hibernate 采用 128 位的 UUID 算法来生成标识符。该算法能够在网络环境中生成唯一的字符串标识符。此策略可以保证生                           成主键的唯一性,并且提供了最好的数据库插入性能和数据库平台的无关性。建议采用。
    assigned                                                   自然主键。由 java 程序负责生成标识符。不建议采用。
六、Hibernate持久化对象状态
    1. 瞬时态:也叫做临时态或自由态,它一般指我们new出来的对象,它不存在OID,与hibernate session无关联,在数据库中也无记录。它使用
    完成后,会被jvm直接回收掉,它只是用于信息携带。
    简单说:无OID与数据库中的信息无关联,不在 session 管理范围内。
    2. 持久态:在 hibernate session 管理范围内,它具有持久化标识OID它的特点,在事务未提交前一直是持久态,当它发生改变时,hibernate
    是可以检测到的。
    简单说:有OID 由session管理,在数据库中有可能有,也有可有没有。
    3. 托管态:也叫做游离态或离线态,它是指持久态对象失去了与session的关联,托管态对象它存在OID,在数据库中有可能存在,也有可能不
    存在。对于托管态对象,它发生改变时hibernet不能检测到。
七、Hibernate注解开发
    1.PO类注解开发
        @Entity 声明一个实体
        @Table 来描述类与表对应
        @Id 来声明一个主键
        @GenerateValue 用它来声明一个主键生成策略
        默认情况下相当于native,可以选择的主键生成策略 AUTO IDENTITY SEQUENCE
        @Column 来定义列
      注意:对于 PO 类中所有属性,如果你不写注解,默认情况下也会在表中生成对应的列。列的名称就是属性的名称
        @Temporal 来声明日期类型
          TemporalType.DATA 只有年月日
          TemporalType.TIME 只有小时分钟秒
          TemporalType.TIMESTAMP 有年月日小时分钟秒
    2.一对多(多对一)      
        @OneToMany
        @ManyToOne
    3.级联
        @Cascade
八、Hibernate检索方式概述
    Hibernate提供以下5种检索对象方式:
        1 导航对象图检索方式,根据已加载的对象导航到其它对象
        2.OID检索方式,按照对象的OID来检索对象
        3.HQL检索方式,使用面向对象的HQL查询语言
        4.QBC检索方式,使用QBC(Query by Criteria)API来检索对象,这种API封装基于字符串形式的查询语句,提供了更加面向对象的查询接口
        5.本地SQL检索方式,使用本地数据库的SQL查询语句
九、Hibernate事务管理
    1.Hibernate事务管理级别
        xxx.hbm.xml配置事务管理

<property name="hibernate.connection.isolation">4</property>

1 代表的事务隔离级别为 READ UNCOMMITTED
        2 代表的事务隔离级别为 READ COMMITTED
        4 代表的事务隔离级别为 REPEATABLE READ
        8 代表的事务隔离级别为 SERIALIZABLE
        EAD_UNCOMMITED 读取未提交,它引发所有的隔离问题
        READ_COMMITTED 读已提交,阻止脏读,可能发生不可重复读与虚读.
        REPEATABLE_READ 重复读 阻止脏读,不可重复读 可能发生虚读
        SERIALIZABLE 串行化 解决所有问题 不允许两个事务,同时操作一个目标数据。 (效率低下)
        ORACLE 默认的是事务隔离级别 READ_COMMITTED
        MYSQL 默认的事务隔离级别 REPEATABLE_READ
    2. Hibernate中session管理
        Hibernate提供了三种管理session的方式:
          (1)Session 对象的生命周期与本地线程绑定(ThreadLocal)
          (2)Session 对象的生命周期与 JTA 事务绑定(分布式事务管理)
          (3)Hibernate 委托程序来管理 Session 的生命周期

Hibernate基础知识详解的更多相关文章

  1. RabbitMQ基础知识详解

    什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中 ...

  2. Cisco路由技术基础知识详解

    第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是(  )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12  ...

  3. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  4. Python基础知识详解 从入门到精通(七)类与对象

    本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...

  5. 直播一:H.264编码基础知识详解

    一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...

  6. 第157天:canvas基础知识详解

    目录 一.canvas简介 1.1 什么是canvas?(了解) 1.2 canvas主要应用的领域(了解) 二.canvas绘图基础 2.0 sublime配置canvas插件(推荐) 2.1 Ca ...

  7. Redis基础知识详解(非原创)

    文章大纲 一.Redis介绍二.Redis安装并设置开机自动启动三.Redis文件结构四.Redis启动方式五.Redis持久化六.Redis配置文件详解七.Redis图形化工具八.Java之Jedi ...

  8. Maven基础知识详解

    1. 简介   Maven在Java领域的应用已经非常广泛了,有了Maven的存在是的开发人员在搭建.依赖.扩展和打包项目上变得非常简单. 2. Windows安装Maven 下载安装包   http ...

  9. 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)

    在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...

随机推荐

  1. MathExam作业

    作业 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 50 40 • Estimate • ...

  2. 超实用 2 ArrayList链表之 员工工资管理系统

    package ArrayList的小程序; import java.io.*; import java.util.*; public class kkk { /** * 作者:Mr.fan * 功能 ...

  3. 四则运算之GUI

    四则运算之GUI Coding克隆地址:https://git.coding.net/lvgx/pair_programming.git   目录: 一.前言 二.计划时间——PSP 三.接口设计 四 ...

  4. 团队作业之404 Note Found Team

    如果记忆是一个罐头的话,我希望这一罐罐头不会过期----<重庆森林> 404 Note Found Team 如果记忆是一个备忘录的话,别说了,它不会过期----<404 Note ...

  5. Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)

    一 基础知识 字节  8位半字  16位字    32位 二 解惑 Code, RO-data,RW-data,ZI-data Code为程序代码部分RO-data 表示 程序定义的常量const t ...

  6. Scrum Meeting Beta - 10

    Scrum Meeting Beta - 10 NewTeam 2017/12/11 地点:新主楼F座二楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了作业详情的本地存储Issue #165 ...

  7. fidder监控请求响应时间和请求IP(摘抄至网络)

    增加监控请求的详情时间 在CustomRules.js的class Handlers中增加  //添加请求的响应时间 public static BindUIColumn("Time Tak ...

  8. redis4.0.10安装与常用命令

    ----------- redis安装 ------------------------------------------- 安装reids:https://redis.io/download (4 ...

  9. HDU4292_Food

    给出一些人,一些食物,一些饮料,每个人都只喜欢喝某些饮料,吃某些食品,每个食品和饮料都有一定的数量,现在问最多能满足多少人的需求. 注意理解题意了,每个人只需要要拿一个食物和一个饮料即可,这题目说得好 ...

  10. SD/MMC相关寄存器的介绍

    1.SD卡内部架构 在熟悉SD/MMC相关寄存器之前,我们先来看看SD卡的内部架构是怎么样的,如下图所示: 2.SD/MMC相关寄存器的介绍 从上图中总结出:SD卡内部有7个寄存器. 一.OCR,CI ...