转载出处:http://developer.51cto.com/art/200909/154287.htm
我们学习Hibernate查询是知道HQL支持条件查询,分为好多方面,这里我们就具体Hibernate查询用实例来加以说明,希望对读者的学习带来帮助。
1、支持字符串方式参数传递查询:
例子:
- List students = session.createQuery("select s.id,s.name from Student s where s.name like '%1' ").list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- Object[] o = (Object[])iter.next();
- System.out.println(o[0]+","+o[1]);
- }
由于,涉及到多个属性查询,所以返回的是Object数组类型。
2、支持类似于PrepareStatement方式的?传递参数查询
例子:
- List students = session.createQuery("select s.id,s.name from Student s where s.name like :goodname ")
- .setParameter("goodname", "%1%").list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- Object[] o = (Object[])iter.next();
- System.out.println(o[0]+","+o[1]);
- }
要设置参数从0开始,见第2行。
3、去变量方式参数传递
例子:
- List students = session.createQuery("select s.id,s.name from Student s where s.name like :goodname ")
- .setParameter("goodname", "%1%").list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- Object[] o = (Object[])iter.next();
- System.out.println(o[0]+","+o[1]);
- }
这个跟2中的相似,只是多了参数可以归为一类。
4、支持多参数传递
例子:
- List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)")
- .setParameterList("myids", new Object[]{1, 2, 3, 4, 5,32,13,14})
- .list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- Object[] o = (Object[])iter.next();
- System.out.println(o[0]+","+o[1]);
- }
注意调用方法是setParameterList。
5、调用数据库里面的函数
例子:
- List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?")
- .setParameter(0, "2008-10")
- .list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- Object[] o = (Object[])iter.next();
- System.out.println(o[0]+","+o[1]);
- }
数据库函数date_format。
6、直接支持sql查询
例子:
- List students = session.createSQLQuery("select *from t_student").list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- Object[] o = (Object[])iter.next();
- System.out.println(o[0]+","+o[1]);
- }
只需要调用session里面的createSQLQuery方法即可。
7、进行导航查询
例子:
- List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- String s = (String)iter.next();
- System.out.println(s);
- }
这种查询很方便。
8、分页查询
例子:
- List students = session.createQuery("from Student").setFirstResult(0).setMaxResults(3).list();
- for (Iterator iter=students.iterator(); iter.hasNext();) {
- Student student = (Student)iter.next();
- System.out.println(student.getName());
- }
这是很简单的分页查询,分页查询实现比这个复杂多了,分页查询采用的相当于数据库里面的 limit ,来限制一次查询显示的条数。
注:还有一些其他就不一一列举了,Hibernate查询在Hibernate的使用中HQL查询语言如果用得好,会给工作带来比较高的效率,比较重要,而且还有一个查询效率的问题,这涉及到缓存等方面,以后会更新这方面的文章。