Hibernate学习笔记

  • Hibernate环境搭建:
    下载Hibernate:
    在这里插入图片描述
    解压:
    在这里插入图片描述
    Hibernate开发包:
    在这里插入图片描述
    在这里插入图片描述
    ------引入开发依赖包后全选包右键build path--------

  • 新建xml文件建立类与表之间的映射标签是<hibernate-mapping></hibernate-mapping>
    在这里插入图片描述

  • 配置Hibernate核心配置文件,命名规则:XXX.cfg.xml
    在这里插入图片描述

  • 映射的配置
    【class标签的配置】
    标签用来建立类与表的映射关系
    属性:
    name :类的全路径
    table :表名(类名与表名一致,table可以省略)
    catalog :数据库名
    【id标签的配置】
    标签用来建立类中的属性与表中的主键的对应关系
    属性:
    name :类中的属性名
    column :表中的字段名(类中的属性名和表中的字段名如果一致,column可以省略)
    length :长度
    type :类型
    【property标签的配置】
    标签用来建立类中的普通属性与表的字段的对应关系
    属性:
    name :类中的属性名
    column :表中的字段名
    length :长度
    type :类型
    not-null :设置非空
    unique :设置唯一

  • 核心的配置根标签<hibernate-configration></hibernate-configration>
    必须的配置
    连接数据库的基本的参数
    驱动类<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    url路径<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
    用户名<property name="hibernate.connection.username">root</property>
    密码<property name="hibernate.connection.password">abc</property>
    方言<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    可选的配置
    显示SQL :hibernate.show_sql
    格式化SQL :hibernate.format_sql
    自动建表 :hibernate.hbm2ddl.auto
    none :不使用hibernate的自动建表
    create :如果数据库中已经有表,删除原有表,重新创建,如果没有表,新建表。(测试)
    create-drop :如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。(测试)
    update :如果数据库中有表,使用原有表,如果没有表,创建新表(更新表结构)
    validate :如果没有表,不会创建表。只会使用数据库中原有的表。(校验映射和表结构)。
    映射文件的引入
    引入映射文件的位置
    在这里插入图片描述

  • HIbernate的核心API

    • configuration
      在这里插入图片描述
      加载核心配置文件:
Configuration cfg = new Configuration().configure();
  • SessionFactory:Session工厂
    在这里插入图片描述
    Session代表的是Hibernate与数据库的链接对象。不是线程安全的。与数据库交互桥梁。
保存方法:
Serializable save(Object obj);
查询方法:
T get(Class c,Serializable id);
T load(Class c,Serializable id);
修改方法
void update(Object obj);
删除方法
void delete(Object obj);s
保存或更新
void saveOrUpdate(Object obj)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 什么是持久化类?
    持久化:将内存中的一个对象持久化到数据库中的过程,hibernate框架就是用来持久化的框架。
    持久化类:一个java对象与数据库建立了映射关系,那么这个类在hibernate中叫做持久化类。持久化类=java类+映射文件。

  • **持久化类的编写规则:
    1.对持久化类提供一个无参构造。2.属性私有,提供对外get、set方法。3.对持久化类提供唯一标识OID与数据库主键相对应。4.属性尽量使用包装类类型(因为基本数据类型默认值为0,包装类类型的默认值为null)。5.持久化类不要使用final来修饰 **

  • 主键分类:1.自然主键:主键的本身就是表中一个字段(实体中的一个具体属性)2.代理主键:主键本身不是表中的一个必须字段,是新加的一个字段。(尽量使用代理主键,若自然主键参与业务逻辑,后期维护可能要修改源码。)
    在这里插入图片描述

  • Hibernate主键生成策略:
    在这里插入图片描述

  • 持久化类的三种状态::瞬时态、持久态、脱管态
    在这里插入图片描述
    瞬时态:没有唯一标识OID,也没有被session管理时的对象。
    持久态:有唯一标识OID,也被session管理时的对象。比如new出来之后调用session的方法去操作对象,save、update等等。
    脱管态:已经有唯一标识OID,但是没有被session管理,比如操作完对象之后session关闭,此时的对象就属于脱管态对象。

  • Hibernate一级缓存
    缓存:是一种优化的方式,将数据存在内存中,使用的时候直接从内存中获取。
    一级缓存:又被称为session级别的缓存,一级缓存的生命周期与session一致。
    在这里插入图片描述

  • 一级缓存的快照机制:堆内存中的数据与快照中的数据进行对比,如果不一致,则会执行同步(update)操作,若相同,则不执行update。快照是数据的副本 快照属于一级缓存 快照是在堆内存中的 快照的作用:保证数据一致性

  • Hibernate其他API
    一对多的建表原则:在多的乙方创建外键指向一的一方。

  • 多对多的建表原则:创建一个中间表,中间表至少有两个字段分别指向多对多双方的主键。
    在这里插入图片描述
    一对多实体创建:
    在这里插入图片描述
    一对多映射创建:(因为有两张表,所有要有两个实体对象和表的映射)
    在这里插入图片描述
    在这里插入图片描述
    一对多测试类 :
    在这里插入图片描述

  • Hibernate共提供了五种查询方式。
    1.OID检索
    OID检索:Hibernate根据对象的OID(主键)进行检索

Customer customer = session.get(Customer.class,1l);//get()方法
Customer customer = session.load(Customer.class,1l);//load()方法

2.对象导航检索:对象导航检索:Hibernate根据一个已经查询到的对象,获得其关联的对象的一种查询方式。
3.HQL检索(##)
HQL查询:Hibernate Query Language,Hibernate的查询语言,是一种面向对象的方式的查询语言,语法类似SQL。通过session.createQuery(),用于接收一个HQL进行查询方式。

初始化一些数据
在这里插入图片描述
HQL的简单查询
在这里插入图片描述
HQL的别名查询
在这里插入图片描述
HQL的排序查询
在这里插入图片描述
HQL的条件查询
在这里插入图片描述
HQL的投影查询
投影查询:查询对象的某个或某些属性。
在这里插入图片描述
HQL的分页查询
在这里插入图片描述
HQL的分组统计查询
在这里插入图片描述
HQL的多表查询
多表查询
连接查询
交叉连接:笛卡尔积

select * from A,B;

内连接 :inner join (inner 可以省略)
隐式内连接:

select * from A,B where A.id = B.aid;

显示内连接:

select * from A inner join B on A.id = B.aid;

外连接 :
左外连接:left outer join(outer 可以省略)

select * from A left outer join B on A.id= B.aid;

右外连接:right outer join(outer 可以省略)

select * from A right outer join B on A.id = B.aid;

子查询

HQL的多表查询
连接查询
交叉连接
内连接
显示内连接
隐式内连接
迫切内连接
外连接
左外连接
右外连接
迫切左外连接
在这里插入图片描述

4.QBC检索(##)
QBC查询:Query By Criteria,条件查询。是一种更加面向对象化的查询的方式。
1.简单查询
在这里插入图片描述
2.排序查询
在这里插入图片描述
3.分页查询

在这里插入图片描述
4.条件查询
在这里插入图片描述
5.统计查询

在这里插入图片描述

- 延迟加载:lazy(懒加载)。执行到该行代码的时候,不会发送语句去进行查询,在真正使用这个对象的属性的时候才会发送SQL语句进行查询。

  1. 类级别的延迟加载
    指的是通过load方法查询某个对象的时候,是否采用延迟。session.load(Customer.class,1l);
    类级别延迟加载通过上的lazy进行配置,如果让lazy失效
    将lazy设置为false
    将持久化类使用final修饰
    Hibernate. Initialize()

    2.关联级别的延迟加载
    指的是在查询到某个对象的时候,查询其关联的对象的时候,是否采用延迟加载。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值