Hibernate--查詢

一 Query
1 使用Query對象,不需要寫sql語句,但是寫hql語句
(1)hql:hibernate query language,hibernate提供查詢語句,這個hql語句和普通sql語句很相似
(2)hql和sql語句區別:

  • 使用sql語句操作表和字段
  • 使用hql操作實體類和屬性

2 查詢所有hql語句

form 實體類名稱

3 Query對象使用
(1)創建Query對象

            //1 創建Query對象
            Query query= session.createQuery("from entity.User");

(2)調用Query對象里面的方法得到結果

            //2 調用query對象里面的方法得到結果
            List<User> list = query.list();
            for (User user :list){
                System.out.println(user);
            }

HibernateQuery.java

import Utils.HibernateUtils;
import entity.User;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import java.util.List;

public class HibernateQuery {
    @Test
    public void QueryText(){
        Transaction tx =null;
        try {
           Session session= HibernateUtils.getSessionObject();
            tx = session.beginTransaction();
            //1 創建Query對象
            Query query= session.createQuery("from entity.User");
            //2 調用query對象里面的方法得到結果
            List<User> list = query.list();
            for (User user :list){
                System.out.println(user);
            }

            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }finally {

        }
    }
}

結果顯示

二 Criteria
1 使用這個對象查詢操作,但是使用這個對象時候,不需要寫語句,直接調用方法實現
2 實現過程
(1)創建Criteria

            //1 創建Criteria
             Criteria criteria= session.createCriteria(User.class);

(2)調用對象里面的方法得到結果

            //2 調用對象里面的方法得到結果
            List<User> list= criteria.list();
            for (User user:list){
                System.out.println(user);
            }

HibernateQuery.java

 public void CriteriaText() {
        Transaction tx = null;
        try {
           Session session= HibernateUtils.getSessionObject();
           tx= session.beginTransaction();
            //1 創建Criteria
             Criteria criteria= session.createCriteria(User.class);
            //2 調用對象里面的方法得到結果
            List<User> list= criteria.list();
            for (User user:list){
                System.out.println(user);
            }
           tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }
    }

結果顯示

三 SQLQuery
1 使用hibernate時候,調用底層sql實現
2 實現過程
(1)創建對象

            //1.創建對象
          SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM t_user ");

(2)調用對象的方法得到結果

            //2.調用方法得到結果
             List<Object[]> list= sqlQuery.list();
             for (Object[] objects:list){
                 System.out.println(Arrays.toString(objects));
             }
返回數組

問題:返回的list集合每部分都是數組
解決:讓返回list中每部分是對象形式

            //設置數據返回到哪個實體類
            sqlQuery.addEntity(User.class);

HibernateQuery.java

import Utils.HibernateUtils;
import entity.User;
import org.hibernate.*;
import org.junit.Test;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;

public class HibernateQuery {
    @Test
    public void QueryText(){
        Transaction tx =null;
        try {
           Session session= HibernateUtils.getSessionObject();
            tx = session.beginTransaction();
            //1 創建Query對象
            Query query= session.createQuery("from entity.User");
            //2 調用query對象里面的方法得到結果
            List<User> list = query.list();
            for (User user :list){
                System.out.println(user);
            }

            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }
    }

    @Test
    public void CriteriaText() {
        Transaction tx = null;
        try {
           Session session= HibernateUtils.getSessionObject();
           tx= session.beginTransaction();
            //1 創建Criteria
             Criteria criteria= session.createCriteria(User.class);
            //2 調用對象里面的方法得到結果
            List<User> list= criteria.list();
            for (User user:list){
                System.out.println(user);
            }
           tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }
    }
    @Test
    public  void SQLQueryText(){
        Transaction tx =null;
        try {
           Session session = HibernateUtils.getSessionObject();
           tx = session.beginTransaction();
            //1.創建對象
          SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM t_user ");
          //返回的list中每部分是對象形式
            //設置數據返回到哪個實體類
            sqlQuery.addEntity(User.class);
          //2.調用方法得到結果
           List<User> list= sqlQuery.list();
           for (User user:list){
               System.out.println(user);
           }

/*            //2.調用方法得到結果
             List<Object[]> list= sqlQuery.list();
             for (Object[] objects:list){
                 System.out.println(Arrays.toString(objects));
             }*/
           tx.rollback();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }
    }
}

執行結果
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文包括:1、Hibernate 的查詢方式2、HQL (Hibernate Query Language) 查詢...
    廖少少閱讀 2,688評論 0 15
  • Hibernate查詢方式 對象導航查詢(1)根據id查詢某個客戶,再查詢這個客戶里面所有的聯系人 OID查詢(1...
    Seo_sir閱讀 3,680評論 0 2
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 一 對象導航查詢 根據id查詢某個客戶,再查詢這個客戶里面所有的聯系人 查詢某個客戶里面所有聯系人過程,使用對象導...
    常威爆打來福閱讀 1,094評論 3 6
  • 最早接觸到龕是小時候和外婆一起住的時候,外婆信佛,每天早晚念經的時候我偶爾會在一旁看著,壁龕上供著幾尊菩薩,...
    渡邊志明閱讀 448評論 2 1