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中的主键生成策略有很多的值

         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框架学习笔记(二)

    Hibernate一级缓存的特性:

Hibernate框架学习笔记(二)

        2.该执行过程:

Hibernate框架学习笔记(二)

 

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的核心配置文件中进行配置

                 Hibernate框架学习笔记(二)

        (2)再调用sessionFactory里面的方法可以得到,可以写到工具类里面。

                 Hibernate框架学习笔记(二)

    如果是采用这种方式获取的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对象里面的方法得到结果

Hibernate框架学习笔记(二)

       Critia对象:

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

            2.实现的过程

                (1)创建criteria对象

                (2)调用对象里面的方法得到结果

Hibernate框架学习笔记(二)

     SQLQuery对象:

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

            2.实现过程

                (1)创建criteria对象

                (2)调用对象里面的方法得到结果

Hibernate框架学习笔记(二)

           3.按照上面的方法,返回的几个每个部分都是一个数组,如何让返回的objects集合中每个部分都是一个对象而不是数组。

            解决方法:

            Hibernate框架学习笔记(二)