hibernate——HQL查詢總結
HQL概述:
HQL(Hibernate Query Language) 是面向對象的查詢語言, 它和 SQL 查詢語言有些類似. 在 Hibernate 提供的各類檢索方式中, HQL 是使用最廣的一種檢索方式.java
list : 查詢結果多個
uniqueResult : 查詢結果惟一
session
HQL的簡單查詢
// 簡單查詢: String hql = "from Customer"; //方法一 Query query = session.createQuery(hql); List<Customer> list = query.list(); //方法二 List<Customer> list = session.createQuery(hql).list();
HQL的別名查詢:
// 別名查詢: //String hql = "from Customer asc"; //String hql = "from Customer c"; String hql = "select c from Customer c";
HQL的多態查詢:
String hql = "from java.lang.Object"; String hql = "from java.io.Serializable";
HQL的排序查詢:
String hql = "from Customer order by age asc"; String hql = "from Customer order by age desc";
HQL的分頁查詢:
Query query = session.createQuery("from Order"); query.setFirstResult(10); query.setMaxResults(10); List<Order> list = query.list();
HQL檢索單個對象:
Query query = session.createQuery("from Customer where cname = ?"); query.setParameter(0, "張三"); Customer customer = (Customer) query.uniqueResult();
HQL的條件查詢:
/** * HQL條件查詢 * 按位置綁定參數: */ // 1.根據名稱進行查詢 List<Customer> list = session .createQuery( "from Customer where cname = ?") .setParameter(0,"張三").list(); System.out.println(list.get(0)); // 2.根據名稱進行查詢 List<Customer> list = session .createQuery( "from Customer c where c.cname = ?") .setParameter(0,"張三").list(); System.out.println(list.get(0)); // 3.條件並列: List<Customer> list = session .createQuery( "from Customer where cname like ? and age >= ?") .setParameter(0, "任%").setParameter(1, 35).list(); for (Customer customer : list) { System.out.println(customer); } /** * HQL條件查詢 * 按名稱綁定參數: */ List<Customer> list = session .createQuery( "from Customer where cname like :cname and age >= :age") .setParameter("cname", "任%").setParameter("age", 35).list(); for (Customer customer : list) { System.out.println(customer); }
HQL使用匯集函數:
//count()/max()/min()/avg()/sum() String hql = "select count(*) from Order"; Long num = (Long) session.createQuery(hql).uniqueResult();
HQL分組統計:
String hql = "select o.customer.cname,count(*) from Order o group by o.customer.cname"; List<Object[]> list = session.createQuery(hql).list(); for (Object[] objects : list) { System.out.println(Arrays.toString(objects)); }
HQL的投影查詢:
String hql = "select cname from Customer"; List<String> list = session.createQuery(hql).list(); for (String cname : list) { System.out.println(cname); } String hql = "select age from Customer"; List<Integer> list = session.createQuery(hql).list(); for (Integer age : list) { System.out.println(age); } String hql= "select cname,age from Customer"; List<Object[]> list = session.createQuery(hql).list(); for (Object[] objects : list) { System.out.println(Arrays.toString(objects)); } // 使用構造函數的方式進行投影查詢. String hql = "select new Customer(cname,age) from Customer"; List<Customer> list = session.createQuery(hql).list(); for (Customer customer : list) { System.out.println(customer); }