Hibernate连接查询

内连接:
查询出来的每一项为 object[]数组,左表存在object[0]中,右表存在object[1]中,object[0]和object[1]的关联关系有没有设置,取决于你的配置文件中,关联的配置时候lazy的值,如果lazy=false,则马上维护关系,lazy=true,先不维护关系,等用到关联关系维系的值时才查询。

迫切内连接
(不管设置lazy=true或者lazy=false,他关联关系立马就维护好了,且只发送一条sql语句,且结果集中的每条结果为 对象(本例中为部门对象,部门里面的员工已经填充好了)

左外连接:
在内连接的基础上,保证左表的数据不能丢失,如果左表中没有对应的右表数据,则右表对象置为空。lazy的设置导致的结果影响和内连接相同。

//通过query.iterate()方法优化性能:如果之前有过查询,则只通过主键从以前的缓存中获取数据,减少数据查询任务量

	@org.junit.Test
	public void iterateQE(){
		session=HibernateUtil.getSession();
		hql="from Emp";
		List<Emp> elist=session.createQuery(hql).list();
	for(Emp e:elist){
		System.out.println(e.getEname());		
	}
	System.out.println("-----------------------------");
	String hql2="from Emp where empno<7600";
	Iterator<Emp> eite=session.createQuery(hql2).iterate();
	while(eite.hasNext()){
		Emp e=eite.next();
		System.out.println(e.getEname());
		
	}
	}

// 右外连接

@org.junit.Test
	public void queryED333() {
		session = HibernateUtil.getSession();
		hql = "from Emp e right outer join e.dept";
		Query query = session.createQuery(hql);
		List<Object[]> objList = query.list();
		for (Object[] objArr : objList) {
			System.out.println((Emp) objArr[0] + ":"
					+ ((Dept) objArr[1]).getDeptName());
		}
	}
// 迫切左外连接
	public void queryED222() {
		session = HibernateUtil.getSession();
		hql = "select distinct d from Dept d left outer join fetch d.emps";
		Query query = session.createQuery(hql);
		List<Dept> dlist = query.list();

		for (Dept d : dlist) {
			System.out.print("部门:" + d.getDeptName());
			for (Emp e : d.getEmps()) {
				System.out.print(" " + e.getEname());
			}
			System.out.println();

		}
		HibernateUtil.closeSession();
	}
// 隐式内连接查询
	public void queryED111() {
		session = HibernateUtil.getSession();
		hql = "from Emp e where e.dept.deptName='SALES'";
		Query query = session.createQuery(hql);
		List<Emp> elist = query.list();
		System.out.println(elist.size());
		for (Emp e : elist) {
			System.out.println("员工:" + e.getEname() + "部门:"
					+ e.getDept().getDeptName());

		}
		HibernateUtil.closeSession();
	}
// 迫切内连接查询
public void queryED11() {
		session = HibernateUtil.getSession();
		hql = "select distinct d from Dept d inner join fetch d.emps";
		Query query = session.createQuery(hql);
		List<Dept> dlist = query.list();
		for (Dept d : dlist) {
			System.out.print("部门: " + d.getDeptName());
			for (Emp e : d.getEmps()) {
				System.out.print(" | " + e.getEname());
			}
			System.out.println();
		}
		HibernateUtil.closeSession();
	}
// 内连接查询(去重合并)
	public void queryED2() {
		session = HibernateUtil.getSession();
		hql = "select distinct d from Dept d inner join fetch d.emps";
		Query query = session.createQuery(hql);
		List<Dept> objList = query.list();

		for (Dept d : objList) {
			System.out.print(d.getDeptName() + ": ");
			for (Emp e : d.getEmps()) {
				System.out.print(e.getEname() + " ");

			}
			System.out.println();

		}
		HibernateUtil.closeSession();
	}
// 内连接查询
	public void queryED1() {
		session = HibernateUtil.getSession();
		hql = "from Dept d inner join d.emps";
		Query query = session.createQuery(hql);
		List<Object[]> objList = query.list();

		for (Object[] objArr : objList) {
			System.out.println(objArr[0] + " " + objArr[1]);

		}
		HibernateUtil.closeSession();
	}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值