关于内连接、左外连接和迫切左外连接


举例说明:
需求:把用户和订单查询出来
    情况一:内连接查询。即只查询有订单的用户。
from User u inner join u.orders o;
    情况二:左外连接查询。即用户不管是否有订单,都查询出来。
from User u left outer join fetch u.orders o;
注:左外连接语句中的fetch,表示迫切。即迫切左外连接。
什么叫迫切左外连接?
个人理解:
若将(迫切)左外连接左边的对象称为“主对象“,右边的对象称为”附属对象“。
则使用左外连接时,查询出来的对象结构是主对象和附属对象组成的组成的一个对象数组,形如:
    Object[主对象,附属对象]。
而使用迫切 左外连接时,查询出来的对象结构是一个主对象,而附属对象作为住对象的一个属性值嵌在其中,形如:
    主对象
        其他属性……
        .
        .
        .
        对应属性名:附属对象
        .
        .
        .
        其他属性……
          相较之下,一般都是使用迫切左外连接
举例说明:
      以左外连接的方式(第9行):
@Test
public void showUser(){

    ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationcontext.xml");
    SessionFactory sessionFactory = (SessionFactory) context.getBean("sessionFactory");
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();

    List list = (List) session.createQuery("from User u left outer join u.department d").list();

    tx.commit();
    session.close();

}
    在第11行打上断点,在方法名上右键→debug as→Junit Test,运行一会儿……,在9行的list上右键→watch
    可看到效果如下图:


重点在这:(即User和Department组成了一个数组)


      以迫切左外连接的方式:
    将上述代码第9行改成如下形式:
List list = (List) session.createQuery("from User u left outer join fetch u.department d").list();
    可看到效果如下:



重点在这:(即Department作为User的属性存在)




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值