Hibernate查詢方式、物件導航查詢、OID查詢、HQL查詢、QBC、元素SQL
阿新 • • 發佈:2018-12-10
-》物件導航查詢
通過企業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查詢