hibernate-HQL连接查询 转载sincoolvip
和SQL查询一样,HQL也支持各种各样的连接查询,如内连接、外连接 连接类型 HQL语法
内连接 inner join 或者join
迫切内连接 inner join fetch 或join fetch
左外连接 left outer join 或者 left join
迫切左外连接 left outer join fetch 或者 left join fetch
右外连接 right outer join 或者 right join package Test; import static org.junit.Assert.*; import java.util.List; import org.hibernate.Session;
import org.junit.Test; import entity.Dept;
import entity.Emp; import util.HibernateSessionFactory; public class HqlTest { /**
* 使用内连接查询部门和员工的信息。inner join,查出的是2个实体对象的列表,所以是object[]对象数组
*/
@Test
public void test1() {
Session session=HibernateSessionFactory.getSession();
try {
List<Object[]> list = session.createQuery("from Dept d join d.emps").list();
for (Object[] objects : list) {
Dept dept=(Dept) objects[0];
Emp emp = (Emp) objects[1];
System.out.println(emp.getEname()+"\t"+dept.getDname());
System.out.println("查询成功!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("查询失败!");
}finally{
session.close();
}
} /*使用隐式内连接按部门条件查询员工信息,查询的是Emp对象,所以返回是Emp类型的集合*/
@Test
public void test2() {
Session session=HibernateSessionFactory.getSession();
try {
List<Emp> list = session.createQuery("from Emp e where e.dept.dname='SALES'").list();
for (Emp emp : list) {
System.out.println(emp.getEname()+"\t"+emp.getDept().getDname());
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("查询成功!");
}finally{
session.close();
}
} /**
* select子句中使用隐式内连接按部门条件查询员工信息。
*/
@Test
public void test3() {
Session session=HibernateSessionFactory.getSession();
try {
List<Object[]> list = session.createQuery("select e.dept.dname,e.ename from Emp e where e.dept.dname='SALES'").list();
for (Object[] objects : list) { System.out.println(objects[0]+"~~~~"+objects[1]);
}
System.out.println("查询成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
} /**
* 使用迫切内连接查询部门和员工的信息。
*/
@Test
public void test4() {
Session session=HibernateSessionFactory.getSession();
try {
List<Dept> list = session.createQuery("select distinct d from Dept d inner join fetch d.emps").list();
for (Dept dept : list) {
System.out.println(dept.getDname()+"\t"+dept.getEmps());
} System.out.println("查询成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
/**
* 使用迫切左外连接查询部门和员工的信息。
*/
@Test
public void test5() {
Session session=HibernateSessionFactory.getSession();
try {
List<Dept> list = session.createQuery("select distinct d from Dept d left join fetch d.emps").list();
for (Dept dept : list) {
System.out.println(dept.getDname()+"\t"+dept.getEmps());
} System.out.println("查询成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
} /**
* 使用交叉连接查询部门和员工的信息。
*/
@Test
public void test6() {
Session session=HibernateSessionFactory.getSession();
try {
List<Object[]> list = session.createQuery("from Dept d,Emp e where d.deptno=e.dept.deptno").list();
for (Object[] objects : list) {
Dept dept=(Dept) objects[0];
Emp emp=(Emp) objects[1];
System.out.println(emp.getEname()+"\t"+dept.getDname());
} System.out.println("查询成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
}
hibernate-HQL连接查询 转载sincoolvip的更多相关文章
- 【学习笔记】Hibernate HQL连接查询和数据批处理 (Y2-1-7)
HQL连接查询 和SQL查询一样 hql也支持各种链接查询 如内连接 外连接 具体如下 左外连接 left (outer) join 迫切左外连接 left (outer) join fetch 右外 ...
- Hibernate批量处理数据、HQL连接查询
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 ...
- Hibernate批量处理数据、[HQL连接查询]
一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作 数据库层面 (2)使 ...
- HQL连接查询和注解
HQL连接查询和注解 一:HQL连接查询 各种连接查询: 内连接:inner join或join From Entity inner [inner] join [fetch] Entity.prope ...
- HQL连接查询
HQL提供了连接查询机制如内连接,外连接,,还允许显示指定迫切内连接,和迫切外联结. 连接类型 内连接 inner join 或join 迫切内链接 inner join fetch 左外联结 le ...
- 11.hibernate的连接查询
1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...
- hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
1 当使用left join左连连接,sql语句为 select t from SecondPage t left join t.rightNavbar n where 1=1 页面中出现了部分空行的 ...
- hibernate 实现多表连接查询(转载)
http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html 为了方便,直接粘过来,方便查看.不收藏了 Hibernate主要支持两种查 ...
- hibernate对连接池的支持和HQL查询
hibernate对连接池的支持 连接池, 作用: 管理连接:提升连接的利用效率! 常用的连接池: C3P0连接池 Hibernate 自带的也有一个连接池,且对C3P0连接池也有支持! 只维护一个连 ...
随机推荐
- 【BZOJ4552】排序(线段树,二分)
题意:给定一个n个数的排列,有m次操作:op,l,r op=0时表示将位置[L,R]升序排序 op=1时表示将位置[L,R]降序排序 最后询问第q个位置上的数字 n,m,q<=1e5 思路:Fr ...
- JDK_API剖析之java.io包
Java的核心库java.io提供了全面的IO接口.包括:文件读写.标准设备输出等.Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入. 一.接口 1.Closea ...
- Redis的一点笔记
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 优势: 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s . 丰富 ...
- phpfor函数和foreach函数
PHP for 循环 PHP While 循环 PHP 函数 PHP for 循环执行代码块指定的次数. PHP for 循环 如果您已经提前确定脚本运行的次数,可以使用 for 循环. 语法 for ...
- python学习之路(19)
匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x) ...
- 黑马lavarel教程---6、简单验证
黑马lavarel教程---6.简单验证 一.总结 一句话总结: 1.验证的最简单实例:$request的validate方法,验证通过可以继续进行,验证失败就重定向 2.中文提示可以用中文语言包 3 ...
- awk命令2
提取文件后四行 注释:NR==FNR表示第一个文件,执行{a++},计算出第一个文件10的行数,NR!=FNR表示第二个文件10,执行{if(FNR<=a-4){print $0}},打印出第二 ...
- c++中字符输入函数cin.getline在输入char与string时的不同
cin.getline在输入char时: using namespace std; ; char name[ArSize]; char dessert[ArSize]; cout << & ...
- layui给select下拉框赋值
转: layui给select下拉框赋值 layui给select下拉框赋值 //重新渲染表单函数 function renderForm() { layui.use('form', function ...
- 二十:jinja2之加载静态文件
静态文件: flask默认指定的静态文件路径为根目录下的static,可以自定义路径,并指定,使用url_for('文件夹', filename='文件名')引用 加载css文件 加载js文件 其他文 ...