Hibernate之查詢結果排序
阿新 • • 發佈:2019-01-06
一,查詢結果排序
HQL和QBC都支援查詢結果排序。
HQL採用ORDER BY關鍵字排序;
QBC採用Order類進行排序。
(1)HQL採用ORDER BY關鍵字進行排序
在資料庫中,預設order by關鍵字為升序排序,與order by name asc一樣,而order by name desc為降序排序。
例項--升序:
例項--降序:package com.lanhuigu.hibernate.test; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.lanhuigu.hibernate.entity.Customer; public class TestHQL { public static void main(String[] args) throws Exception{ Configuration cfg = new Configuration().configure(); SessionFactory sessionFactory = cfg.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction tr = session.beginTransaction(); //1.建立Query物件與 Query query = session.createQuery("from Customer order by name asc");//升序,asc可以去掉 //2.命名引數動態繫結查詢條件 //query.setString("v_name", "test"); //2.執行SQL List list = query.list(); //3.輸出結果 for (int i = 0;i<list.size();i++) { Customer customer = (Customer) list.get(i); System.out.println(customer.getName()); } //4.事務提交 tr.commit(); //5.關閉session session.close(); } }
將建立的Query物件修改為以下:
Query query = session.createQuery("from Customer order by name desc");//降序,desc不可以去掉,去掉就升序了
(2)QBC採用org.hibernate.criterion.Order進行排序
例項--升序:
package com.lanhuigu.hibernate.test; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Order; import com.lanhuigu.hibernate.entity.Customer; public class TestQBC { public static void main(String[] args) throws Exception{ Configuration cfg = new Configuration().configure(); SessionFactory sessionFactory = cfg.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction tr = session.beginTransaction(); //1.建立Criteria物件 Criteria criteria = session.createCriteria(Customer.class); //2.Expression靜態方法繫結查詢條件,建立的每個Criterion例項就是一個條件 /*Criterion criterion = Expression.eq("name", "test"); criteria.add(criterion);*/ //3.排序 criteria.addOrder(Order.asc("name"));//升序 //4.執行SQL List list = criteria.list(); //5.輸出結果 for (int i = 0;i<list.size();i++) { Customer customer = (Customer) list.get(i); System.out.println(customer.getName()); } //6.事務提交 tr.commit(); //7.關閉session session.close(); } }
例項--降序:
將criteria.addOrder(Order.asc("name"));//升序換為:
criteria.addOrder(Order.desc("name"));//降序
注:可以新增多個排序欄位