在hibernate中,HQL支持
條件查詢。
1、支持字符串方式參數傳遞查詢:
例子:
1
List students = session.createQuery("select s.id,s.name from Student s where s.name like '%1' ").list();
2
for (Iterator iter=students.iterator(); iter.hasNext();)
{
3
Object[] o = (Object[])iter.next();
4
System.out.println(o[0]+","+o[1]);
5
}
PS:由于,涉及到多個屬性查詢,所以返回的是Object數組類型。
2、支持類似于PrepareStatement方式的?傳遞參數查詢
例子:
1
List students = session.createQuery("select s.id,s.name from Student s where s.name like ? ")
2
.setParameter(0, "%1%").list();
3
for (Iterator iter=students.iterator(); iter.hasNext();)
{
4
Object[] o = (Object[])iter.next();
5
System.out.println(o[0]+","+o[1]);
6
}
PS:要設置參數從0開始,見第2行。
3、去變量方式參數傳遞
例子:
1
List students = session.createQuery("select s.id,s.name from Student s where s.name like :goodname ")
2
.setParameter("goodname", "%1%").list();
3
for (Iterator iter=students.iterator(); iter.hasNext();)
{
4
Object[] o = (Object[])iter.next();
5
System.out.println(o[0]+","+o[1]);
6
}
PS:這個跟2中的相似,只是多了參數可以歸為一類。
4、支持多參數傳遞
例子:
1
List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)")
2
.setParameterList("myids", new Object[]
{1, 2, 3, 4, 5,32,13,14})
3
.list();
4
for (Iterator iter=students.iterator(); iter.hasNext();)
{
5
Object[] o = (Object[])iter.next();
6
System.out.println(o[0]+","+o[1]);
7
}
PS:注意調用方法是setParameterList。
5、調用數據庫里面的函數
例子:
1
List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?")
2
.setParameter(0, "2008-10")
3
.list();
4
for (Iterator iter=students.iterator(); iter.hasNext();)
{
5
Object[] o = (Object[])iter.next();
6
System.out.println(o[0]+","+o[1]);
7
}
PS:數據庫函數date_format。
6、直接支持sql查詢
例子:
1
List students = session.createSQLQuery("select *from t_student").list();
2
for (Iterator iter=students.iterator(); iter.hasNext();)
{
3
Object[] o = (Object[])iter.next();
4
System.out.println(o[0]+","+o[1]);
5
}
PS:只需要調用session里面的createSQLQuery方法即可。
7、進行導航查詢
例子:
1
List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();
2
for (Iterator iter=students.iterator(); iter.hasNext();)
{
3
String s = (String)iter.next();
4
System.out.println(s);
5
}
PS:這種查詢很方便。
8、分頁查詢
例子:
1
List students = session.createQuery("from Student").setFirstResult(0).setMaxResults(3).list();
2
for (Iterator iter=students.iterator(); iter.hasNext();)
{
3
Student student = (Student)iter.next();
4
System.out.println(student.getName());
5
}
PS:這是很簡單的分頁查詢,分頁查詢實現比這個復雜多了,分頁查詢采用的相當于數據庫里面的 limit ,來限制一次查詢顯示的條數。
注:還有一些其他就不一一列舉了,在hibernate的使用中HQL查詢語言如果用得好,會給工作帶來比較高的效率,比較重要,而且還有一個查詢效率的問題,這涉及到緩存等方面,以后會更新這方面的文章。
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必注明作者和文章的詳細出處地址,否則不允許轉載,多謝合作!
posted on 2008-10-31 20:46
apple0668 閱讀(1466)
評論(0) 編輯 收藏 所屬分類:
hibernate