随笔-61  评论-159  文章-0  trackbacks-0
在hibernate中,HQL支持条件查询。
1、支持字符串方式参数传递查询:
例子:
1List 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方式的?传递参数查询
例子:
1List 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、去变量方式参数传递
例子:
1List 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、支持多参数传递
例子:
1List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)")
2            .setParameterList("myids"new Object[]{12345,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、调用数据库里面的函数
例子:

1List 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查询
例子:
1List 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、进行导航查询
例子:

1List 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、分页查询
例子:
1List 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 阅读(1453) 评论(0)  编辑  收藏 所属分类: hibernate

只有注册用户登录后才能发表评论。


网站导航: