hibernate是一个全自动对象关系映射框架,值得你去使用一番.
hibernate路线图
- Hibernate 简介(优点和缺点)
- Hibernate 入门案例(基于XML的操作方式)
- Hibernate 配置文件详解(基于xml的方式)
- Hibernate 常用api介绍 (事务,回顾脏读,不可重复读(行级,读更改),幻读(表级读新增)以及数据库隔离级别.并发事务的解决悲观锁和乐观锁机制)
- 使用Hibernate框架完成 CRUD 操作
- Hibernate 的对应关系详解(使用注解的方式进行配置,摘取一对多进行代码数据示例操作)
Hibernate 简介
同样的hibernate框架是基于jdbc轻量级进行的封装在这里我们再次提到一下这个叫做ORM(面向对象进行数据结构的设计)
- 面向对象进行数据结构的设计和数据库表的设计有什么不同
- hibernate讲究的是全自动对象映射,与mybatis不同,mybatis讲究的是半自动映射
- 最先本质是为了解决java程序员设计对象的问题,是java的开发人员不关心数据库设计和范式定律
- 随着业务场景的复杂以及追求可插拔的高度自由化,当然同时也是为了以后springBoot中使用JPA做铺垫,hibernate中我们除了在初次使用的时候使用XML配置后,hibernate的级联关系操作我们采取使用注解的方式进行操作
- 准确的来说hibernate有的东西,mybatis也有.
Hibernate 入门案例(基于XML的操作方式)
1.构建一个新的项目(引入的jar包)
2.分别编写实体和对应的映射文件person.clas 和 pserson_hbm.xml
1 | public class Person { |
3.编写全局声明配置文件 src下 (log4j保持最先的一致)
1 | <!DOCTYPE hibernate-configuration PUBLIC |
4.构建操作,对比mybatis执行流程动作
1 | /** |
观察控制台的输出结果以及数据库表的结构
Hibernate配置文件详解
关于person映射文件以及全局文件详见代码说明
Hibernate常用api介绍
- 基本上大部分的框架都有一个叫做config的接口(使用xml解析填写的配置文件)
- xxxFactory,万物皆有工厂造出来,不会平白无故的生成(工厂模式)
- 工厂虽然可以有很多,工厂很庞大,庞大就耗资源,所以我们才考虑对象的生成(单例模式)
(1)事务的ACID
- 原子性(Atomicity) 要么买要么就不买
- 一致性(Consistency)有买有卖,不能空仓打粮仓
- 隔离性(Isolation) 大家交易同一个物品的时候(互相又看不到)但是又不应该出现价格的相互影响(信息的壁垒)
- 持久性(Durability) 有迹可循,有记录
(2)事务并发
多个线程访问数据库同一条数据
- 脏读
- 不可重复读
- 幻读
不可重复读发生点在一行上面,而幻读是发生在整张表上面
行级锁机制和表级锁都等同于操作上面仅且只有一个事务
补充说明:通过数据所提供的隔离级别(由低到高)
- ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
- ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
- ISOLATION_REPEATABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
- ISOLATION_SERIALIZABLE:这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。
重点说明 (操作数据都是先查在操作)
- 悲观锁机制:也就是同步执行,一个一个来 查询语句加上for update
- 乐观锁: 使用版本号的机制
- 大家先查,看到的版本默认为1
- 做增加删除修改的时候在版本号上面加1 帅选条件要根据当前版本号 最后提交总有先后
- 有一个操作一定会发生异常,通过捕获异常来进行下一步的处理
使用 Hibernate 框架完成 CRUD 操作
1 | public class TestHT { |
Hibernate的对应关系详解 (采用注解的方式)
1.一对一双向注解
Dad类
1 | package com.wwj.onetoone; |
Son类
1 | package com.wwj.onetoone; |
2.一对多双向注解
Dad类
1 | package com.wwj.onetomany; |
Son类
1 | package com.wwj.onetomany; |
3.多对多双向注解
Dad类
1 | package com.wwj.manytomany; |
son类
1 | package com.wwj.manytomany; |