SQL多表操作分类;

1.交叉连接:select*from t_customer cross Join t_order;

2.显示内连接: select*from t_customer c inner join t_order o on c.id=o.c_customer_id;

 隐示内连接:select*from t_customer c ,t_order o WHERE c.id=o.c_customer_id; where可消除笛卡尔积

笛卡尔积是两个表任意组合,查询出两表全部的组合,但我们只想查询某一种组合,加where限制条件可消除笛卡尔积.

3.外链接:select*from t_customer c left join t_order o ON c.id=o.c_customer_id;左外:把左边的全部显示出来.

Hql多表操作分类:

1.交叉连接 ::select*from t_customer cross Join t_order;

2.内连接

a) 显示内连接:       b) 隐式内连接      c) 迫切内连接

//显示内连接---结果Customer的id=1的属性,order属性;Customer的id=1的属性,order属性
@Test
public void test010(){
Session session = HibernateUtils.openSession();
session.beginTransaction();
String hql="from Customer c inner join c.orders with c.id=1";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
for (Object object : objects) {
System.out.println(object );
}
}
session.getTransaction();
session.close();
}
//隐示内连接----消除了笛卡尔迪.它是通过"."运算符来关联.
@Test
public void test011(){
Session session = HibernateUtils.openSession();
session.beginTransaction();
String hql="from Order o where o.c.id=1";
Query query = session.createQuery(hql);
List list = query.list();
System.out.println(list); session.getTransaction();
session.close();
}
//迫切内连接(立即加载)----distinct c 消除了笛卡尔迪,迫切内连接得到的结果是直接封装到po类,而内连接得到的结果是Object[],数组中封装的po类.
@Test
public void test012(){
Session session = HibernateUtils.openSession();
session.beginTransaction();
//底层也是inner join,只不过把结果封装到对象中.
String hql=" select distinct c from Customer c inner join fetch c.orders "; Query query = session.createQuery(hql);
List<Customer> list = query.list();//集合中装入的是from后面的对象
for (Customer c : list) {
System.out.println(c);
}
session.getTransaction();
session.close();
}

3.外连接

1)左外连接           2)迫切左外连接               3)右外连接

//外链接
@Test
public void test013(){
Session session = HibernateUtils.openSession();
session.beginTransaction();
//底层也是inner join,只不过把结果封装到对象中.
String hql=" from Customer c left join c.orders ";
Query query = session.createQuery(hql);
List<Object[]>list = query.list();
for (Object[] objects : list) {
for (Object object : objects) {
System.out.println(object+"\t");
}
System.out.println();
}
session.getTransaction();
session.close();
}
//迫切左外链接
@Test
public void test014(){
Session session = HibernateUtils.openSession();
session.beginTransaction();
//底层也是inner join,只不过把结果封装到对象中.
String hql=" select distinct c from Customer c left join fetch c.orders where c.id=1";
Query query = session.createQuery(hql);
List<Customer> list = query.list();
/*for (Customer c : list) {
System.out.println(c);
}*/
System.out.println(list);
session.getTransaction();
session.close();
}

注意:在Hibernate中有迫切连接,在sql中没有.

Hibernate多表查询连接操作的更多相关文章

  1. [刘阳Java]_MyBatis_其他方式来实现多表查询的操作_第9讲

    MyBatis其他方式来实现多表查询的操作 利用Java中的集合框架(List,Map) 其中List存储多个查询返回的记录 Map查询返回字段,同时记录表中一条数据 <?xml version ...

  2. Mysql-单表查询的操作和注意事项

    一. 单表查询的语法 二 .关键字的执行优先级(重点) 三 .简单查询 四 .WHERE约束 五. 分组查询:GROUP BY 六 .HAVING过滤 七 .查询排序:ORDER BY 八 .限制查询 ...

  3. Hibernate多表查询、查询优化策略(四)

    多表HQL private static void innerJoin(){ //sql内连接 隐式内连接 select * from A,B where b.aid = a.id // 显示内连接 ...

  4. hibernate多表查询,结果封装在自己定义的一个实体类当中(在自己定义的类中增加构造函数)

    hibernate的hql查询直接返回java对象时出现问题3 向大家请教一个问题,现在有三张表,表之间没有关联,我需要将三张表里面的所有东西查询出来存储到一个新的对象中,该如何实现,使用hibern ...

  5. Java面试题:Hibernate的二级缓存与Hibernate多表查询

    我们来看两个有关Java框架之Hibernate的面试题,这是关于Hibernate的常考知识点. 1.请介绍一下Hibernate的二级缓存 解题按照以下思路来回答: (1)首先说清楚什么是缓存: ...

  6. 黑马MySQL数据库学习day03 级联 多表查询 连接和子查询 表约束

    /* 存在外键的表 删表限制: 1.先删除从表,再删除主表.(不能直接删除主表,主表被从表引用,尽管实际可能还没有记录引用) 建表限制: 1.必须先建主表,再建从表(没有主表,从表无法建立外键关系) ...

  7. ORM基础4 跨表查询+原子性操作

    一.跨表查询 1.# # 正向查找 对象查找 # book_obj = models.Book.objects.get(id=3) # print(book_obj) # ret = book_obj ...

  8. MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)

    先建立一张 m 表 mysql> create table m ( -> mid int, -> hid int, -> gid int, ), -> matime da ...

  9. hibernate多表查询

    一对多进行查询(用懒加载的模式) 查找区域所对应的街道: Dao: public Qu selQu(String dno){ Session session=HibernateSessionFacto ...

随机推荐

  1. (转)图解SSH原理

    图解SSH原理 原文:https://www.jianshu.com/p/33461b619d53 http://blog.51cto.com/forlinux/1352900---------SSH ...

  2. JS中彻底删除json对象组成的数组中的元素

    只是分享一个小知识~ 在JS中,对于某个由json对象组成的数组,例如: var test = [{ "a": "1", "b": &quo ...

  3. Django 入门项目案例开发(上)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. Django 入门案例开发(中) http://www.cnblogs.com/focusBI ...

  4. ACdream 1098——圆有点挤——————【数学计算】

    圆有点挤 Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit Status Pr ...

  5. 操作系统管理CPU的直观想法

    CPU的工作原理 要想管理CPU,就要先学会如何使用CPU.我们先从一个程序的执行来看看CPU是如何工作的. void main(){ int i , sum; ; i < ; i++){ su ...

  6. 用ping命令简单的测试 延时、抖动、丢包率

    在DOS命令状态下输入 :ping 202.105.135.211 -t (连续的对该IP地址执行Ping命令,直到被用户以Ctrl+C中断)就会得到下面的结果:Pinging 202.105.135 ...

  7. CSS3 常用新特性总结

    更新于(2017.07.07)会总结项目中比较常用的有些CSS属性 伪类选择器 E:first-of-type: 匹配同类型中的第一个同级兄弟元素E E:last-of-type: 匹配同类型中的最后 ...

  8. C#中.Net的值传递和引用传递

    /// <summary> /// 电脑类 /// </summary> public class Computer { public string Type { get; s ...

  9. iOS中使用RNCryptor对资源文件加密

    原文:http://blog.csdn.net/chenpolu/article/details/46277587 RNCryptor源码https://github.com/RNCryptor/RN ...

  10. 【Linux】chmod命令

    格式chmod 权限 要修改权限的文件linux中的权限如下: -rw------- (600) -- 只有属主有读写权限. -rw-r--r-- (644) -- 只有属主有读写权限:而属组用户和其 ...