Hibernate多表查询连接操作
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多表查询连接操作的更多相关文章
- [刘阳Java]_MyBatis_其他方式来实现多表查询的操作_第9讲
MyBatis其他方式来实现多表查询的操作 利用Java中的集合框架(List,Map) 其中List存储多个查询返回的记录 Map查询返回字段,同时记录表中一条数据 <?xml version ...
- Mysql-单表查询的操作和注意事项
一. 单表查询的语法 二 .关键字的执行优先级(重点) 三 .简单查询 四 .WHERE约束 五. 分组查询:GROUP BY 六 .HAVING过滤 七 .查询排序:ORDER BY 八 .限制查询 ...
- Hibernate多表查询、查询优化策略(四)
多表HQL private static void innerJoin(){ //sql内连接 隐式内连接 select * from A,B where b.aid = a.id // 显示内连接 ...
- hibernate多表查询,结果封装在自己定义的一个实体类当中(在自己定义的类中增加构造函数)
hibernate的hql查询直接返回java对象时出现问题3 向大家请教一个问题,现在有三张表,表之间没有关联,我需要将三张表里面的所有东西查询出来存储到一个新的对象中,该如何实现,使用hibern ...
- Java面试题:Hibernate的二级缓存与Hibernate多表查询
我们来看两个有关Java框架之Hibernate的面试题,这是关于Hibernate的常考知识点. 1.请介绍一下Hibernate的二级缓存 解题按照以下思路来回答: (1)首先说清楚什么是缓存: ...
- 黑马MySQL数据库学习day03 级联 多表查询 连接和子查询 表约束
/* 存在外键的表 删表限制: 1.先删除从表,再删除主表.(不能直接删除主表,主表被从表引用,尽管实际可能还没有记录引用) 建表限制: 1.必须先建主表,再建从表(没有主表,从表无法建立外键关系) ...
- ORM基础4 跨表查询+原子性操作
一.跨表查询 1.# # 正向查找 对象查找 # book_obj = models.Book.objects.get(id=3) # print(book_obj) # ret = book_obj ...
- MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)
先建立一张 m 表 mysql> create table m ( -> mid int, -> hid int, -> gid int, ), -> matime da ...
- hibernate多表查询
一对多进行查询(用懒加载的模式) 查找区域所对应的街道: Dao: public Qu selQu(String dno){ Session session=HibernateSessionFacto ...
随机推荐
- Oracle RAC集群搭建(三)--挂载磁盘
一,磁盘配置 查看由上回配置的共享磁盘,一共三块-----以下所有内容均两台物理机都需要操作 查看磁盘id [root@rac2 ~]# /usr/lib/udev/scsi_id -g -u /de ...
- layer框架使用的问题汇总
一.如何设置弹出框弹出后不影响页面的其他操作 解决:在属性中添加设置zIndex即可
- TOJ 3488 Game Dice
描述 In the game of Dungeons & Dragons, players often roll multi-sided dice to generate random num ...
- 阅读redis源代码的一些体会
最近在学习redis及阅读redis等程序的源码时,有一些收获,特记录到下面. 1.第一步,阅读源代码借助最好可以跟踪的工具去读,如sourceinsight. 我使用的是windows7环境,又因为 ...
- Linux IO
Linux 系统编程(IO) 工具 strace: 根据系统调用 od -tcx: 查看二进制 函数参数 使用const修改的指针为传入参数 不使用const的指针为传出参数 string操作的函数 ...
- NPOI之C#下载Excel
Java中这个类库叫POI,C#中叫NPOI,很多从Java一直到.Net平台的类库为了区别大部分都是在前面加个N,比如Hibernate和NHibernate. npoi下载地址 一.使用NPOI下 ...
- Servlet中listener(监听器)和filter的总结
Listener 我是这样理解他的,他是一种观察者模式的实现:我们在 web.xml 中配置 listener 的时候就是把一个被观察者放入的观察者的观察对象队列中,当被观察者触发了注册事件时观察者作 ...
- gsap
TweenMax借助于css,轻量级的js库 下面是简单的demo <!DOCTYPE html> <html lang="en"> <head> ...
- 超级表格:要山寨Excel,还是与之Say Byebye?
创业产品难免被人拿来与现有的知名产品比较,创业者也喜欢把自己的产品与现有的知名产品比较. 我,超级表格创始人,对此有话说. 当我要在各种场合描述超级表格是什么时,也纠结过. 向用户描述时,说超级表格类 ...
- Prime Numbers in a Grid素数网格
&/@ Shorthand notation for Map If[PrimeQ[#], Framed@Style[#, Orange, Bold, 15], #] & /@ Rang ...