Hibernate中的核心接口query接口用法
Query是Hibernate的查詢接口,用于從數據存儲源查詢對象及控制執行查詢的過程,Query包裝了一個HQL查詢語句。
Query接口的用法:
通過SessionFactory獲得了session對象后,除了可以通過get(類名.class, id)方法得到相應的對象,還可以通過獲得Query對象來取得需要的對象?
<span style="font-size:24px;">Query query = session.createQuery("查詢語句如from UserBean");</span>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開始的,給第一個問號賦值22query.setString(1, "%志%"); //設置第二個問號的值為“%志%”
例:
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<UserInfoPO> list=query.list();for(int i=0;i<list.size();i++){ui=(UserInfoPO)list.get(i);System.out.println(ui.getUserName());}
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<User> list = query.list();// 得到所有的結果集for (User u : list) {System.out.println(u.toString());}} finally {if (session != null) {session.close();}}}
總結
以上是生活随笔為你收集整理的Hibernate中的核心接口query接口用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实践hibernate的应用——stru
- 下一篇: hibernate的HQL查询语言总结