1. 程式人生 > >Hibernate查詢方式、物件導航查詢、OID查詢、HQL查詢、QBC、元素SQL

Hibernate查詢方式、物件導航查詢、OID查詢、HQL查詢、QBC、元素SQL

-》物件導航查詢
        通過企業Id,查詢到企業,然後根據這個企業查詢所有的員工

測試類:

package test;
 
import java.util.Iterator;
import java.util.List;
 
import junit.framework.TestCase;
 
import org.hibernate.Session;
 
import com.java.hibernate.HibernateUtils;
import com.java.hibernate.Student;
 
public class ObjectNavQueryTest extends TestCase {
 
	public void testQuery() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
 
			List students = session.createQuery("from Student s where s.classes.name like '%2%'").list();
			for (Iterator iter=students.iterator(); iter.hasNext();) {
				Student student = (Student)iter.next();
				System.out.println(student.getName());
			}
 
			session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		} finally {
			HibernateUtils.closeSession(session);
		}
	}
 


 -》OID查詢
        就是通過Id查詢記錄,呼叫session的get方法

 @Test
    public void testSelectOID(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory建立Session物件
            //理解:類似於jdbc的連線資料庫
            session = HibernateUtils.getSessionObject();
            //2.開啟事務
            transaction = session.beginTransaction();
            //3.寫具體的crud操作
            //查詢cid=3的客戶
            Customer customer = session.get(Customer.class, 3);
            //4.提交事務
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滾事務
            transaction.rollback();
        } finally {
            //6.關閉資源     在使用了與本地執行緒繫結的session物件之後,就不需要手動關閉session了
            session.close();
        }
    }


 -》HQL查詢(不寫表名是實體名稱,不寫欄位名寫屬性名稱)
        -》查詢所有
        -》條件查詢
            where
            like 
            設定引數,0開始
        -》分頁查詢
        -》排序
            from 實體名稱 order by 實體屬性名稱  asc|desc
        -》聚合函式
            常用的聚合函式:
                count、sum、avg、max、min
            hql聚合函式語句寫法
                select count(*) from 實體類名稱
    -》QBC

QBC查詢所有

  @Test
    public void testSelectQBC01(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory建立Session物件
            //理解:類似於jdbc的連線資料庫
            session = HibernateUtils.getSessionObject();
            //2.開啟事務
            transaction = session.beginTransaction();
            //3.寫具體的crud操作
            //查詢所有的客戶
            //3-1.建立Criteria物件
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.呼叫方法得到結果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事務
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滾事務
            transaction.rollback();
        } finally {
            //6.關閉資源     在使用了與本地執行緒繫結的session物件之後,就不需要手動關閉session了
            session.close();
        }
    }

QBC條件查詢

 @Test
    public void testSelectQBC02(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory建立Session物件
            //理解:類似於jdbc的連線資料庫
            session = HibernateUtils.getSessionObject();
            //2.開啟事務
            transaction = session.beginTransaction();
            //3.寫具體的crud操作
            //條件查詢
            //3-1.建立Criteria物件
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.使用Criteria物件裡面的方法設定條件值
            //使用add方法設定條件值,在add方法裡面使用Restrictions類的方法實現條件設定
            //靜態方法中,引數1:實體類屬性名    屬性2:實體類屬性名對應的條件值
            criteria.add(Restrictions.eq("cid", 3));
            criteria.add(Restrictions.eq("custName", "三點連線"));
            //3-3.呼叫方法得到結果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事務
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滾事務
            transaction.rollback();
        } finally {
            //6.關閉資源     在使用了與本地執行緒繫結的session物件之後,就不需要手動關閉session了
            session.close();
        }
    }

QBC模糊查詢

 @Test
    public void testSelectQBC03(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory建立Session物件
            //理解:類似於jdbc的連線資料庫
            session = HibernateUtils.getSessionObject();
            //2.開啟事務
            transaction = session.beginTransaction();
            //3.寫具體的crud操作
            //模糊查詢
            //3-1.建立Criteria物件
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.使用Criteria物件裡面的方法設定條件值
            //使用add方法設定條件值,在add方法裡面使用Restrictions類的方法實現條件設定
            //靜態方法中,引數1:實體類屬性名    屬性2:實體類屬性名對應的條件值
            criteria.add(Restrictions.like("custName", "%點%"));
            //3-3.呼叫方法得到結果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事務
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滾事務
            transaction.rollback();
        } finally {
            //6.關閉資源     在使用了與本地執行緒繫結的session物件之後,就不需要手動關閉session了
            session.close();
        }
    }

QBC排序查詢

 @Test
    public void testSelectQBC04(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory建立Session物件
            //理解:類似於jdbc的連線資料庫
            session = HibernateUtils.getSessionObject();
            //2.開啟事務
            transaction = session.beginTransaction();
            //3.寫具體的crud操作
            //排序查詢
            //3-1.建立Criteria物件
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.使用Criteria物件裡面的方法設定條件值
            //使用add方法設定條件值,在add方法裡面使用Restrictions類的方法實現條件設定
            //靜態方法決定排序規則,引數:設定根據那個屬性進行排序
            criteria.addOrder(Order.asc("cid"));
            //3-3.呼叫方法得到結果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事務
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滾事務
            transaction.rollback();
        } finally {
            //6.關閉資源     在使用了與本地執行緒繫結的session物件之後,就不需要手動關閉session了
            session.close();
        }
    }

QBC離線查詢

 @Test
    public void testSelectQBC07(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory建立Session物件
            //理解:類似於jdbc的連線資料庫
            session = HibernateUtils.getSessionObject();
            //2.開啟事務
            transaction = session.beginTransaction();
            //3.寫具體的crud操作
            //離線查詢
            //使用場景,servlet呼叫service,service呼叫dao(對資料庫crud操作--使用hibernate框架時,最終使用session裡面的方法實現資料操作)
            //3-1.建立物件
            DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
            //3-2.最終執行時才用到session
            Criteria criteria = detachedCriteria.getExecutableCriteria(session);
            //3-3.呼叫方法得到結果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事務
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滾事務
            transaction.rollback();
        } finally {
            //6.關閉資源     在使用了與本地執行緒繫結的session物件之後,就不需要手動關閉session了
            session.close();
        }
    }

QBC統計查詢

  @Test
    public void testSelectQBC06(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory建立Session物件
            //理解:類似於jdbc的連線資料庫
            session = HibernateUtils.getSessionObject();
            //2.開啟事務
            transaction = session.beginTransaction();
            //3.寫具體的crud操作
            //3-1.統計查詢
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.設定所要做的操作
            criteria.setProjection(Projections.rowCount());
            //3-3.呼叫方法得到結果
            Object object = criteria.uniqueResult();
            Long count = (Long)object;
            int a = count.intValue();
            System.out.println("object = " + a);
            //4.提交事務
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滾事務
            transaction.rollback();
        } finally {
            //6.關閉資源     在使用了與本地執行緒繫結的session物件之後,就不需要手動關閉session了
            session.close();
        }
    }


        使用hibernate api查詢,本質是使用Criteria物件實現
    -》元素SQL
        使用nativeQuery查詢