1. 程式人生 > >Hibernate之查詢結果排序

Hibernate之查詢結果排序

一,查詢結果排序

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"));//降序

注:可以新增多個排序欄位