Hibernate学习——Day02

前言

继续记录我的Hibernate学习之路

开始

一、实体类编写规范

1.实体类里面的属性是私有的prevate
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主键生成策略有很多不同的值

<!-- 设置数据库表id增长策略为主键id自动增长 -->
            <generator class="native">
            </generator>

3.在class属性里面有很多值,主要记住下面两个
(1)native 根据你使用的数据库自动帮你选相应的值
(2)uuid 之前web阶段写代码生成uuid值,现在Hibernate帮我们生成uuid值。使用这个uuid生成策略,实体类id属性类型必须是字符串类型

三、对实体类CRUD操作

1.添加
调用session里面的save方法实现
session.save(user);

2.根据id查询
调用session里面的get方法,其中需要两个参数
第一个参数:实体类的class 例:User.class
第二个参数: id值 例:1

3.修改
执行过程:首先查询,再修改
(1)先根据id查询,返回对象
(2)想返回的对象里面设置修改之后的值 例:user.setUsername(“xxx”);
(3)调用session里面的方法update修改 例:session.update(user);

4.删除
一般有两种方式

第一种方式:根据id查询对象
调用session里面的delete方法实现

扫描二维码关注公众号,回复: 2149588 查看本文章

第二种方式

User user = new User();
user.setUid(3);
session.delete(user);

四、实体类对象的状态

实体类的对象状态有三种:
1.瞬时态:对象里面没有id值,对象与session没有关联
2.持久态:对象里面有id值,对象与session有关联
3.托管态:对象里面有id值,对象与session没有关联

五、Hibernate的一级缓存

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

2.Hibernate缓存
Hibernate框架中提供很多优化方式,Hibernate中的缓存就是一种优化方式
Hibernate缓存特点:

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

Hibernate的二级缓存
(1)目前已经不使用了,替代技术redis
(2)二级缓存默认不是打开的,需要配置才能完成
(3)二级缓存的使用范围,是SessionFactory的范围

3.验证一级缓存的存在
验证方式:
首先根据uid=1查询,返回对象
然后再根据uid=1查询,返回对象,看看是否有sql输出语句

4.一级缓存的执行过程
这里写图片描述

5.Hibernate一级缓存的特性
持久态自动更新数据库
不需要执行下图第三句,就可以实现数据的修改
这里写图片描述
原理:
这里写图片描述

六、Hibernate事务代码规范写法

1.先说说事务相关概念:
(1)什么是事务
事务是操作中最基本的单元,操作的结果要么全部成功,要么全部失败

(2)事务的特性
原子性,一致性,隔离性,持久性

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

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

2.Hibernate事务代码规范写法
代码结构:

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

这里写图片描述

七、Hibernate绑定Session

1.Session类似JDBC中的connection,之前web阶段学过threadLocal,Session的
底层就是threadLoacl
2.Hibernate帮我们实现了与本地线程绑定的Session,不需要我们在复写
3.获取与本地线程绑定的session
(1)在Hibernate核心配置文件中配置

 <!-- 这是Hibernate事务管理方式,即每个线程一个事务 -->
        <property name="current_session_context_class">thread</property>

(2)调用SessionFactory里面的方法得到
这里写图片描述

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

后记

我们的学习暂时就到这里,请期待后续学习更新

猜你喜欢

转载自blog.csdn.net/zyw644451/article/details/80363566