hibernate的hql語句(一)
阿新 • • 發佈:2018-12-01
1.什麼是hql
HQL是Hibernate Query Language的縮寫,提供更加豐富靈活、更為強大的查詢能力;HQL更接近SQL語句查詢語法。
2. hql和sql區別/異同
HQL | SQL |
操作的是類名/屬性 | 操作的是表名/列名 |
語句區分大小寫,關鍵字不區分大小寫 | 語句不區分大小寫 |
?,從下標0開始計算位置(hibernate5之後不支援) | ?,從順序1開始計算位置 |
:命名引數 | 不支援:命名引數 |
面向物件的查詢語言 | 面向結構查詢語言 |
3. 處理返回的結果集
3.1返回單個物件
/** * hql語句結果集處理情況1 * 返回單個物件 */ public static void test1(){ Session session = SessionFactoryUtils.openSession(); Transaction transaction = session.beginTransaction(); String hql="from Student where sid=1"; Query query = session.createQuery(hql); Object obj = query.getSingleResult(); System.out.println(obj.getClass().getName()); System.out.println(obj); transaction.commit(); SessionFactoryUtils.closeSession(); }
結果:
3.1.2返回多個物件
/** * hql語句結果集處理情況1 * 返回多個物件 注意資料庫欄位不能為null */ public static void test2(){ Session session = SessionFactoryUtils.openSession(); Transaction transaction = session.beginTransaction(); String hql="from Student"; Query query = session.createQuery(hql); List list=query.list(); for (Object o : list) { System.out.println(o); } transaction.commit(); SessionFactoryUtils.closeSession(); }
結果:
3.2返回字串
/**
* hql語句結果集處理情況2
* 返回字串
*/
public static void test3(){
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql="select sname from Student where sid=1";
Query query = session.createQuery(hql);
Object obj=query.getSingleResult();
System.out.println(obj);
transaction.commit();
SessionFactoryUtils.closeSession();
}
結果:
3.3返回陣列
/**
* hql語句結果集處理情況3
* 返回陣列
*/
public static void test4(){
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql="select sid,sname,version from Student where sid=1";
Query query = session.createQuery(hql);
Object obj=query.getSingleResult();
System.out.println(Arrays.toString((Object[])obj));
transaction.commit();
SessionFactoryUtils.closeSession();
}
結果:
3.4返回Map
/**
* hql語句結果集處理情況4
* 返回Map
*/
public static void test5(){
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql="select new map(sid as sid,sname as sname,version as version) from Student where sid=1";
Query query = session.createQuery(hql);
Object obj=query.getSingleResult();
System.out.println(obj);
transaction.commit();
SessionFactoryUtils.closeSession();
}
結果:
3.5查詢多列返回物件(注意物件的構造方法)
/**
* hql語句結果集處理情況5
* 查詢多列返回物件
*/
public static void test6(){
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql="select new Student (sid,sname)from Student where sid=1";
Query query = session.createQuery(hql);
Object obj=query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(obj);
transaction.commit();
SessionFactoryUtils.closeSession();
}
結果:
4. hql中使用佔位符
4.1 ?佔位符
從下標0開始計算位置hibernate5之後不再支援?佔位符所以不為大家介紹了
4.2 :命名引數
/**
* hql命名引數
*/
public static void test7(){
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql="from Student where sid in :ids";
Query query = session.createQuery(hql);
//這裡使用 query.setParameter(0,1)報錯
// query.setParameter("id",1);//這個是傳單個引數
// 如果使用in的話
List ids=new ArrayList();
ids.add(1);
ids.add(2);
query.setParameterList("ids",ids);
Object obj = query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(obj);
transaction.commit();
SessionFactoryUtils.closeSession();
}
5.連線查詢
public static void test8(){
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql="select new map(oi.order_item_id,o.order_id) from Order o,OrderItem oi where o.order_id=oi.oid ";
Query query = session.createQuery(hql);
List list=query.list();
for (Object o : list) {
System.out.println(o);
}
transaction.commit();
SessionFactoryUtils.closeSession();
}
結果:
6. 聚合函式
這裡就給大家使用一個count()函式其餘的sum,avg,min,max用法都一樣
/**
* 聚合函式
*/
public static void test9(){
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql="select count(sid)from Student ";
Query query = session.createQuery(hql);
Object singleResult = query.getSingleResult();
System.out.println(singleResult);
transaction.commit();
SessionFactoryUtils.closeSession();
}
7.hql分頁
/**
* hql分頁
* 查詢第二頁每頁三條
*/
public static void test10() {
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
String hql = "from Book ";
Query query = session.createQuery(hql);
int page = 2;
int offeset = 3;
query.setFirstResult(page * offeset);
query.setMaxResults((page - 1) * offeset);
List list = query.list();
for (Object o : list) {
System.out.println(o);
}
transaction.commit();
SessionFactoryUtils.closeSession();
}