Hibernate学习笔记-一对多双向、多对多双向、二级缓存

一对多的双向

 一对多指的是类与集合之间的关系

 多对一指的是类与类之间的关系

在保存学生的时候,级联保存班级

在更新学生的时候,保存班级

已经存在一个班级,已经存在一个学生,让该学生加入到该班级

解除一个班级和所有的学生之间的关系

 

总结

    1、一般情况下,一对多,多的一方维护关系,效率比较高

   2、一对多,如果一的一方维护关系,实际上就是发出更新外键的update语句

   3、如果多的一方维护关系,实际上就是更新了student表的所有的字段

   4、一般情况下,Classes.hbm.xml文件中,针对set集合的invserse的值为true

         不维护关系

多对多双向

     说明:

         1、关系操作

             增加关系相当于在第三张表中插入一行数据

             解除关系相当于在第三张表中删除一行数据

             更新关系?

                先删除后增加

           谁维护关系,效率都一样,看页面的需求

         2、级联操作

保存课程的时候级联保存学生,并且维护关系

在更新课程的时候,级联更新学生

解除课程1和所有的学生之间的关系

把学生1从课程1转到课程2

删除一个学生

总结

    1、多对多的结构是三张表

        2、映射文件中

       

   3、多对多,谁维护关系,效率都一样

   4、多对多是类与集合的关系

作业

    用户(咨询员表和学生表:多对多的关系)

    角色

    权限

    用户与角色是多对多的关系

    权限与角色是多对多的关系

 

    用户:咨询员1、咨询员2、咨询员3、学员1,咨询员4(咨询主管)

    角色:咨询员、咨询员主管、学员

    权限:审批自荐信、审批基础测试、审批入学测试、审批面试、分配名额

          自荐信的申请、基础测试的申请、入学测试的申请、面试申请

 

    建立用户与角色之间的关系 

    建立角色与权限之间的关系

 

    查询:

          1、某一个学生拥有多少权限,并且把权限的明细写出来

          2、一个咨询员拥有多少权限

          3、一个咨询员有多少个学生,再查询该学生的权限

 

     要做的事情:

          1、建立持久化和映射文件

          2、生成表

          3、写客户端,把基本的数据填充完毕

          4、把关系填充完

          5、实现功能

一对一

二级缓存

数据特点

        1、公共的数据

   2、不经常修改的数据

   3、私密性不是很高的数据

结构

       

       

       

       

二级缓存的生命周期

        当hibernate程序开始的时候,二级缓存就存在了,当hibernate容器销毁的时候,

      二级缓存就销毁了。

hibernate内部没有提供二级缓存的实现

     默认情况下,利用的是ehcache。

步骤

    步骤1

         在hibernate的配置文件中开启二级缓存

        步骤2

         在hibernate的配置文件中提供二级缓存的供应商

 

    步骤3

         开启类级别的二级缓存

                         第一种方案:

                        

            第二种方案

                                  在Classes.hbm.xml文件中

                                 

类级别的操作

get

save

        不能操作二级缓存中

update

        也不能操作二级缓存

list

集合类别的操作

二级缓存的数据缓存到磁盘上

        编译一个ehcache.xml文件

                 <diskStore path="e:\\TEMP1"/>   在磁盘上的存储路径

        <defaultCache

            maxElementsInMemory="12"   在内存中最大可以存储多少对象

            eternal="false"

            timeToIdleSeconds="1200"

            timeToLiveSeconds="1200"

            overflowToDisk="false"  如果内存中超过了最大的对象数,是否存储到磁盘上

            maxElementsOnDisk="10000000"

            diskPersistent="false"

            diskExpiryThreadIntervalSeconds="120"

            memoryStoreEvictionPolicy="LRU"

            />

<Cache

            name="com.itheima10.hibernate.domain.Classes"

            maxElementsInMemory="3"

            eternal="false"

            timeToIdleSeconds="120"

            timeToLiveSeconds="120"

            overflowToDisk="true"

            maxElementsOnDisk="10000000"

            diskPersistent="false"

            diskExpiryThreadIntervalSeconds="120"

            memoryStoreEvictionPolicy="LRU"

            />

二级缓存的缓存策略

 

  上面的代码会报错

                

二级缓存的统计机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值