Hibernate中的核心接口query接口用法
Query是Hibernate的查詢接口,用于從數(shù)據(jù)存儲源查詢對象及控制執(zhí)行查詢的過程,Query包裝了一個HQL查詢語句。
Query接口的用法:
通過SessionFactory獲得了session對象后,除了可以通過get(類名.class, id)方法得到相應(yīng)的對象,還可以通過獲得Query對象來取得需要的對象?
<span style="font-size:24px;">Query query = session.createQuery("查詢語句如from UserBean");</span>Query對象在Session對象關(guān)閉之前有效,否則會拋出SessionException異常。因為Session對象就想JDBC中的Connection 對象,即數(shù)據(jù)庫的一次連接。關(guān)閉Connection對象,Statement對象就不能再使用,所以關(guān)閉Session后就不能再使用Query對象了。
Query接口的方法:
Query接口的常用方法:
1,setxxx():用于設(shè)置HQL語句中問號或者變量的值;
設(shè)置HQL語句中問號或者變量的值有兩種使用方式:
A,setString(int position,String value);設(shè)置HQL中的“?”的值,其中position代表“?”在HQL中的位置,value是要為“?”設(shè)置的值
例:
Query query=session.createQuery("from UserInfoPO u where u.age>? and u.useName like ?");query.setInteger(0, 22); //使用"?",第一個下標(biāo)是從0開始的,給第一個問號賦值22query.setString(1, "%志%"); //設(shè)置第二個問號的值為“%志%”
例:
Query query=session.createQuery("from UserInfoPO u where u.age>:minAge and u.useName like:useName");query.setInteger("minAge", 22); //設(shè)置minAge的值query.setString("userName", "%志%"); //設(shè)置useName的值
2,list();返回查詢結(jié)果,并把查詢結(jié)果轉(zhuǎn)換成list對象;
也可以用query.uniqueResult();//得到一個單個的對象?
Query query=session.createQuery("from UserInfoPO u where u.age>:minAge and u.useName like:useName");query.setInteger("minAge", 22); //設(shè)置minAge的值query.setString("userName", "%志%"); //設(shè)置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();執(zhí)行更新和刪除語句
Query query=session.createQuery("delete from UserInfoPO");query.executeUpdate(); //刪除數(shù)據(jù)
分頁查詢:
query.setFirstResult(位置如0);//表示從哪個位置開始查詢,返回query對象
query.setMaxResult(記錄條數(shù));//表示當(dāng)頁共幾條記錄,返回一個集合
session.createQuery("select count(*) from 類名").uniqueResult();//得到記錄總數(shù)
介紹一些有關(guān)Query的查詢語句
使用HQL刪除數(shù)據(jù):
String hql = "delete user where age>18"; Query query = session.createQuery(hql); int ref = query.executeUpdate(); 更新數(shù)據(jù) :
Transaction tx= session.beginTransaction(); Query query = session.createQuery("update User set name='momor' where name='bbb'"); query.executeUpdate(); tx.commit(); session.close(); 也可以在where子句上進(jìn)行表達(dá)式,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可以測試字段值是否在指定的范圍之內(nèi):
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可以讓您進(jìn)行模糊條件搜尋,例如想搜尋名稱中含有cater開頭的數(shù)據(jù):
Query query = session.createQuery("from User user where user.name like 'cater%'"); 對查詢結(jié)果使用order by進(jìn)行排序,可使用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");?
代碼應(yīng)用:
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();// 得到所有的結(jié)果集for (User u : list) {System.out.println(u.toString());}} finally {if (session != null) {session.close();}}}
總結(jié)
以上是生活随笔為你收集整理的Hibernate中的核心接口query接口用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实践hibernate的应用——stru
- 下一篇: hibernate的HQL查询语言总结