zoukankan      html  css  js  c++  java
  • hibernate学习(7)——HQL查询

    1、HQL查询定义

    Hibernate查询分类:
    1. get/load 根据OID检索
    2. 对象视图检索 c.getOrders
    3. Sql语句 createSqlQuery
    4. Hql语句 createQuery
    5. Criteria查询 createCriteria
    HQL 详解
    QBC 详解

    2、Hql查询所有

    @Test
    	public void test01() {
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    
    		List<Customer> list = session.createQuery("from Customer").list();
    
    		System.out.println(list);
    
    		tran.commit();
    		session.close();
    	}
    

      

    3、 Hql选择查询所有

    @Test
        public void test02() {
            Session session = HibernateUtil.openSession();
            Transaction tran = session.beginTransaction();
    
            Query query = session
                    .createQuery("select c.id, c.name from Customer c");
    
            List<Object[]> list = query.list();
            for (Object[] obj : list) {
                System.out.println(Arrays.toString(obj));
            }
    
            System.out.println(list);
    
            tran.commit();
            session.close();
        }

    4、投影查询

    // 投影查询
    	// 选择查询的基础上,想把查询结果封装到对象中
    	@Test
    	public void test03() {
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    
    		Query query = session
    				.createQuery("select new Customer(c.id,c.name) from Customer c");
    
    		List<Customer> list = query.list();
    
    		System.out.println(list);
    
    		tran.commit();
    		session.close();
    	}
    

    5、排序查询

    // 排序
        @Test
        public void test04() {
            Session session = HibernateUtil.openSession();
            Transaction tran = session.beginTransaction();
    
            Query query = session.createQuery("from Customer c order by c.id desc");
            List<Customer> list = query.list();
    
            System.out.println(list);
    
            tran.commit();
            session.close();
        }

    6、分页查询

    @Test
    	public void test05() {
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    
    		Query query = session.createQuery("from Customer c order by c.id desc");
    
    		// limit ?,? setFirstResult,setMaxResults
    		// setFirstResult: (当前页数-1)*每页最大记录数
    
    		// 从哪个索引开始取数据.包裹索引本身的记录
    		query.setFirstResult(0);
    		// 查询出多少条数据
    		query.setMaxResults(3);
    
    		List<Customer> list = query.list();
    
    		System.out.println(list);
    		tran.commit();
    		session.close();
    	}
    

    7、聚合函数查询

    // 聚合函数
    	@Test
    	public void test07c() {
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    
    		// ------------------------------------------------
    		// Query query =
    		// session.createQuery(" select count(*) from  Customer c ");
    		// Query query =
    		// session.createQuery(" select avg(c.id) from  Customer c ");
    		// Query query =
    		// session.createQuery(" select sum(c.id) from  Customer c ");
    		// Query query =
    		// session.createQuery(" select max(c.id) from  Customer c ");
    		Query query = session.createQuery("select count(*) from Customer c");
    		Object count = query.uniqueResult();
    
    		System.out.println(count);
    		tran.commit();
    		session.close();
    	}
    

      8、绑定查询

    // 绑定参数
    	@Test
    	public void test06() {
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    
    		// 参数1:?占位符的索引 ,第一个问好索引为0
    		Query query = session.createQuery("from Customer c where c.id= ?");
    
    		// 参数1:?占位符的索引 ,第一个问好索引为0
    		query.setInteger(0, 6);
    		Customer cust = (Customer) query.uniqueResult();
    		System.out.println(cust);
    		tran.commit();
    		session.close();
    	}
    

      9、分组查询

    // 分组
    	// group by .. having..
    	@Test
    	public void test08() {
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    
    		Query query =session.createQuery(" select o.customer, count(o)  " +
    				"					from Order o " +
    				"					group by o.customer " +
    				"					having  count(o) > 2 ");
    		List<Object[]> list = query.list();
    
    		for (Object[] objs : list) {
    			System.out.println(Arrays.toString(objs));
    		}
    
    		tran.commit();
    		session.close();
    	}
    

    10、 连接查询

    1.交叉连接 ,等效 sql 笛卡尔积(不常用)

    2.隐式内连接,等效 sql 隐式内连接

    3.内连接,等效sql内连接

    4.迫切内连接,hibernate底层使用 内连接。

    5.左外连接,等效sql左外连接

    6.迫切左外连接,hibernate底层使用 左外连接

    7.右外连接,等效sql右外连接

    package com.alice.hibernate02.hql;
    
    
    
    import java.util.Arrays;
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import com.alice.hibernate02.util.HibernateUtil;
    
    //HQL详解2-表连接
    public class Demo02 {
    	//交叉连接 => 笛卡尔积
    		//开发时要避免出现笛卡尔积
    	@Test
    	public void test01(){
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    		
    		Query query = session.createQuery("from Customer c,Order o");
    		
    		List<Object[]> list = query.list();
    		for(Object[] obj:list){
    			System.out.println(Arrays.toString(obj));
    		}
    		
    		tran.commit();
    		session.close();
    	}
    	//内连接 
    		//隐式内连接 => 在笛卡尔积基础上过滤无效数据
    	@Test
    	public void test02(){
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    		
    		Query query = session.createQuery("from Customer c,Order o where o.customer = c");
    		
    		List<Object[]> list = query.list();
    		for(Object[] obj:list){
    			System.out.println(Arrays.toString(obj));
    		}
    		
    		tran.commit();
    		session.close();
    	}
    	
    	//内连接
    		//显式内连接( 非迫切)=> inner join
    		// List<Object[]>
    		// Object[] => [Customer,Order]
    		// 将父 与 子 对象装入数组中分别 返回
    	@Test
    	public void test03(){
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    		
    		Query query = session.createQuery("from Customer c inner join c.orders");
    		
    		List<Object[]> list = query.list();
    		for(Object[] obj:list){
    			System.out.println(Arrays.toString(obj));
    		}
    		
    		tran.commit();
    		session.close();
    	}
    	//内连接
    		//显式内连接(迫切)=> inner join
    		// List<Customer> 
    		// 迫切连接会将 子装入父中,组装成一个对象
    	@Test
    	public void test04(){
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    		
    		Query query = session.createQuery("from Customer c inner join fetch c.orders");
    		
    		List<Object> list = query.list();
    		for(Object obj:list){
    			System.out.println(obj);
    		}
    		
    		tran.commit();
    		session.close();
    	}
    	
    	//左外连接
    	//left [outer] join
    	//右外连接
    		//right [outer] join
    	@Test
    	public void test05(){
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    		
    		Query query = session.createQuery("from Customer c left outer  join c.orders");
    		
    		List<Object[]> list = query.list();
    		for(Object[] obj:list){
    			System.out.println(Arrays.toString(obj));
    		}
    		
    		tran.commit();
    		session.close();
    	}
    	
    	//左外连接 迫切
    		//left [outer] join fetch
    	@Test
    	public void test06(){
    		Session session = HibernateUtil.openSession();
    		Transaction tran = session.beginTransaction();
    		
    		Query query = session.createQuery("from Customer c left outer  join fetch c.orders");
    		
    		List<Object> list = query.list();
    		for(Object obj:list){
    			System.out.println(obj);
    		}
    		
    		tran.commit();
    		session.close();
    	}
    }
    

      

  • 相关阅读:
    cocoapods使用遇到的一些问题
    so
    UITextField的各种属性方法介绍
    <<第1章 初识JAVA>>
    《第16章 复习》
    《第17章 图书管理系统》
    《第15章 字符串》
    《第13章 猜拳游戏》
    《第14章 带参数的方法》
    《第12章 类的无参方法》
  • 原文地址:https://www.cnblogs.com/snowwang/p/6131546.html
Copyright © 2011-2022 走看看