Hibernate_day02---实体类操作、对象状态、一级缓存、事务操作、API

版权声明:转载请联系作者本人!!! https://blog.csdn.net/qq_41307491/article/details/82823244

一、实体类编写规则


1)实体类里面属性私有的

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

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

4)实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
应用环境:可以解决区分出 值为零(score=0)和值不存在(score=null)两种情况

八个基本数据类型对应的包装类
		int – Integer
		char—Character、
		其余六种都是首字母大写 比如 double – Double

二、Hibernate主键生成策略


1) 实体类中有一个属性作为唯一值,对应表中主键.
 
2) 在class中的不同策略(属性值):
		1)native: 根据使用的数据库帮选择哪个值
		2)uuid:生成uuid值
		插图:

在这里插入图片描述

演示生成策略值 uuid

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

三、实体类操作


对实体类crud操作

	@Test
	public void crudTest() {
		//1 调用工具类得到sessionFactory
		SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
		//2 获取session
		Session session = sessionFactory.openSession();
		//3 开启事务
		Transaction tx = session.beginTransaction();

		/*
		 * 根据id查询   
		 *
		 * session.get(类名.class, id值); 
		 * 		参数一:实体类的class
		 * 		参数二:id值
		 */
		User user = session.get(User.class, 1);
		
		
		/*
		 * 修改:
		 * 1)先查询,
		 * 2)再设置修改值,
		 * 3)update方法完成更新
		 */
		 User user = session.get(User.class, 2);   //查询
		 user.setUsername("岳不群");  //设置
		 session.update(user);  //更新修改
		
		/*
		 * 删除:
		 * 1)先查询,
		 * 2)delete方法删除查询结果
		 */
		User user = session.get(User.class, 2);  //根据id查询对象
		session.delete(user);   //删除查询结果
		
		/*
		 * 添加:
		 * 1)创建对象、 
		 * 2)对对象进行属性设置、
		 * 3)save方法完成添加
		 */
		User user = new User();
		user.setUsername("小王");
		user.setPassword("250");
		user.setAddress("日本");
	
		session.save(user);  //实现添加


		
		//5 提交事务
		tx.commit();
		//6 关闭
		session.close();
		sessionFactory.close();	
	}
}

实体类对象状态(三种)

	1)瞬时态:对象里面没有id值,对象与session没有关联
 
	2)持久态:对象里面有id值,对象与session关联
 
	3)托管态:对象有id值,对象与session没有关联
 
saveOrUpdate方法:
	1)可以实现添加、修改两个功能。
	2)虚拟机将根据实体类不同状态,执行不同功能
	
	总结:无id时,做添加。有id时,做修改

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

四、Hibernate中的缓存


缓存:把数据存到内存里面

作用:可以直接从内存中读取数据,提供读取效率

背景:数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。

Hibernate缓存:是hibernate框架中提供的多种优化之一。

Hibernate缓存分为两级

一级缓存:
	 1)默认打开
	 2)使用范围:session范围。从session创建到session关闭的范围
	 3)存储数据状态要求:必须是持久态数据

二级缓存:
	 1)目前已经不使用了,被redis技术替代
	 2)默认关闭,打开则需要配置
	 3)二级缓存使用范围,是sessionFactory范围

验证一级缓存的存在
	做法:多次查询相同记录,
	现象:只有第一次会输出sql语句查询数据库。则证明一级缓存存在。

Hibernate一级缓存特性
	根据持久态操作,自动更新数据库。

Hibernate一级缓存执行过程
在这里插入图片描述

五、Hibernate事务操作


事务相关概念
1) 什么是事务
	一组不可分割的操作。统一成功或统一失败
2) 事务特性
	原子性、一致性、隔离性、持久性
3) 不考虑隔离性产生的问题
	1)脏读
	2)不可重复读
	3)虚读

4) 设置事务隔离级别(解决三种错误读方式)
(1)mysql默认隔离级别 repeatable read

Hibernate事务代码规范写法:

	代码结构:
		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)在hibernate核心配置文件中配置**

在这里插入图片描述
2)调用sessionFactory里面的方法得到
在这里插入图片描述

七、Hibernate的api使用


Query对象

使用query对象,使用hql语句
hql:hibernate query language,hibernate提供查询语言。普通sql语句很相似
	1)hql和sql语句区别:
		- 使用sql操作表和表字段
		- 使用hql操作实体类和属性

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

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

在这里插入图片描述

Criteria对象

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

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

在这里插入图片描述

SQLQuery对象

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_41307491/article/details/82823244
今日推荐