Hibernate中实体类 缓存和事务管理

Hibernate中的实体类相关

 OID

 OID又叫做对象标识符

它是hibernate用来区分两个对象是否是同一个对象的标识


主键生成策略

  1 . 持久化标识OID用来区分表中数据是否是同一条记录 , 在虚拟机内存中 区分两个对象是否是同一个标识是 "内存的地址" 内存的地址不一样 , 对象不一样

  2 主键的分类  a.自然主键  用跟实体类有关系的属性作为主键 (由于业务和自身的属性绑定是比较紧密 所以一旦修改 业务代码就要响应的进行修改)

                         b.  新建一列和实体没有关系的属性 用他作为主键 hibernate最能帮我们生成代理主键

  主要用native  和 uuid

 native : 自增 只能针对数字类型 根据配置的方言 自动帮你选择主键的生成方式 .  根据底层数据库对自动生成标识符的能力来选择 sequence ,identity, hilo三种生成器中的一种,适合跨数据库平台开发 适用于代理主键

uuid  :  该算法能够在网络环境中升成唯一的字符串标识  其uuid被编码为一个长度为32位的十六位进制字符串  适用于代理主键


持久化类的编写规范

实体类都需要遵从JavaBean的编写规范

持久化类 :  就是一个实体类

      编写规则 : 1 公共的类  公共的无参构造方法

                        2私有的属性 并提供了共有的get和set方法

                        3 需要一个持久化标识OID

                        4 实体类不能使用final修饰

                        5 必须视线序列化接口

                        6 使用包装类型修饰属性               Long: 包装类型的默认值是null  .               long: 基本数据类型的默认值是()


持久化类 = 实体类+ 映射文件;


持久化类的三种形态

  区分标准 :  有没有session   有没有ID

            瞬事态 :  没有session 没有ID;

            持久态:   有session 有ID 持久态对象会自动更新数据库  前提是属性发生变化

            托管态 :  没有session 没有ID



Hibernate的缓存技术

 缓存: 内存当中的一块临时区域  为了提高我们的访问效率

hibernate当中的缓存 : 提高数据库的查询效率

         一级缓存 : session级别的缓存  随着session的创建而创建 随着session的销毁而销毁  它是自带的不可卸载

                           内部视线: 它是由一系列的java集合组成的(map)

                           数据说明时候放到缓存中:

                                     当调用save方法  数据保存到数据库后 会放到缓存当中

                                     当调用get方法  先查缓存 如果缓存没有 查询数据库 在查询结束之后 会放到缓存当中

                                     当调用update方法  先更新数据库 然后将对象保存到缓存当中

                        验证一级缓存的存在:

                                    先查询id为1的记录 发送sql语句 查询数据库    再查询id为1的记录 缓存存在直接返回 不发送    sql语句

                      

         二级缓存:  sessionfactory级别的缓存  他不是自带的 是插件形式的  已经被redis替代



hibernate的事务管理

                      在核心配置文件中设置事务的隔离级别

                               在设置事务的隔离级别的时候 推荐大家设置为数据库默认的隔离级别


     

hibernate查询对象的API 

Query   作用  : 使用HQL语句来查询(查询全部 条件查询 分页查询 统计查询 排序查询  投影查询)

              比较面向对象的查询方式 会接受一个HQL语句

            HQL : 把表的名称换成实体类的名称  把表字段名称换成实体类属性名称 


查询全部:  from 实体类.

条件查询 查询联系人name  :  from 实体类 where name=?;

分页查询: from 实体类

                query.setFirstResult(0);//从第几条之后开始查询
                query.setMaxReuslt(2);//每次查询的最大条数.

统计查询: 查询一共有多少联系人 :  select count(ID) from 实体类

排序查询: from  实体类 order by 实体类 dese

投影查询 : 查询实体类中的部分属性  使用构造方法的方式返回对象



Criteria

    作用: 它是使用对象和方法来查询 是一种更加面向对象的查询方式 

    QBC查询   Query By Criteria

     把查询语句以及条件全部专程了对象的方法   

查询全部 session.createCriteria(实体类.class)

 条件查询:
            criteria.add(restrictions.like("lkmName","琪琪%") )
 分页查询:
            
 统计查询:调用criteria的方法,将统计函数传递进去.
            criteria.setProjection(Projections.count("lkmId"))
排序查询:
            criteria.addOrder(Order.desc("lkmId"))        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值