hibernate笔记

web内容回顾

  1. javaee三层结构

1.web层,也就是view层,struts2

2.service层,spring

3.dao层,hibernate

 (1)对数据库进行crud操作

  1. mvc思想

1、m  model

2、v  view

3、c  controller

Hibernate概述

  1. 什么是框架
  1. 写程序,写框架之后,会帮我们实现一部分功能,使用框架的好处,少写一部分代码实现功能。
  1. 什么是Hibernate框架
  1. Hibernate框架应用在javaee三层框架的dao层。
  2. 在dao层里面做对数据库的crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂的jdbc代码。不需要写sql语句实现。
  3. Hibernate是开源的轻量级框架。
  4. Hibernate版本,Hibernate3.x,Hibernate4.x,Hibernate5.x

Orm思想

  1. hibernate使用orm思想对数据库进行crud操作。
  2. web阶段血洗javabean,更正确的叫法叫实体类
  3. orm  object   relational  mapping  对象关系映射

文字描述

  1. 让实体类和数据库表进行一一对应的关系

让实体类的属性和表里面的字段进行对应

  1. 不需要操作数据库表,只需要操作对象的实体类的对象即可。

画图描述: jdbc代码

 

 

 

hibrenate入门案例

搭建hibernate环境

  1. 导入hibernate的jar包

还需要日志信息输出的jar包,比如log4j

  1. 创建一个实体类

注意:hibernate实体类中必须有一个属性的值是唯一的

  1. 使用hibernate的时候,不需要自己手动创建表,hibernate,会自动创建数据库表
  1.  使用配置文件实现映射关系
  1. 创建一个xml格式的配置文件

--映射配置文件名称和位置没有固定要求

--建议,在实体类所在包里面创建,实体类名称*hbm.xml

   (2)配置是xml格式,在配置文件中首先引入xml约束,在hibernate中引入dtd约束

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 

</hibernate-mapping>

(3)配置映射关系

(4)创建hibernate核心配置文件,核心配置文件的名称的名称和位置是固定的

--位置必须在src下面,名称必须叫,hibernate.cfg.xml

--引入dtd约束

--hibernate,在操作过程中只会加载核心配置文件,其他配置文件不会加载。

第一部分:配置数据库信息。

第二部分:配置hibernnate信息

第三部分:把映射文件放到核心配置文件中

 

实现添加操作

第一步: 加载hibernate核心配置文件

第二步:创建sessionFactory对象

第三步;使用sessionFactory创建session对象

第四步:开启事务

第五步,写具体crud操作

第六步:提交事物

第七步:关闭资源

hibernate配置文件

  1. hibernate映射配置文件
  1. 映射配置文件名称和位置没有固定要求
  2. 映射配置文件中,配置name属性值写实体类的相关内容
  1. class标签name属性值写实体类的全路径
  2. id标签和property标签和name属性值,实体类属性名称
  1. id标签和property标签,colum属性可以省略
  1. 不写column的值column属性值和name一样

   (4)property标签type属性,设置生成表字段的类型

2.hibernate核心配置文件

   (1)配置文件必须写在以下标签里面

  1. 配置文件三部分要求
  1. 数据库部分是必须的
  2. Hibernate部分是可选的
  3. 映射文件是必须的
  1. 位置和名称是固定的
  1. 位置在src下面
  2. 名称为hibernate.cfg.xml

hibernate的api使用

Configuration

  1. 代码

  1. 到src下面找到名为hibernate.cfg.xml的配置文件,创建对象,把配置文件放到对象里面

 

 

SessionFactory(重点)

  1. 使用configuration可以创建SessionFactory对象
  1. 创建SessionFactory对象过程

--根据核心配置文件中,有数据库配置,有映射文件部分,在数据库中把表创建

  1. 创建SessionFactory过程中,这个过程十分耗费资源
  1. 在hibernate操作中,建议一个项目一般创建一个SessionFactory
  1. 具体实现,写工具类,写静态代码块实现,静态代码块在类加载时执行,且只执行一次

 

Session(重点)

  1. session类似于jdbc中的connection
  2. 调用session里面不同的方法实现crud操作
  1. 添加,save方法
  2. 修改,update方法
  3. 删除,delete方法
  4. 根据id查询 get方法
  1. session对象单线程
  1. session对象不能共用,只能自己使用。

 

 

Transaction(事物)

  1. 事物对象

  1. 事物的提交和回滚方法

  1. 事物概念
  1. 事物四个特性:原子性、一致性、隔离线、持久性。

 

实体类编写规则

  1. 实体类里面的属性是私有的
  2. 私有属性使用公开的set和get方法操作
  3. 要求实体类有属性作为唯一的值,一般用id
  4. 实体类里面的属性建议不使用基本数据类型,使用基本数据类型的对应的包装类。

  int  -integer

char-character;

其他都是首字母大写,比如:double-Double

  1. 比如学生的分数,假如:int score 比如学生得了0分,int score=0;

假如学生没有参加考试,int score=0不能准确表示学生是否参加考试

解决:使用包装类即可,Integer score=null;即可表示为学生没有参加考试。

Hibernate主键生成策略

  1. hibernate主键生成策略有很多的值,

  1. class属性里面有许多的值
  1. native根据使用的数据库自动选择合适参数
  2. uuid可以自动生成唯一的字符类型的主键(不自增但是唯一)

实体类操作

  1. 添加操作,调用session中的save方法。
  2. 根据id查询,调用session里面的get方法

  1. 修改操作
  1. 先根据id查询,再修改。

4.    删除操作

1.根据id查询出对象,再根据对象删除

2.创建一个包含id的对象,再根据创建的对象删除(不常用)

实体类的对象的状态

1.瞬时态:对象里面没有id值,对象与session没有关联

2.持久态:对象里面有id值,对象与session有关联

3.托管态:对象里面有id值,对象与session没有关联

SavaOrUpdate的方法若是遇到瞬时态则实际上是save方法,若遇到持久太或者是托管态则实际上是update方法。

Hibernate中的一级缓存

1.数据存在数据库里面,数据库本身是文件系统,使用流的方式操作文件效率不是很高。

(1)把数数据存到内存里面,不需要使用流的方式,可以直接读取内存中的数据

(2)把数据放到内存中提升读取效率

2.hibernate框架中提供很多的优化方式,hibernate的缓存就是一个优化方式

3.hibernate缓存特点:

第一类 hibernate的一级缓存

(1)hibernate的一级缓存是默认打开的

(2)hibernate的一级缓存有使用范围,是session的范围,也就是从session创建到关闭的范围。

(3)hibernate的一级缓存中,存储的数据必须是 持久态数据。

第二类 hibernate的二级缓存

(1)目前已经不使用了,替代技术redis。

(2)二级缓存默认不是打开的,需要配置

(3)二级缓存默认使用范围是sessionFactory的范围。

 

验证一级缓存的存在

1.验证方式

(1)首先根据uid=1查询,返回对象

(2)再次根据uid=1查询,返回对象

   Hibernate一级缓存特性

(1)持久态自动更新数据库

(2)创建一级缓存的同时也会创建一个一级缓存快照区。

      1.当查询时,持久态数据会保存两份,一份在一级缓存,一份在快照区。

2.在对查询的结果修改时,会修改一级缓存中的内容,但是快照区的内容不变。

3.当提交事务时,先对比快照区和一级缓存的内容,若是一致,则不对数据库做操作,若不同,则将一级缓存的内容保存修改进数据库。                

                                                                                 

                                                                                                                                                                

Hibernate事务操作

1.事物特性:原子性,一致性,隔离线,持久性。

2.不考虑隔离性产生问题

(1)脏读

(2)不可重复读

(3)虚读

3.设置事务隔离级别

(1)mysql默认的事务隔离级别 repeatable read;

Hibernate事务规范写法

1.代码结构

Try{

开启事务

提交事务

}

Catch{

回滚事务

} finally{

关闭资源

}

 

Hibernate绑定session

1.session类似于jdbc中的connection,TheadLocal;

2.hibernate帮我们实现了与本地线程绑定ThreadLocal;

3.获取与本地线程绑定的session

 (1)在hibernate核心配置文件中配置

(2)在工具类中写得到与本地线程绑定的session方法

 (3)当使用与本地线程绑定的session时,不需要手动去关闭

Hibernate的api使用

Query对象

1.使用query对象需要些hql语句

 (1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通语句很相似。

(2)hql和sql语句区别

-使用sql操作表和表字段

-使用hql操作实体类和属性

2.查询所有hql语句

(1)from 实体类名称;

 3.Query对象的使用

   (1)创建Query对象

   (2)调用对象的方法

Criteria对象

1.使用这个对象也可实现查询操作。

2.实现过程

SQLQuery对象

1.使用hibernate时,也可以写底层sql语句。SQLQuery就是用来写底层的sql语句的

2.实现过程

(1)调用对象

(2)返回的list集合每部分是数组。

表与表之间的关系回顾

1.一对多

(1)分类和商品的关系,一个分类里面有多个商品,一个商品只能属于一个分类

(2)客户和联系人是一对多关系

 --客户:与公司有业务往来的人;

--联系人:公司里面的员工。

(3)通过外键来建立关系,在多的那一张表建立一个外键指向一的那一方

2.多对多

(1)订单和商品,一个订单里面可以有多个商品,一个商品可以属于多个订单。

(2)用户和角色多对多关系

用第三张表来维护两者之间的关系

3.一对一

(1)

Hibernate一对多的操作(重点)

一对多的映射配置

1.以客户联系人为例

(1)创建两个实体类,客户和联系人

(2)让这个实体类之间先互相进行表示

1.在客户实体类里面表示多个联系人

一个客户里面有多个联系人

2.在联系人实体类里面表示所属客户

一个联系人只能属于一个客户·

3.配置映射关系

(1)一般一个实体建立一个配置文件

(2)在配置文件中配置基本的映射。

(3)在映射文件中配置一对多关系

---在客户映射文件中表示所有联系人

--在联系人映射文件中表示所属的客户

4.创建核心配置文件

(1)导入配置文件

一对多的级联操作

1.级联操作

(1)级联保存

  1.添加一个·客户,为客户添加多个联系人,也就是同时操作两个表来保存。

  1.简化写法

--一般都是根据客户来添加联系人

第一步,在客户映射文件中进行配置

(2)级联删除

  1.删除某个客户,客户的所有的联系人也要被删除

  2.具体实现

(1)使用属性cascade属性值delete

 

一Hibernate 查询方式

1.对象导航查询

1.查询某个客户里面的所有联系人的过程,使用对象导航来实现

2.代码

2.OID查询

1.根据id查询记录

3.hql查询

1.常用的hql语句

2.hql进行查询操作时,要使用Query对象来实现。

(1)创建一个query对象

(2)调用query对象里面的方法得到结果

1.查询所有

 

2.条件查询

1.from 实体类名称 where 实体属性名称=? And 实体属性名称=? From 实体类名称 where 实体类属性名称 like?

3排序查询

4.分页查询

5.投影查询

6.聚集函数使用

4.qbc查询

 

 

Hql多表查询

1.mysql里面多表查询

(1)内连接查询

(2)外连接查询、左外连接、右外连接;

 

 

 

 

5.本地sql查询

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值