Hibernate框架学习笔记(二)
6.实体类的编写规则
1.实体类里面的属性都是私有的。
2.其对应的set和get方法都是public。
3.要求实体类有属性所谓唯一值。
4.实体类属性建议不使用基本数据类型,而是使用基本数据类型对应的包装类。
int---->Integer
char--->Character
而其他的包装类都是首字母大写 如:double-->Double。
为什么要这样建议:
——比如 表示学生的分数,int score;
——比如学生得了0分,int score=0;
——如果学生没有参加考试,int score=0;
这样的话就没法区分这两种情况了。但如果使用包装类,就可以解决这个问题。
7.Hibernate的主键生成策略
1.Hibernate中的主键生成策略有很多的值
2.class属性中有很多的值,其中比较重要的有两个:
(1)native: 根据使用的数据库帮选择是哪个值。
(2)uuid: 能够自动的生成唯一的子符串标识符。
8.实体类对象的状态(概念)
(1)瞬时态: 对象里面没有id值,对象和session没有关联。
(2)持久态:对象里面有id值,对象和session有关联。
(3)托管态:对象里面有id值,对象和session没有关联。
9.Hibernate的缓存
Hibernate 缓存
1.Hibernate框架中提供了很多的优化方式,使用缓存也是一种优化机制。
第一类 Hibernate的一级缓存
(1)hibernate的以及缓存默认打开的
(2)hibernate的以及缓存使用范围,是session范围,从session创建到session关闭。
(3)hibernate的以及缓存中,存储数据必须是持久态数据。
第二类 Hibernate的二级缓存
(1)目前已经不使用了,替代技术是redis
(2)一个缓存使用范围,是sessionFactory范围
验证一级缓存的存在:
(1)首先根据uid=1查询,返回对象
(2)其次根据uid=1查询,返回对象,两次在同一个session中查询,第二次就是在一级缓存中查询到的,所以在第二次查询控制台就没有信息输出。
其执行过程:
Hibernate一级缓存的特性:
2.该执行过程:
10.Hibernate事务操作
1.不考虑隔离性产生的问题
(1)脏读
(2)不可重复读
(3)虚读
2.设置事务的隔离级别
(1)MySQL默认的隔离级别是 repeatable read
3.Hibernate中事务代码规范的写法
(1)规范的代码结构:
try{
开启事务
关闭事务
}catch(){
回滚事务
}finally{
关闭
}
11.Hibernate中如何绑定session
1.session类似于jdbc中的connection,之前web阶段学过TreadLocal
2.hibernate已经帮我们实现与本地线程绑定的session,其底层实现就是TreadLocal
3.如何获取与本地线程绑定的session
(1)在hibernate的核心配置文件中进行配置
(2)再调用sessionFactory里面的方法可以得到,可以写到工具类里面。
如果是采用这种方式获取的session对象,则不需要手动的关闭了,因为这个对象与线程绑定再一起,一旦该线程结束,则该session会自动消失。
12.Hibernate的API使用
Query对象:
1.使用query对象,不需要写sql语句,但是写hql语句。
(1)hql: hibernate query language hibernate提供的一种查询的语言
(2)hql和sql语言的区别:
- 使用sql操作表和表里面的字段
-使用hql操作的是实体类和属性
2.查询所有的hql语句
(1)from 实体类的名称
3.Query对象的使用
(1)创建Query对象
(2)调用query对象里面的方法得到结果
Critia对象:
1.使用这个对象查询操作,但是使用这个对象的时候,不需要写语句了,直接调用里面的方法实现
2.实现的过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果
SQLQuery对象:
1.使用hibernate时候,调用底层sql实现
2.实现过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果
3.按照上面的方法,返回的几个每个部分都是一个数组,如何让返回的objects集合中每个部分都是一个对象而不是数组。
解决方法: