Hibernate中的核心介面query介面用法
Query是Hibernate的查詢介面,用於從資料存放區源查詢對象及控制執行查詢的過程,Query封裝了一個HQL查詢語句。
Query介面的用法:
通過SessionFactory獲得了session對象後,除了可以通過get(類名.class, id)方法得到相應的對象,還可以通過獲得Query對象來取得需要的對象
Query query = session.createQuery(查詢語句如from UserBean);
Query對象在Session對象關閉之前有效,否則會拋出SessionException異常。因為Session對象就想JDBC中的Connection 對象,即資料庫的一次串連。關閉Connection對象,Statement對象就不能再使用,所以關閉Session後就不能再使用Query對象了。
Query介面的方法:
Query介面的常用方法:
1,setxxx():用於設定HQL語句中問號或者變數的值;
設定HQL語句中問號或者變數的值有兩種使用方式:
A,setString(int position,String value);設定HQL中的“?”的值,其中position代表“?”在HQL中的位置,value是要為“?”設定的值
例:
Query query=session.createQuery(from UserInfoPO u where u.age>? and u.useName like ?); query.setInteger(0, 22); //使用?,第一個下標是從0開始的,給第一個問號賦值22 query.setString(1, %志%); //設定第二個問號的值為“%志%”
B,setString(String paraName,String value);設定HQL中“:”後所跟變數的值;其中paraName代表HQL中“:”後邊的變數名,value是該變數的值:
例:
Query query=session.createQuery(from UserInfoPO u where u.age>:minAge and u.useName like:useName); query.setInteger(minAge, 22); //設定minAge的值 query.setString(userName, %志%); //設定useName的值
2,list();返回查詢結果,並把查詢結果轉換成list對象;
也可以用query.uniqueResult();//得到一個單個的對象
Query query=session.createQuery(from UserInfoPO u where u.age>:minAge and u.useName like:useName); query.setInteger(minAge, 22); //設定minAge的值 query.setString(userName, %志%); //設定useName的值 List list=query.list(); for(int i=0;i
3,executeUpdate();執行更新和刪除語句
Query query=session.createQuery(delete from UserInfoPO); query.executeUpdate(); //刪除資料
分頁查詢:
query.setFirstResult(位置如0);//表示從哪個位置開始查詢,返回query對象
query.setMaxResult(記錄條數);//表示當頁共幾條記錄,返回一個集合
session.createQuery(select count(*) from 類名).uniqueResult();//得到記錄總數
介紹一些有關Query的查詢語句
使用HQL刪除資料:
String hql = delete user where age>18; Query query = session.createQuery(hql); int ref = query.executeUpdate();
更新資料 :
Transaction tx= session.beginTransaction(); Query query = session.createQuery(update User set name='momor' where name='bbb'); query.executeUpdate(); tx.commit(); session.close();
也可以在where子句上進行運算式,and、or:
Query query = session.createQuery(from User user where (user.age / 10 = 3));
Query query = session.createQuery(from User user where (user.age > 20) and (user.name = 'caterpillar'));
is not nullL與is null則可以測試欄位值是否為空白值:
Query query = session.createQuery(from User user where user.name is not null);
between可以測試欄位值是否在指定的範圍之內:
Query query = session.createQuery(from User user where user.age between 20 and 30);
可以使用in或not in來測試欄位值是否在您指定的集合中:
Query query = session.createQuery(from User user where user.name in('caterpillar', 'momor'));like或not like可以讓您進行模糊條件搜尋,例如想搜尋名稱中含有cater開頭的資料:
Query query = session.createQuery(from User user where user.name like 'cater%');
對查詢結果使用order by進行排序,可使用desc反排序:
Query query = session.createQuery(from User user order by user.age);
Query query = session.createQuery(from User user order by user.age desc, user.name);
代碼應用:
public static void query(String name) { Session session = null; try { session = HibernateSessionFactory.getSession(); //定義hql語句,目的是:通過name查詢所有 String queryString = from User as user where user.name=:n; Query query = session.createQuery(queryString); query.setString(n, name); //查詢出所有的name相同的 List list = query.list();// 得到所有的結果集 for (User u : list) { System.out.println(u.toString()); } } finally { if (session != null) { session.close(); } } }