Hibernate中的查詢,Query、Criteria、SQLQuery


一、使用Query對象,不需要寫sql語句,但是要寫hql語句】

  1.hql:hibernate query language,hibernate提供查詢語言,這個hql語句和普通sql語句很類似

  2.hql和sql語句的區別

   -使用sql語句是操作數據庫表和字段的

   -使用hql語句是操作實體類和屬性的

  3.查詢所有屬性的hql語句

    ①from+實體類名稱【sql語句:select * from 表名】

  4.Query對象的使用

    ①創建Query對象

    ②調用query對象里面的方法得到結果

 

package com.lk.hibernate2.test;


import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;

import com.lk.hibernate2.entity.User;
import com.lk.hibernate2.util.HibernateUtil;
/**
 * 測試Hibernate查詢的方法
 * @author Administrator
 *
 */
public class Test {

    @org.junit.Test
    public void test() {
        Session session=null;
        Transaction transaction=null;
                
        try{
            //獲取session(HibernateUtil是我自己創建的一個工具類,專門用來獲取session的)
            session=HibernateUtil.getSession();
            transaction=session.beginTransaction();
            //操作業務
            //1.創建一個query對象
            Query query=session.createQuery("from User");
            //2.調用query的list()方法返回值是一個List類型的
            List<User> list=query.list();
            //循環輸出值
            for (User user : list) {
                System.out.println(user);
            }
            //提交事務
            transaction.commit();
            
        }catch (Exception e) {
            e.printStackTrace();
            //事務回滾
            transaction.rollback();
        }finally{
            //關閉方法
            HibernateUtil.close();
        }
    }

}

二、Criteria對象

1.使用這個對象查詢操作不需要寫查詢語句,直接調用方法就可以實現

2.實現的過程

  ①創建Criteria對象

  ②調用Criteria里面的方法

@org.junit.Test
    public void testCriteria() {
        Session session=null;
        Transaction transaction=null;
                
        try{
            //獲取session(HibernateUtil是我自己創建的一個工具類,專門用來獲取session的)
            session=HibernateUtil.getSession();
            transaction=session.beginTransaction();
            //操作業務
            //1.創建一個Criteria對象
            Criteria criteria=session.createCriteria(User.class);
            //2.調用Criteria的list()方法返回值是一個List類型的
            List<User> list=criteria.list();
            //循環輸出值
            for (User user : list) {
                System.out.println(user);
            }
            //提交事務
            transaction.commit();
            
        }catch (Exception e) {
            e.printStackTrace();
            //事務回滾
            transaction.rollback();
        }finally{
            //關閉方法
            HibernateUtil.close();
        }
    }

三、SQLQuery對象查詢

1.使用hibernate時候,調用底層sql實現

2.實現過程

  ①創建對象

  ②調用對象的方法得到結果

注意:如果用SQLQuery對象直接調用list()方法,返回的集合中元素是以集合的形式出現的,所以要讓其以實體類的對象形式出現需要調用addEntity(實體類.class)方法來實現

@org.junit.Test
    public void testSQLQuery() {
        Session session=null;
        Transaction transaction=null;
                
        try{
            //獲取session(HibernateUtil是我自己創建的一個工具類,專門用來獲取session的)
            session=HibernateUtil.getSession();
            transaction=session.beginTransaction();
            //操作業務
            //1.創建一個SQLQuery對象
            String sql="select * from user";
            SQLQuery sQLQuery=session.createSQLQuery(sql);
            //-------------------
            /*
            //2.調用SQLQuery的list()方法返回值是一個List類型的,list集合里面的元素是以數組的形式存在的
            List<Object[]> list=sQLQuery.list();
            //循環輸出值
            for (Object[] objects : list) {
                System.out.println(Arrays.toString(objects));
            }*/
            //--------------------
            
            //讓SQLQuery的list()方法返回值中的元素是以對象形式存在的解決辦法
            sQLQuery.addEntity(User.class);
            //調用sQLQuery里面的方法
            List<User> list =sQLQuery.list();
            for (User user : list) {
                System.out.println(user);
            }
            
            
            //提交事務
            transaction.commit();
            
        }catch (Exception e) {
            e.printStackTrace();
            //事務回滾
            transaction.rollback();
        }finally{
            //關閉方法
            HibernateUtil.close();
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM