Hibernate框架入门学习第二天

Hibernate 框架(第二天)

1.实体类编写规则(重点)

实体类编写规则

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

2.hibernate主键生成策略

​ 1.hibernate 要求实体类里面有一个属性作为唯一值,对应的表主键,主键可以不同生成策略

​ 2.hibernate 主键生成策略有很多的值
在这里插入图片描述

​ 3.在class属性中有很多的值

​ (1)native : 根据使用的数据库帮选择那个值
在这里插入图片描述

​ uuid : 之前web阶段写代码生成uuid值,hibernate 帮我们生成uuid值。
在这里插入图片描述

4.演示生成策略uuid

(1) 使用uuid生成策略,实体类id 属性属性必须 字符串类型
在这里插入图片描述

首先把这个地方的uid 修改为
在这里插入图片描述
重新生成他的Get和Set 方法

(2) 配置部分写出 uuid 值
在这里插入图片描述
测试生成
在这里插入图片描述
最好查看数据库
在这里插入图片描述

3.实体类操作

(1)CRUD操作(重点)
添加操作
调用session 里面的save 方法实现
关于这段代码的全部部分在本人的Hibernate 入门学习第一天中
在这里插入图片描述
根据id 查询
1.调用session 里面的get 方法实现
在这里插入图片描述
运行截图 SQL 执行的语句
在这里插入图片描述

修改操作
首先查询,修改值
数据库之前的数据
在这里插入图片描述
修改成功后的表数据
在这里插入图片描述

(1) 根据id 查询,返回对象

在这里插入图片描述
执行过程
在这里插入图片描述

删除操作
调用session里面的delete方法实现
在这里插入图片描述

实体类对象(概念)
1 瞬时态:对象中没有id 值,对象于session 没有关系,
一般用于添加操作
在这里插入图片描述

2.持久态:对象里面有这个id值,对象与session有关联
在这里插入图片描述

3.托管态:对象有id 值,对象中没有id 值,对象于session 没有关联
在这里插入图片描述

2.演示操作实体类对象的方法
(1)saveOrUpdate 方法:实现添加和修改
在这里插入图片描述
在这里插入图片描述

4. hibernate 的一级缓存
什么是缓存?
1.数据库到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。
(1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中读取数据
(2)把数据放到内存中,提高读取效率
Hibernate 缓存
1. hibernate 框架中提供很多优化方式,hibernate 的缓存就是一个优化方式
2. hibernate 缓存特点:
第一类:hibernate 的一级缓存
(1) hibernate 一级缓存默认打开
(2)hibernate 的一级缓存使用范围,是Session范围,从Session创建到Session 关闭范围
第二类 hibernate 的二级缓存
(1)目前已经不使用的,替代的是Redis
(2) 二级缓存默认不是打开的,需要配置
(3) 二级缓存使用范围,是sessionFactory 范围
验证一级缓存存在
1. 验证方式:
(1)首先根据Uid = 1,返回对象
(2)其次再根据uid = 1查询,返回对象
在这里插入图片描述
最终的效果展示:
在这里插入图片描述
第一步执行get 方法之后,发送sql语句查询数据库
第二句执行get方法之后,没用发送sql 语句,查询一级缓存内容
hibernate 一级缓存执行流程:
在这里插入图片描述
hibernate 一级缓存特性

  1. 持久态自动更新数据库
    在这里插入图片描述
    执行过程(了解)
    如图所示:
    在这里插入图片描述
    在这里插入图片描述

5. hibernate 的事务操作
(1)事务代码规范写法
代码结构:

try{
 	开启事务
 	提交事务 
}catch(){
	回滚事务
}finally{
	关闭
}

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

事务相关概念
1.什么是事务
2. 事务特性
3. 不考虑隔离性产生问题
(1)脏读
(2)不可重复读
(3)虚读
4. 设置事务隔离级别
(1)mysql 默认隔离级别 repeatable read
hibernate 其他的api(查询)

Hibernate 绑定session

  1. session 类似于jdbc的connection,之前web阶段学过threadLocal
  2. 帮实现与本地线程绑定session
  3. 获取与本地线程session
    (1) 在hibernate 核心文件中配置
    在这里插入图片描述
    (2)调用Session的方法
    在这里插入图片描述
    4获取与本地绑定session时候,关闭session报错,不需要手动关闭。
    在这里插入图片描述
    Hibernate 的api 使用
    Query 对象
    1.使用query 对象 不需要写SQL语句,但是要写hql 语句
    (1)hql: hibernate query language,hibernate 提供查询语言,这个hql 语句和普通语句很相似
    (2)hql 和sql 语句区别:
    使用sql 操作和表字段
    使用hql 操作实体类和属性
  4. 查询所有的hql 语句
    (1)from 实体类名称
  5. Query 对象使用
    (1)创建Query 对象
    (2)调用query 对象里面的方法得到结果

代码如下:

// 创建Query对象
// 方法里面写hql 语句
Query query  = session.createQuery ("from User");
// 调用方法得到结果
List <User> list = criteria.list();
for(User  user : list) {
System.out.println(Arrays.toString(user));
}```

Criteria 对象
	1.使用这个对象查询到,但是查询这个对象时候,不需要写语句,直接调用方法实现
	2. 实现过程
	(1)创建Criteria 对象
	(2)调用方法得到结果
	代码演示如下:

// 创建Criteria 对象
// 方法里面参数是实体类class
Criteria criteria = session.createCriteria(User.class);
// 调用方法得到结果
List list = criteria.list();
for(User user : list) {
System.out.println(Arrays.toString(user));
}
SQLQuery 对象
1.使用hibernate 时候,调用底层SQL 实现
2. 实现过程
(1)创建SQLQuery 对象
(2)调用方法得到结果

代码如下:

// list 返回的是数组
// 创建对象
// 参数普通sql语句
SQLQuery sqlquery = session.createSQLQuery("select * from t_user");
// 调用sqlQuery里面的方法
// 返回List 集合 ,默认里面每部分数据结构
List<Object[]> list = sqlQuery.list();
for(Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}

// 返回的list 每部分是对象
sqlQuery.addEntity(User.class);
//  调用sqlQuery里面的方法
List <User> list = sqlQuery.list();
for(User  user : list) {
System.out.println(Arrays.toString(user));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值