hibernate知识点

对象-关系映像:Object Relational Mapping 简称 ORM
含义:用来把域模型表示的对象映像到关系数据模型对应的数据库中

面向对象面向关系
属性
对象记录

Hibernate
1.在分层体系结构中Hibernate位于持久层,是完成对象持久化的持久层框架;
2.Hibernate是连接Java应用程序和关系型数据库的框架,能够建立对象模型和关系数据模型之间的映射,是一种自动ORM框架;
3.Hibernate是对JDBC API的封装,是JDBC轻量级封装框架。
优点
1.实现了ORM,使用java程序员可以方便的运用面向对象的编程思想来操作关系型数据库;
2.对JDBC的封装,增强代码的重用性,简化了代码,提高编程效率;
3.对JDBC的轻量级封装,必要时Java程序员可以绕过Hibernate直接访问JDBC API;
4.不仅可以应用在独立的Java程序中,还可以应用在Java Web项目中,可以和多种Web服务器集成,并支持多种数据库平台。
项目步骤
1.安装Eclipse mysql
2.下载hibernate
3. 新建eclipse项目
4. 引入hibernate及其jar包
5. 引入mysql数据库驱动包
6. 编写hibernate配置文件
6. 创建java持久化类XXX.java
7. 编写持久化类的映射配置文件XXX.hbm.xml
8. 使用hibernate API完成对象的持久化
在这里插入图片描述
加载驱动,连接数据库
持久化类:是指实例需要被hibernate持久化到数据库中的实体类
1.private类型属性;
2.public类型的set和get方法
3.public或protected类型的无参构造方法
在这里插入图片描述
class元素用于指定类和表之间的映射
  name属性设定类名(包含路径)
  table属性设定表名,默认以类名作为表名

class元素包含一个id子元素以及多个property子元素

id(数据库的主键)子元素设定持久类的OID和表的主键的映射关系。
  column-指定表字段的名称;
  generator-元素指定OID的生成器

generator-class可配置:
increment 采用hibernate数值递增的方式
identity 采用数据提供的自增长方式
assigned 主键由应用逻辑产生

OID(对象标识符,标识对象的唯一性)是关系数据库表中的主键(代理主键)在java对象模型中的等价物;可维持java持久类和数据表的对应关系

property 子元素设定类的其他属性和表的字段的映射关系。
  name – 对应类的属性名称;
  type – 指定属性的类型;
  column – 指定表字段的名称;
  not-null – 指定属性是否允许为空。

一对一
通过one-to-one 元素配置。
constrained 属性为 true,表明 当前 表 ID 为外键,参照主表。
外键表实体类配置文件中 OID 使用 foreign 生成策略。
单向一对多
在原有class
set元素属性
  name属性:指定映射的属性名;
  cascade级联操作属性:save-update,delete,all,none;
set元素的子元素
  key元素:column属性设定所关联类对应表的外键
  one-to-many元素:class属性设定所关联的类

双向一对多

many-to-one元素的属性:
  name 属性:指定需映射的属性名;
  column 属性:指定ORDER中的外键列名;
  class 属性:指定所关联的类型。
多对多
set name=“实体类集合名” table=“多对多关联关系中间表”
inverse=“主控方:false ;被控方true”
key column=“定义名字 方便关联”
many-to-many class=“关联类” column=“关联key column名”

Mapping-recourse与Mapping-class的区别
recourse:持久化类配置文件路径 用/来表示;
class:表示用注解 的文件路径 用. 来表示;

hibernate中的实体对象的四种状态
Transient(临时状态) : 刚刚被 new 关键字创建,还没有被持久化,不在Session的缓存中。
Persistent(持久化状态) : 已经被持久化,并加入到 Session 缓存中。
Detached(游离状态) : 已经被持久化,但不再处于 Session 缓存中。
Removed(删除状态) : Session 已经计划将其从数据库删除,并且不再处于 Session 缓存中在这里插入图片描述

session.get()和load()方法:
不同点:get()会抛出异常;load()返回null;
Session.get()立即检索;Session.load()延迟检索;

缓存介于应用程序和永久性存储源之间;为了降低应用程序和永久性存储源之间的效率;从而提高应用的运行速率。

缓存清理时间点:
transaction.commit()先清理缓存,在提交事务;
显式调用Session.flush()会清理缓存

Session缓存的作用:
1.减少数据库访问次数,提高访问效率;
2.缓存对象与数据库相关记录的同步;

HQL检索(Hibernate Query Language)
from关键字后面是类名不是数据库表名,类名区分大小写;
Query query = session.createQuery(hql);
query 返回结果方法:
list()返回list类型的查询结果;
uniqueResult()返回单个对象;

分页查询
setFirstResult(int firstResult)设定从哪个对象开始检索
setMaxResult(int maxResult)设定一次检索的数目

立即检索:映射文件中class元素lazy设置为false 反之延迟检索

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值