卢泽明的博客

初生牛犊不怕虎

ssh进阶框架之Hibernate(三)

  今天总结的是hibernate 的多对多操作,还有继承映射和加载策略,话不多说,直接进入正题

  多对多:多对多分为单向多对多和双向多对多,但是只要会写单向的,多向的无非是再多做一次单向的,所以先从单向的开始

  首先了解单向多对多的是怎么链接的,他们是通过中间一个表,向一家三口,孩子在中间那样,小手拉大手链接起来两个表

  创建两个个实体类Student 和Teacher,莫要忘记实例化

                        

                        

  然后配置Teacher.hbm.xml 

                    

  配置Student.hbm.xml,这里不需要多做什么

                           

在做多对多的时候,发现一个问题,就是当你测试的时候会报错,错误是序列化不存在,但是当我把Hibernate的配置文件剪切复制一遍的时候,就能正常运行了

  接下来介绍继承映射,在这里仅仅介绍继承映射的一张表操作:

  特点:查询效率高,但是 有冗余

  首先编写Employee类,HourlyEmployee和SalaryEmployee继承Employee

                    

                    

                       

 继承映射的话只需编写继承类的.hbm.xml 文件

                    

    接下来是检索策略的总结:首先顾名思义检索策略就是在取数据的时候用到的,比如get,load,Query等

    为什么要用检索策略?1.减少session一级缓存的浪费     2.减少SQL语句,提高效率

    策略的分级:

    类级别的检索策略:仅影响Session的load()方法

    Session.get() 立即检索

    Session.createQuert().list() 立即检索

    Session.load() 延迟加载,返回的是代理的对象,只有oid, 减少Session一级缓存的浪费 由lazy来控制,默认是true

    建立关系的时候使用类级别的延迟加载     

关联级别的检索策略:

                                立即检索(立即加载) 

                                延迟检索(延迟加载)默认

                                迫切做外链接(lazy batch-size 影响不到)

                                影响Session 的load get以及Query(HQL的检索方式)

       当get,load.Query含有关联对象的时候不仅是查出所需要的对象,还有关联的对象默认查出,所以才用到关联级别的检索策略。在<Set>中配置lazy和fetch 和batch-size

        lazy:决定关联对象的加载的时机

        true 懒加载,false 立即加载,extra增强延迟,用到什么初始化什么

        fetch:决定查询关联对象所采用的语句

        默认select由多条sql语句组成,substring 子查询,join做连接多表查询此时的lazy失效

      hibernate提供的5中检索方式:

       1.OID检索:根据get,load检索                          

        2.对象检索:根据对象get方法

        3.HQL检索:Query

        4.QBC检索:面向多个and

        5.本地SQl检索:速度快,但是不适合hibernate 原生的JDBC+SQL



阅读更多
文章标签: hibernate
个人分类: Hibernate
上一篇ssh进阶之Hibernate(二)
下一篇SSH进阶之hibernate(四)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭