hibernate入门干货

@hibernate入门干货

一.Hibernate基础知识

纯干货,没有任何添加素

1.什么是Hibernate?

Hibernate是一个开放源代码的对象关系映射框架,它对 JDBC进行了非常轻量 级的对象封装,它将POJO类与数据库表建立映射关系,是一个全自动的ORM 框架,hibernate可以自动生成SQL语句,自动执行。Hibernate可以应用在任 何使用 JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP 的Web应用中使用。

2.什么是持久化?

狭义的理解:“持久化”仅仅指把域对象永久保存到数据库中; 广义的理解,“持久化”包括和数据库相关的各种操作。
● 保存:把域对象永久保存到数据库。
● 更新:更新数据库中域对象的状态。
● 删除:从数据库中删除一个域对象。
● 加载:根据特定的OID(对象ID),把一个域对象从数据库加载到内存。
● 查询:根据特定的查询条件,把符合查询条件的一个或多个域对象从数据库加 载内在存中。

3.为什么要持久化?

持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API。
● 通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;
● 代码重用性高,能够完成大部分数据库操作;
● 松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时 只需修改配置文件而不用修改代码。

4.Java中的ORM框架有哪些?

ORM(object relation mapping)框架的作用是将java对象和数据库的对象 (表、视图)之间建立起映射关系。 结果:在java后台操作java对象就相当于操作数据库的表了。 常见的Java中的ORM框架有: Hibernate\MyBatis\JPA

5.Hibernate中的数据对象操纵语言HQL、SQL、HQL、PL/SQL、JDBC区别

hql:操作的是对象和属性; sql:操作的是表和字段,属于面向对象的查询语言。 HQL是Hibernate Query Language的缩写,格式如下:
[select/update/delete……]
from Entity [where……]
[group by……] [having……]
[order by……]
1 hql : FROM user where id=‘1’;
2 sql : FROM TB_USER where id= ‘1’

6.Hibernate阻抗不匹配问题

为了解决数据库和Java之间的阻抗不匹配问题,hibernate可以配置完成有数据库 类型到Java对象类型的转换。 java基础类、Java包装类的差别(略)
MySQL数据库类型 <=> Java对象类型(建议使用Java包装类)
int <
=> Integer long <=> Long
float\decimal\number\numberic<
=> Float
float <=> Float
double <
=> Double
char\varchar <=> String
tiny blob\medium blob\long blob<
=> byte[]
boolean <=> Boolean
date\time\timestamp <
=> date\time

二、Hibernate工作原理

1.通过 Configuration().configure(); 读取并解析 hibernate.cfg.xml 配 置文件。
2.由hibernate.cfg.xml中的 <mappingresource=“xx/xx/xxx.hbm.xml”/> 读取解析映射信息。
3.通过 config.buildSessionFactory(); 得到 sessionFactory。 4.sessionFactory.openSession();得到 session。 5.session.beginTransaction(); 开启事务。 6.session.getTransaction().commit(); 提交事务
7.关闭 session.close;

三、Hibernate持久化类与 主键生成策略

在 hbm.xml 中可以设置的主键生成策略如下:
1.increment: 代理主键。由 hibernate 维护一个变量,每次生成主键时自 动以递增。 问题:如果有多个应用访问一个数据库,由于每个应用维护自己 的 主键。此时主键可能冲突。建议不采用。
2.identity:代理主键。由底层数据库生成维护。条件是数据库支持自动增长 数据类型。 比如:mysql 的自增主键,oracle 不支持主键自动生成。如果数据 库支持自增建议采用。注解方式时可以采用这个代替native。
3.sequence:代理主键。Hibernate 根据底层数据库序列生成标识符。条件 是数据库支持序 列。比如 oracle 的序列。如果数据库支持序列建议采用。 4.native :代理主键。根据底层数据库对自动来选择 identity、 sequence、hilo:生成主键策略的控制权由 hibernate 控制。注意在 hibernate教程中采用此选项。
5.uuid:代理主键。Hibernate 采用 128 位的 UUID 算法来生成标识符。该 算法能够在网络环境中生成唯一的字符串标识符。此策略可以保证生成主键的唯 一性,并且提供了最好的数据库插入性能和数据库平台的无关性。建议采用。
6.assigned:自然主键。由 java 程序负责生成标识符。不建议采用。

四、Hibernate事务管理

1.事务特性 (ACID) 事务具有ACID属性
(1)原子性(Atomic):事务由一个或多个行为绑在一起组成,好像是一个单独 的工作单元。原子性确保在事务中的所有操作要么都发生,要么都不发
(2)一致性(Consistent):一旦一个事务结束了(不管成功与否),系统所处的状 态和它的业务规则是一致的。即数据应当不会被破坏。
(3)隔离性(Isolated):事务应该允许多个用户操作同一个数据,一个用户的 操作不会和其他用户的操作相混淆。
(4)持久性(Durable):一旦事务完成,事务的结果应该持久化。 事务的ACID特性是由关系数据库管理系统(RDBMS)来实现的。
2.事务的并发问题: 第一类丢失更新:撤消一个事务时,把其它事务已提交的更新的数据 覆盖了。脏读:一个事务读到另一个事务未提交的更新数据。 幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一 些数据行。 不可重复读:一个事务两次读同一行数据,可是这两次读到的数据不 一样。
3.事务的隔离级别: 隔离性是通过数据库的表或字段加锁实现的。事务隔离级别分为以下四种:
(1) Read Uncommitted 读未提交
一个事务可以读取另一个事务已更新但未提交的数据,但另一事务提交前 不允许写入。
(2) Read committed 读提交(SQL Server、oracle默认事务) 一个事务仅可以读取另一个事务已提交的更新数据。
(3) Repeatable read 重复读 一个事务已读取的数据不允许其他事务的写入。
(4)Serializable 序列化 所以事务序列化进行,不能并发执行。
4.hibernate中设置事务的隔离级别:
1.读未提交
2.读已提交
3.可重复读
4.串行化

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页