Hibernate提供的多種查詢方式

注意:每種查詢方式又含有多種重載的方法,這裏只列出基礎的一種。

Hibernate提供了多種查詢方式:

  1. Hibernate查詢方式一:get查詢
  2. Hibernate查詢方式二:load延遲加載
  3. Hibernate查詢方式三:HQL之createQuery,返回多條數據
  4. Hibernate查詢方式四:createCriteria查詢,返回多條數據
  5. Hibernate查詢方式五:HQL之createSQLQuery,根據SQL語句返回數據
package com.ckinghan.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import com.ckinghan.bean.User;

/**
 * Hibernate提供了多種查詢方式
 * @author ckinghan
 */
public class HibernateQueryTest {

    /**
     * Hibernate查詢方式一:get
     */
    @Test
    public void HibernateGetQuery(){
        Configuration configuration = new Configuration().configure();
        SessionFactory buildSessionFactory = configuration.buildSessionFactory();
        Session currentSession = buildSessionFactory.getCurrentSession();
        Transaction transaction = currentSession.beginTransaction();
        Object object = currentSession.get(User.class, 1);
        if(object != null && !"".equals(object)){
            User user = (User) object;
            System.out.println(user);
        }
        transaction.commit();
        buildSessionFactory.close();
    }

    /**
     * Hibernate查詢方式二:load延遲加載
     */
    @Test
    public void hibernateLoadQuery(){
        Configuration configuration = new Configuration().configure();
        SessionFactory buildSessionFactory = configuration.buildSessionFactory();
        Session currentSession = buildSessionFactory.getCurrentSession();
        Transaction transaction = currentSession.beginTransaction();
        Object load = currentSession.load(User.class, 1);
        if(load != null && !"".equals(load)){
            User user = (User) load;
            System.out.println(user);
        }
        transaction.commit();
        buildSessionFactory.close();
    }

    /**
     * Hibernate查詢方式三:HQL之createQuery,返回多條數據
     */
    @Test
    public void hibernateHqlQuery(){
        Configuration configuration = new Configuration().configure();
        SessionFactory buildSessionFactory = configuration.buildSessionFactory();
        Session currentSession = buildSessionFactory.getCurrentSession();
        Transaction transaction = currentSession.beginTransaction();
        //注意:這裏傳的參數中的User是實體類名
        Query createQuery = currentSession.createQuery("from User");
        //通過Query類中的list()方法返回list結果集
        List<User> users = createQuery.list();
        System.out.println(users);
        transaction.commit();
        buildSessionFactory.close();
    }

    /**
     * Hibernate查詢方式四:createCriteria查詢,返回多條數據
     */
    @Test
    public void hibernateCriteriaQuery(){
        Configuration configuration = new Configuration().configure();
        SessionFactory buildSessionFactory = configuration.buildSessionFactory();
        Session currentSession = buildSessionFactory.getCurrentSession();
        Transaction transaction = currentSession.beginTransaction();
        //通過實體類,將對應的數據庫表中的數據全部返回
        Criteria createCriteria = currentSession.createCriteria(User.class);
        //通過Criteria類提供的list()方法將數據轉換爲List<User>類型
        List<User> list = createCriteria.list();
        System.out.println(list);
        transaction.commit();
        buildSessionFactory.close();
    }

    /**
     * Hibernate查詢方式五:HQL之createSQLQuery,根據SQL語句返回數據
     */
    @Test
    public void hibernateHqlCreateSqlQuery(){
        Configuration configuration = new Configuration().configure();
        SessionFactory buildSessionFactory = configuration.buildSessionFactory();
        Session currentSession = buildSessionFactory.getCurrentSession();
        Transaction transaction = currentSession.beginTransaction();
        //傳入要查詢的SQL語句 
        SQLQuery query = currentSession.createSQLQuery("select * from user");
        //將查詢到的數據封裝到User實體中
        query.addEntity(User.class);
        //通過Query的list()方法,返回List<User>
        List<User> list = query.list();
        System.out.println(list);
        transaction.commit();
        buildSessionFactory.close();
    }

}
發佈了153 篇原創文章 · 獲贊 69 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章