hibernate 5原生sql查詢測試學習代碼


基本查詢

import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.junit.jupiter.api.Test;

import com.fei.domain.Customer;
import com.fei.utils.HibernateUtils;

/**
 * 測試Hibernate中原生sql查詢
 */
public class Demo {
	@Test
	// 基本查詢
	public void fun1() {
		// 1獲得session
		Session session = HibernateUtils.openSession();
		// 2開啟事務
		Transaction tx = session.beginTransaction();

		// 3執行操作
		// =====================================
		// 1)書寫原生sql語句
		String sql = "select * from cst_customer";
		// 2)創建原生sql查詢對象(面向接口編程)
		Query<Customer> query = session.createNativeQuery(sql, Customer.class);

		// 3)獲得結果
		List<Customer> list = query.list();
		System.out.println(list);
		// =====================================

		// 4提交事務,關閉資源
		tx.commit();
		session.close();
	}
}

條件查詢

	@Test
	// 條件查詢
	public void fun2() {
		// 1獲得session
		Session session = HibernateUtils.openSession();
		// 2開啟事務
		Transaction tx = session.beginTransaction();

		// 3執行操作
		// =====================================
		// 1)書寫原生sql語句
		String sql = "select * from cst_customer where cust_id = :id";
		// 2)創建原生sql查詢對象
		Query<Customer> query = session.createNativeQuery(sql, Customer.class).setParameter("id", 2l);

		// 3)獲得結果
		List<Customer> list = query.list();
		System.out.println(list);
		// =====================================

		// 4提交事務,關閉資源
		tx.commit();
		session.close();
	}

注意:hibernate5在使用原生的sql查詢時,占位符要使用:id的形式,使用?的形式會報異常。至少我測試的時候是這樣(((φ(◎ロ◎;)φ)))

分頁查詢

	@Test
	// 分頁查詢
	public void fun3() {
		// 1獲得session
		Session session = HibernateUtils.openSession();
		// 2開啟事務
		Transaction tx = session.beginTransaction();

		// 3執行操作
		// =====================================
		// 1)書寫原生sql語句
		String sql = "select * from cst_customer limit :beginPos, :maxResult";
		// 2)創建原生sql查詢對象
		Query<Customer> query = session.createNativeQuery(sql, Customer.class);

		query.setParameter("beginPos", 0);
		query.setParameter("maxResult", 2);

		// 3)獲得結果
		List<Customer> list = query.list();
		System.out.println(list);
		// =====================================

		// 4提交事務,關閉資源
		tx.commit();
		session.close();
	}

查詢總記錄數

	@Test
	// 查詢總記錄數
	public void fun4() {
		// 1獲得session
		Session session = HibernateUtils.openSession();
		// 2開啟事務
		Transaction tx = session.beginTransaction();

		// 3執行操作
		// =====================================
		// 1)書寫原生sql語句
		String sql = "select count(*) from cst_customer";
		// 2)創建原生sql查詢對象
		Query<?> query = session.createNativeQuery(sql);

		// 3)獲得結果
		List<?> list = query.list();
		System.out.println(list.get(0));
                // 這種方式也是可以的,當知道結果只有一條時
                // Object result = query.uniqueResult();
		// =====================================

		// 4提交事務,關閉資源
		tx.commit();
		session.close();
	}

封裝的HibernateUtils工具類

package com.fei.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
	
	private static SessionFactory sf;

	// 為保證一個應用只有一個SessionFactory對象
	static {
		// 1.創建並讀取指定配置文件,空參默認加載src路徑下的名為hibernate.cfg.xml
		Configuration conf = new Configuration().configure();
		// 2.根據配置信息,創建SessionFactory對象
		sf = conf.buildSessionFactory();
	}

	// 獲得全新session
	public static Session openSession() {
		// 3.獲得新的session對象並返回
		return sf.openSession();
	}

	// 獲得與線程綁定的session
	public static Session getCurrentSession() {
		// 3.獲得與線程綁定的session對象並返回
		return sf.getCurrentSession();
	}
	
}


免責聲明!

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



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