Hibernate-04 框架第四天 多表查询的演示

package test;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import domain.Customer;
import utils.HibernateUtils;

public class Demo4 {
	
	
	/*
	 * 使用HQL显示内连接
	 * 注意语句中使用的都是对象的名字不是表名
	 * HQL的多表查询有 迫切与非迫切之分,可以参考以下代码,一般都用迫切因为可以将数据封装到bean中,
	 	*非迫切则只是Object[]数组
	 * mysql多表查询的定义参考,图文并茂很详细有时间可以仔细看看链接如下
	 * https://www.cnblogs.com/bypp/p/8618382.html
	 */
	
	
	@Test
	public void run3() {
		/*
		 * 左外链接迫切返回结果,返回类型为HQL中的类型
		 * 使用方法是将inner关键字替换为left
		 */
		//获得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		String hql = "from Customer c left join fetch c.linkmans";
		List<Customer> list = session.createQuery(hql).list();
		Set<Customer> set = new HashSet<>(list);
		
		for (Customer customer : set) {
			System.out.println(customer);
		}
		
		tr.commit();
		
	}
	
	
	
	@Test
	public void run2() {
		/*
		 *  内连接迫切返回结果,返回类型为HQL中的类型
		 * 使用方法是在join 关键字后面加上fetch
		 * 排重可以用hashset的构造函数传入list即可。
		 */
		//获得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		String hql = "from Customer c inner join fetch c.linkmans";
		List<Customer> list = session.createQuery(hql).list();
		Set<Customer> set = new HashSet<>(list);
		
		for (Customer customer : set) {
			System.out.println(customer);
		}
		
		tr.commit();
		
	}
	
	
	@Test
	public void run1() {
		/*
		 * 内连接非迫切返回结果,返回类型为Object[]
		 */
		//获得session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		String hql = "from Customer c inner join c.linkmans";
		
		List<Object[]> list = session.createQuery(hql).list();
//		Set<Object[]> set = new HashSet<>(list);
		
		for (Object[] object : list) {
			System.out.println(Arrays.toString(object));
		}
		
		tr.commit();
		
	}

}

猜你喜欢

转载自blog.csdn.net/alexzt/article/details/82657749