Hibernate总结

Hibernate框架概述

框架:软件的半成品,已经完成了部分功能

JavaEE开发的三层架构
在这里插入图片描述

Hibernate:是一个轻量级的JDBC,我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是与数据库的交互操作。它是在Dao层去使用的,Hibernate就是一个持久层的ORM框架。

ORM(Object Relation Mapping):对象关系映射,指的是将一个Java中的对象与关系型数据库的表建立一种映射关系,从而操作对象就可以操作数据库中的表。

持久化类:
指其实例需要被Hibernate持久化到数据库中的类即实体类

private 类型属性;
public 类型的 setter 和 getter 方法;
public 或 protected 类型的无参数的构造方法。
描述持久化类与数据库表之间的对应关系。

一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录。

在这里插入图片描述

Hibernate的基本配置

目录结构
documentation:存放在Hibernate的相关文件和APl

lib:存放Hibernate编译和运行所依赖的Jar包,其子目录required下包含了运行Hibernate项目必须的Jar包

project:存放Hibernate各种相关的源代码,project目录下的ect目录非常重要,它里面有一些关于Hibernate的配置信息

流程
1.创建数据库

2.创建实体类

3.创建Hibernate的配置文件:{

映射文件配置文件:xxx.hbm.xml

核心配置文件:hibernate.cfg.xm(包含了链接数据库的相关信息和Hibernate的相关配置信息)
}

执行工作原理
1.通过Configuration().configuration;读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的《mappingresource="com/xx/User.hbm.xml/》读取解析映射信息

3.通过config.buildSessionFactory();//得到SessionFactory

4.SessionFactory.openSession();//得到Session

5.Session.bginFransaction();//开启事务

6.Persistent operate;

7.Session//提交事务

8.关闭Session;

9.关闭SessionFactory;

映射配置文件(配置数据库中的元素):

“xxx.hbm.xml”

《class》标签:

name属性:类的全路径

table属性:映射到数据库里面的那个表的名称,如果表名与类名一致,table属性可省略

catalog:数据库名,可省略,若省略,则参考核心配置文件中的主键的对应关系

《id》标签

该标签必须存在,该标签用来建立类中的id属性与表中的主键的对应关系

name属性:类中的属性名称

column:表中主键名称,类中的属性名和表名的字段名(主键名)如果一致,column可省略

length:字段长度,若忽略不写,且你的表是自动创建这种自动创建这种方案,那么length的默认长度是255

type:指定类型可不写,Hibernate自行转换

《property》标题

该标签是用来建立类中的普通属性与表中非主键字段的对应关系

name属性:类中的属性名称

column:表中主键名称,类中的属性名和表名的字段名(主键名)如果一致,column可省略

length:字段长度,若忽略不写,且你的表是自动创建这种自动创建这种方案,那么length的默认长度是255

type:指定类型可不写,Hibernate自行转换

not–null:设置是否非空

unique:设置唯一

核心配型文件:

核心配型文件分为:
1.必须配置:驱动类,url路径,用户名,密码 ,方言

2.可选配置

显示sql :hibernate.show_sql

格式化 sql:hibernate.format_sql

自动建表:hibernate.hbm2ddl.auto

none:不适用hibernate的自动建表

creat:如果数据库中已经有表,删除原有表

create–drop:如果已有表,删除原有表,执行操作,删除这个表;如果没表,则新建一个,使用完后删除表 (常用于测试)

*update:如果数据库中有表,则用原表,若无,则创建新表(更新表结构)

*validate(校验):如果没有表,不会创建表,只会使用数据库原有的表,校验映射和表的结构

3.映射文件的引入
引入映射文件的位置:《mappingresource="…"》

4.Hibernate核心配置方式
属性文件:hibernate.properties(无法加载映射,需手动加载)

hibernate.connection.driver_class=“com.mysql.jdbc.Driver”

手动加载映射:configuration:addResource("…");

xml文件:hibernate.cfg.xml

Hibernate API

Configuration: Hibernate的配置对象

configuration类的作业是对hibernate进行配置,以及对他进行启动。在hibernate的启动过程中configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然configuration类在整个hibernate项目中扮演一个很小的角色,但是他是启动hibernate时所遇到的第一个对象

作用:
1.加载核心配置文件

加载属性文件:Configuration cfg = new Configuration();

加载XML文件
Configuration cfg = new Configuration().configuration();

2.加载映射

属性文件需手动加载

SessionFactory: Session工厂

负责初始化,充当数据库存储代理,并负责创建Session,这里用到了工厂模式,且它不是轻量级,一个项目通常有一个SessionFactory,当需要操作多个数据库的时候,可以为灭个数据库指定一个SessionFactory。

作用:
1.SessionFactory内部维护了hibernate的连接池,是线程安全对象,且是重量级对象

2.配置连接池

3.抽取工具类

Session: 类似于Connection对象,是连接对象

Session接口负责执行被持久化对象的CRUD操作,Session对象是非线程安全的,同时,hibernate的Session不同于jsp中的HttpSession,这里使用的这个Session是指hibernate中的Session,而以后会将HttpSession对象称为用户Session

Session代表的是hibernate与数据库的连接对象

Session中的API方法

1.保存方法: Serializable.Save(Obejct obj);

2.查询方法:
get(class c ,Serializable.id);
load(class c ,Serializable.id);

区别:
get:立即加载,执行到该行代码时候,就会发送SQL语句查询,返回的是真实对象本身,查询不到返回NULL;

load:延迟加载(懒加载),执行带该行代码不会发送SQL语句,当真正使用这个对象时候才会发送,查询返回的是代理对象,查询不到,返回objectNotFoundExcepton

3.修改法方法:
void update(Objet obj);

两种修改方法:1.直接创建对象进行修改(不设置来源,修改后来源会默认为NULL);
2.先查询,再修改(推荐);

4.删除方法:
void delete(Objet obj);

两种修改方法:1.直接创建对象进行删除
2.先查询,再删除(推荐);

Transaction: 事务对象

Transaction接口是一个可选API,可选择不用,取而代之的是hibernate设计者写的底层事务代码,Transaction接口是对实际事物实现的一个抽象,这些实现包括JDBC事务,JIA中的UserTransaction甚至是CORBA事务,之所以这样设计是能使用一个统一事务操作界面,使得自己项目可以再不同环境,容器之间方便的移植

Hibernate中管理事务的对象

方法:commit();提交
rollback();回滚

主键生成策略

分类:自然主键和代理主键

自然主键:主键的本身就是表中的一个字段(实体中的一个属性)
例:创建一个人员表,每个人员都会有一个身份证号(唯一不可变),使用身份证号作为主键,则称为自然主键

代理主键:主键的本身不是表中的一个字段(实体中的一个属性)
例:创建一个人员表,每个人员都会有一个身份证号,没有使用人员中的身份证号,使用了其他一个不想关的字段(ID Sno),这种就称为代理主键

在实际开发中,尽量使用代理主键
**原因:**一旦自然主键参与到业务逻辑中,后期有可能需要修改源码。

策略:

开发中一般不允许用户手动设置主键,一般主键交由数据库设置。

1.increment:
该机制是 Hibernate 以递增的方式为OID赋值。
不依赖于底层数据库系统,适合所有数据库;
适合单独的 Hibernate 应用使用,不适合在集群情况下使用。
【(发送Select max(id)from表),查询出表中的最大数值id+1,作为下一条记录主键】
在这里插入图片描述

2.identity :
该机制依赖于底层数据库,需要数据库支持自动增长字段。
例如:MySQL、MSSQL、DB2、Sybase等。
【只会一直增长,例:数据库中有id 1,2,3条记录,当删除id=3的记录,然后在新添一条记录进来,该记录id为4】

在这里插入图片描述

3.assigned :

该机制是由外部程序负责生成 OID, Hibernate 不负责维护主键生成,与Hibernate和底层数据库都无关。
例如: Student 类没有定义 ID,而是以学号 studentNo 作为业务主键。

在这里插入图片描述

关联映射

Hibernate提供两种映射一对一关联关系的方式
主键关联映射;
唯一外键关联映射。
外键必须设定 unique 约束。

1.主键关联映射 – 外键表(PERSON )

通过one-to-one 元素配置。

constrained 属性为 true,表明 PERSON 表 ID 为外键,参照主表(USER)。

外键表实体类配置文件中 OID 使用 foreign 生成策略。

2.唯一外键关联映射 - 主键表(PERSON)。

通过one-to-one 元素配置。

property-ref 属性,表明建立了从User到Person的一对一关联关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值