hibernate学习总结

什么是持久层
介绍hibernate之前先说说什么是持久层
在三层体系结构有表示层 业务逻辑层 数据库层 ,为了把数据访问细节和业务逻辑分开,可以把数据访问作为单独的持久化层 也就是说持久层在数据库层与业务逻辑层中间
在这里插入图片描述
所谓持久,就是把数据保存到可以永久保持的存储设备当中。一般来说,持久更为直接的理解就是对数据库的各种操作,如CRUD(增加,删除,修改,查询),更新等操作,
持久层,就是把持久的动作封装成一个独立的层,这是为了降低功能代码之间的关联。创建一个更清晰的抽象,提高代码的内聚力,降低代码的耦合度,从而增强代码的要劳动局生和可重用性。

什么是hibernate
hibernate是属于轻量级封装框架是对JDBC API的封装,在分层体系结构中位于持久化层,是连接Java应用程序和关系型数据库的框架建立对象模型和关系数据模型之间的映射,是一种自动ORM框架, hibernate增加代码的重用率简化代码提高编程效率 也就是说我们不用再编写复杂的sql语句 由hibernate完成

对象-关系映射(ORM)
ORM全称是Object Relational Mapping。
既然hibernate使用的是对象模型关系数据模型之间的映射就要说说什么是对象-关系映射。ORM 技术是在实体类对象和数据库表之间提供了一条桥梁,对象型数据和数据库中的关系型数据通过这个桥梁来相互转化。简单来说是让 类与数据库表对应。在这里插入图片描述
hibernate的使用
介绍完什么是hibernate之后肯定要说说hibernate的使用
1.打开eclipse创建新项目
2.引入hibernate的jar包 还有数据库jar包
在这里插入图片描述
3.编写hibernate配置文件

在这里插入图片描述

实现第一个hibernate(基于xml配置)

编写hibernate配置文件hibernate.cfg.xml
在这里插入图片描述
在编写hibernate核心配置文件时候要注意的地方
< hibernate-configuration>根元素其他的要包在里面
< session-factory>保存配置信息以及session操作
必不可少的操作
1.指定数据库类型
< property name=“hibernate.dialect”> 类型< /property>
2.配置数据库的驱动程序,
< property name=“hibernate.connection.driver_class” >com.mysql.jdbc.Driver < /property>
3.设置数据库的连接url
property name=“hibernate.connection.url”
4.连接数据库时的用户名
< property name=“hibernate.connection.username”>root<
5.连接数据库时的密码
< property name=“hibernate.connection.password”>
6.指定映射文件 可指定多个映射文件
在编写指定映射文件中有两个方式
< mapping class=“com.test.entity.Product”/>
< mapping resource=“com/test/entity/Product”/>

编写封装工具类hibernateUtils
在这里插入图片描述
第一步加载核心配置文件得到一个 Sessionfactor对象该对象用来产生session 注意在使用cfg=new Configuration().configure();要把核心配置文件放在src目录下如果不是该目录下要在Configuration()后面加上完全限定名
第二步获取factory对象 (产生session)
第三步获取session对象 (操作数据库)
编写实体类Product(Javabean)
在这里插入图片描述

编写关系映射文件hibernate.hbm.xml
在这里插入图片描述
映射文件中两个标签
< hibernate-mapping package=“com.test.entity”>指定实体类的位置
< class name=“Product” table=“products” lazy=“true”>实体类的名字与数据库中的表名对应 类-表
子元素< id name=“id” column=“id” > 主键 id是唯一的
< generator class=“identity”> 设置 id 主键的生成方式
在这里插入图片描述
< property name=“name” column=“name” >类中的属性与列对应
< property name=“price” column=“price”> < /property>
< property name=“description” column=“description” >< /property>

编写测试类 Text
测试删除
在这里插入图片描述
声明对象session tran,
获取session对象开启事务
先查找session.load
后删除session.delecttran
tran.commit();事务开启
tran.rollback();事务回顾
session.close();释放资源
增查改都差不多

hibernate 关系映射
一对多关系映射
多对多关系映射
一对一关系映射

一对多关系映射
在一的一端的集合上使用< key >,在对方表中加入一个外键指向一的一端;
在这里插入图片描述
name属性为 要映射的属性名 由多的一方维护外键 inverse=ture
key标签指定的外键字段必须和 < many-to-one>指定的外键字段一致

在多一端采用< many-to-one >
在这里插入图片描述
测试类
在这里插入图片描述
多对多关系映射
在多对多关系映射中有两个方式不过无论通过哪个方式实现多对多关系映射都需要第三张表 也就是中间表 中间表里面保存的就是多对多关系映射的外键

第一种(需要三个映射文件)一个映射文件创建中间表 指向需要多对多关系映射的另外两张表 另外两张表使用 one-many 指向中间表
把多对多拆分成两个一对多
在这里插入图片描述

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

第二种方式(需要两个映射文件)由两个映射文件实现多对多关联生成第三张表
在这里插入图片描述
在这里插入图片描述

set name=要关联的属性 table 为表名 inverse=true 放弃外键维护
key元素中的 指定的外键字段必须和 < many-to-many>指定的外键字段一致
many-to-many元素 class=“类” column=“外键名”
简单来说 course 自己一张表 set中 指定一张表 key 是自己的外键名字 m是要建立映射的类 与那个类中外键的名字

一对一关系映射
一对一关系映射中有两种方式 一个是通过主键关联 二是通过唯一外键关联
1.通过主键关联
在这里插入图片描述
在这里插入图片描述
需要注意的地方是
< generator class=“foreign”>
< param name=“property”>person< /param>
主键生成策略为foreign 也就是 id的生成方式是引用表 people的主键
constrained 属性为 true,表明 idcard 表 ID 为外键,参照主表(person)。
one-to- one的双向关联中,必须设置constrained=true,要不然会有重复数据读,

第二种方式 通过唯一外键关联

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
column 属性指明外键列;
unique 属性设置为 true,表明唯一约束
cascade 属性设置为 all
property-ref 属性,表明建立了从User到Person的一对一关联关系

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值