简述Hibernate在HQL中查询实例
创始人
2024-06-08 04:10:27
0

我们学习Hibernate查询是知道HQL支持条件查询,分为好多方面,这里我们就具体Hibernate查询用实例来加以说明,希望对读者的学习带来帮助。

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.             } 

由于,涉及到多个属性查询,所以返回的是Object数组类型。

2、支持类似于PrepareStatement方式的?传递参数查询

例子:

  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.            } 

要设置参数从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.            } 

这个跟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.             } 

注意调用方法是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.            } 

数据库函数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.            } 

只需要调用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.             } 

这种查询很方便。

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.             } 

这是很简单的分页查询,分页查询实现比这个复杂多了,分页查询采用的相当于数据库里面的 limit ,来限制一次查询显示的条数。

注:还有一些其他就不一一列举了,Hibernate查询在Hibernate的使用中HQL查询语言如果用得好,会给工作带来比较高的效率,比较重要,而且还有一个查询效率的问题,这涉及到缓存等方面,以后会更新这方面的文章。

【编辑推荐】

  1. 简述Hibernate中加载并存储对象
  2. Hibernate传播性持久化攻略
  3. 深入了解Hibernate自动状态检测
  4. 教你如何在Hibernate中实例化集合和代理
  5. Hinerbate单端关联代理颇析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...