Hibernate02

今天内容

1 实体类编写规则

2 hibernate主键生成策略
(1)native
(2)uuid

3 实体类操作
(1)crud操作
(2)实体类对象状态

4 hibernate的一级缓存

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

6 hibernate其他的api(查询)
(1)Query
(2)Criteria
(3)SQLQuery

实体类编写规则

1 实体类里面属性私有的

2 私有属性使用公开的set和get方法操作

3 要求实体类有属性作为唯一值(一般使用id值)

4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
(1)八个基本数据类型对应的包装类
- int – Integer
- char—Character、
- 其他的都是首字母大写 比如 double – Double
(2)比如 表示学生的分数,假如 int score;
- 比如学生得了0分 ,int score = 0;
- 如果表示学生没有参加考试,int score = 0;不能准确表示学生是否参加考试
  解决:使用包装类可以了, Integer score = 0,表示学生得了0分,
  表示学生没有参加考试,Integer score = null;

Hibernate主键生成策略

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

  2. hibernate主键生成策略有很多的值
    3.

  3. 在class属性里面有很多值
    (1)native:根据使用的数据库帮选择哪个值
    在这里插入图片描述
    (2)uuid:之前web阶段写代码生成uuid值,hibernate帮我们生成uuid值
    在这里插入图片描述

  4. 演示生成策略值 uuid
    (1)使用uuid生成策略,实体类id属性类型 必须 字符串类型
    在这里插入图片描述
    (2)配置部分写出uuid值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

实体类操作

对实体类crud操作

添加操作

  1. 调用session里面的save方法实现
    2.

根据id查询

  1. 调用session里面的get方法实现
    在这里插入图片描述
    在这里插入图片描述

修改操作

  1. 首先查询,修改值
    (1)根据id查询,返回对象
    如果不查询直接更新,必须把对象所有变量都赋值,要不有的为null
    在这里插入图片描述
    在这里插入图片描述

删除操作

  1. 调用session里面delete方法实现
    在这里插入图片描述

实体类对象状态(概念)

  1. 实体类状态有三种
    (1)瞬时态:对象里面没有id值,对象与session没有关联
    在这里插入图片描述
    (2)持久态:对象里面有id值,对象与session关联
    在这里插入图片描述
    (3)托管态:对象有id值,对象与session没有关联
    在这里插入图片描述
  2. 演示操作实体类对象的方法
    (1)saveOrUpdate方法:实现添加、实现修改
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Hibernate的一级缓存

什么是缓存

1 数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。
(1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据
(2)把数据放到内存中,提供读取效率

Hibernate缓存

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

2 hibernate缓存特点:
第一类 hibernate的一级缓存
(1)hibernate的一级缓存默认打开的
(2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围
(3)hibernate的一级缓存中,存储数据必须 持久态数据

第二类 hibernate的二级缓存
(1)目前已经不使用了,替代技术 redis
(2)二级缓存默认不是打开的,需要配置
(3)二级缓存使用范围,是sessionFactory范围

验证一级缓存存在

  1. 验证方式
    (1)首先根据uid=1查询,返回对象
    (2)其次再根据uid=1查询,返回对象
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    第一步执行get方法之后,发送sql语句查询数据库
    第二个执行get方法之后,没有发送sql语句,查询一级缓存内容

Hibernate一级缓存执行过程

在这里插入图片描述

Hibernate一级缓存特性

  1. 持久态自动更新数据库
    在这里插入图片描述
  2. 执行过程
    在这里插入图片描述

Hibernate事务操作

1 什么是事务

2 事务特性

3 不考虑隔离性产生问题
(1)脏读
(2)不可重复读
(3)虚读

4 设置事务隔离级别
(1)mysql默认隔离级别 repeatable read

Hibernate事务代码规范写法

1 代码结构
try {
  开启事务
  提交事务
}catch() {
  回滚事务
}finally {
  关闭
}
	@Test
	public void testTx() {
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			//开启事务
			tx = session.beginTransaction();
			
			//添加
			User user = new User();
			user.setUsername("小马");
			user.setPassword("250");
			user.setAddress("美国");
			
			session.save(user);
			
			int i = 10/0;
			//提交事务
			tx.commit();
		}catch(Exception e) {
			e.printStackTrace();
			//回滚事务
			tx.rollback();
		}finally {
			//关闭操作
			session.close();
			sessionFactory.close();
		}
	}

Hibernate绑定session

  1. session类似于jdbc的connection,之前web阶段学过 ThreadLocal

  2. 帮实现与本地线程绑定session

  3. 获取与本地线程session
    (1)在hibernate核心配置文件中配置
    在这里插入图片描述
    (2)调用sessionFactory里面的方法得到
    在这里插入图片描述

  4. 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了
    在这里插入图片描述

Hibernate的api使用

Query对象

1 使用query对象,不需要写sql语句,但是写hql语句
(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似
(2)hql和sql语句区别:
- 使用sql操作表和表字段
- 使用hql操作实体类和属性

2 查询所有hql语句:
(1)from 实体类名称

3 Query对象使用
(1)创建Query对象
(2)调用query对象里面的方法得到结果

在这里插入图片描述

Criteria对象

1 使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现

2 实现过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果

在这里插入图片描述

SQLQuery对象

1 使用hibernate时候,调用底层sql实现

2 实现过程
(1)创建对象
(2)调用对象的方法得到结果

在这里插入图片描述
返回list集合每部分是数组
在这里插入图片描述
返回list中每部分是对象形式
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值