zoukankan      html  css  js  c++  java
  • Hibernate中的多表查询及抓取策略

    1.Hibernate中的多表查询

     1.1SQL中的多表查询

    【交叉连接】

    select * from A,B;

    【内连接】

    显示内连接:inner join(inner 可以省略)

    Select * from A inner join B on 条件;

    隐式内连接:

    Select * from A,B where 条件;

    【外连接】

    左外连接:left outer join

    Select * from A left outer join B on 条件;

    右外连接:right outer join

    Select * from A right outer join B on 条件;

    1.2Hibernate中的多表连接查询

    【交叉连接】

    交叉连接

    【内连接】

    显示内连接 from Customer c inner join c.linkmans

    隐式内连接

    迫切内连接from Customer c inner join fetch c.linkmans

    【外连接】

    左外连接

    右外连接

    迫切左外连接

    2.Hibernate中的抓取策略

    2.1 延迟加载lazy

    lazy延迟加载: 查询的时候不发送sql语句,在使用对象的时候才发送sql语句查询

    延迟加载氛围类级别的延迟加载关联级别的延迟加载

    2.1.1类级别的延迟加载

    使用延迟加载的方法查询某个类的时候是否采用的延迟称为是类级别的延迟。默认值是true。

    Customer customer = session.load(Customer.class,1l);// 默认就会采用延迟加载,这种称为是类级别的延迟。

     

    类级别延迟加载失效:

    * final修饰这个类,不能产生代理类,延迟加载就会失效。

    * 在<class>上配置lazy=”false”

    2.1.2关联级别的延迟加载

    查询到某个对象以后,获得其关联的对象。查询其关联对象的时候是否采用的延迟。称为是关联级别的延迟。

    Customer c = session.get(Customer.class,1l);

    c.getLinkMans(); // 查询关联对象的时候,是否采用延迟加载。

    关联级别的延迟往往会与抓取策略一起使用,优化程序。(关联级别的延迟在<set>或者是<many-to-one>标签上的延迟加载)

    2.2抓取策略

      抓取策略指的是查找到某个对象后,抓取其关联的对象的时候采用的策略。抓取策略就是在关联对象的配置上(<set>和<many-to-one>)配置fetch属性。

    2.2.1 在set上配置的lazy和fetch

    fetch:抓取策略,控制SQL语句的发送的格式。

        * select    :默认值。发送一条select语句查询关联对象。

        * join  :发送一条迫切左外连接查询关联对象。

        * subselect :发送一条子查询查询关联对象。

     

    lazy:延迟加载,控制SQL语句的发送的时候。

        * true  :默认值。采用延迟加载。

        * false :不采用延迟加载。

        * extra :及其懒惰。

    2.2.2 在many-to-one上配置的lazy和fetch

    fetch:抓取策略,控制SQL语句的发送的格式。

        * select    :默认值.发送一条select语句查询关联对象。

        * join  :发送一条迫切左外连接查询关联对象。

    lazy:延迟加载,控制SQL的发送的时机。

        * proxy :默认值。是否采用延迟,需要由另一方类上的延迟加载来决定。

        * false :不采用延迟加载。

        * no-proxy:

    2.2.3 批量抓取

      批量抓取:查询了多个客户的时候,查询多个客户下的所有联系人。

      在Customer.hbm.xml中<set>上配置batch-size=”n”

     

  • 相关阅读:
    Spring 中出现Element : property Bean definitions can have zero or more properties. Property elements correspond to JavaBean setter methods exposed by the bean classes. Spring supports primitives, refer
    java定时器schedule和scheduleAtFixedRate区别
    hql语句中的select字句和from 字句
    使用maven搭建hibernate的pom文件配置
    Failure to transfer org.apache.maven:maven-archiver:pom:2.5 from http://repo.maven.apache.org/ maven2 was cached in the local repository, resolution will not be reattempted until the update interv
    对于文件File类型中的目录分隔符
    hibernate的事务管理和session对象的详解
    解决mac 中的myeclipse控制台中文乱码问题
    ibatis selectKey用法问题
    Java中getResourceAsStream的用法
  • 原文地址:https://www.cnblogs.com/rodge-run/p/6416032.html
Copyright © 2011-2022 走看看