`

Hibernate HQL示例四:条件查询

阅读更多

条件查询                  
  * 可以拼字符串的形式传递参数
  * 可以用过?来传递参数(注意索引值是从0开始的,跟jdbc不同,jdbc是从1开始的)
  * 可以通过 :参数名 来传递参数(即命名参数方式)
  * 如果对应的参数值是多个,可以调用setParamterList()传方法开递
  * 在HQL中可以使用数据库的函数,如date_format()

 示例代码如下:

package com.bjsxt.hibernate;

import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import junit.framework.TestCase;

public class SimpleConditionQueryTest extends TestCase {

	public void testQuery1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//条件查询,拼字符串
			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[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
	
	public void testQuery2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//条件查询,使用 ? 的方式传递参数
			Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE ?");
			
			//传递参数
			//参数的索引是从0开始的
			//传递的字符串,无需用''单引号括起来
			query.setParameter(0, "%1%");
			
			
			List students = query.list(); 
			
			for (Iterator iter = students.iterator();iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}

	public void testQuery3() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//条件查询,使用 :参数名称 的方式传递参数
			Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE :myname");
			
			//传递参数
			query.setParameter("myname", "%1%");
			
			List students = query.list(); 
			
			for (Iterator iter = students.iterator();iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
	
	public void testQuery4() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//条件查询,因为setParameter方法返回Query接口,所以可以用省略的方式来查询
			List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE :myname and s.id = :myid")
			.setParameter("myname", "%1%")
			.setParameter("myid", 15)
			.list();
			
			for (Iterator iter = students.iterator();iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}

	public void testQuery5() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//条件查询,支持in,需要用setParameterList()进行参数传递
			List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.id in(:myids)")
			.setParameterList("myids", new Object[]{1, 3, 5})
			.list();
			
			for (Iterator iter = students.iterator();iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}

	public void testQuery6() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//条件查询,支持in,需要用setParameter进行参数传递
//			List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE " +
//					"date_format(s.createTime, '%Y-%m') =?")
//			.setParameter(0, "2007-01")
//			.list();

			List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE " +
			"substring(s.createTime, 1, 7) =?")
         	.setParameter(0, "2007-01")
	        .list();
			
			for (Iterator iter = students.iterator();iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}

	public void testQuery7() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			
			//条件查询,支持in,需要用setParameter进行参数传递

			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE " +
			"s.createTime between ? and ? ")
         	.setParameter(0, format.parseObject("2007-01-01"))
         	.setParameter(1, format.parseObject("2007-03-01"))
	        .list();
			
			for (Iterator iter = students.iterator();iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + ", " + obj[1]);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			HibernateUtils.closeSession(session);
		}				
	}
	
}

 

分享到:
评论

相关推荐

    Hibernate查询语言HQL.PPT

    它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地 SQL 查询等。 在 Hibernate 中检索对象的各种方法: 1. 导航对象图:通过对象的关联关系,...

    hibernateHQL关联查询

    #### 四、Hibernate HQL 关联查询实现 Hibernate HQL关联查询遵循了SQL中连接查询的概念,但在语法上有所区别,使其更符合面向对象编程的习惯。Hibernate支持以下几种连接查询方式: 1. **内连接(Inner Join)**...

    Hibernate HQL查询 分页查询 模糊查询.docx

    ### Hibernate HQL 查询详解 #### 一、HQL(Hibernate Query Language)简介 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得...

    hibernate 查询?Hibernate的HQL查询

    2. 简单HQL示例: ```java Query query = session.createQuery("from User user where user.name like 'J%'"); List<User> users = query.list(); ``` 3. 复杂HQL示例: ```java Query query = session....

    HibernateHQL.zip_更新

    此压缩包中的`HibernateHQL.chm`文件很可能是Hibernate HQL的详细教程或参考手册,包含了HQL的语法、用法示例、最佳实践以及可能遇到的问题解决方案。它可以帮助开发者深入理解如何在实际项目中高效地使用HQL进行...

    HQL(Hibernate Query Language):

    3. **条件查询**:支持WHERE子句,可以使用比较运算符(=, , >, <, >=, )和逻辑运算符(AND, OR, NOT)来过滤结果。 4. **分组和聚合**:可以使用GROUP BY和HAVING子句对查询结果进行分组和聚合操作,如COUNT(), ...

    Hibernate中的查询:HQL、Criteria、原生SQl

    本篇文章将深入探讨Hibernate中的三种主要查询方式:HQL(Hibernate Query Language)、Criteria API以及原生SQL。 一、HQL(Hibernate Query Language) HQL是Hibernate提供的一种面向对象的查询语言,它类似于SQL...

    hibernate hql各类查询范例

    在第一个示例中,我们看到一个名为 `findPerson` 的方法,该方法执行了一个 HQL 查询来查找满足特定条件的人。这里的 HQL 语句为: ```java "from syidt.modules.grp.basegrp.persistence.Person as person where ...

    Hibernate 课件_HQL

    ### Hibernate 课件_HQL 知识点解析 #### HQL查询 ...这些知识点涵盖了HQL的基本概念、查询方法、各种高级查询技巧以及Session的管理等方面,希望能够帮助大家更好地理解和掌握Hibernate的HQL查询技术。

    hibernateHQL基本查询

    条件查询 如果想要查询书名中包含 “c#” 的所有书籍,可以使用如下 HQL 语句: ```java String hql = "select b.title, b.price from Books b where b.title like '%c#%'"; Query query = session.createQuery...

    Hibernate HQL.txt

    根据提供的文件信息,我们可以深入探讨Hibernate HQL(Hibernate Query Language)的相关知识点,特别是关于其查询功能、连接操作、条件过滤以及聚合函数的应用等。 ### Hibernate HQL简介 Hibernate HQL是一种...

    hibernate hql where语句拼接工具类

    总的来说,“hibernate hql where语句拼接工具类”是为了简化和规范化在Hibernate中构建带有动态条件的HQL查询的过程,提高代码的可读性和可维护性。通过这样的工具类,开发者可以更方便地根据业务需求构建复杂的...

    Hibernate HQL查询.docx

    ### Hibernate HQL 查询详解 #### 一、HQL 概述 Hibernate 提供了一种非常强大的查询语言——HQL(Hibernate Query Language),它在语法上与 SQL 类似但功能更为强大,因为它支持面向对象的特性,例如继承、多态性...

    HibernateHQL实现前台翻页

    "HibernateHQL实现前台翻页"这一主题就是关于如何利用Hibernate的HQL(Hibernate Query Language)来实现数据库查询的分页功能,并结合Servlet(通常与MVC模式中的Controller层对应)和MySQL数据库来构建一个完整的...

    HQL是hibernate自己的一套查询

    根据提供的标题、描述以及部分代码内容,我们可以了解到这段材料主要涉及的是Hibernate框架中的HQL(Hibernate Query Language)查询语言的使用。接下来将详细介绍HQL的相关知识点。 ### HQL概述 HQL是Hibernate...

    精通hibernate HQL语言

    除了检索所有对象,HQL还可以进行更复杂的查询,比如根据特定条件筛选。例如,如果我们要找到所有年龄大于18岁的学生,HQL语句如下: ```java String hql = "from Student where sage > 18"; List<Student> adults ...

    Hibernate 多表连接分页查询示范项目

    Hibernate 支持多种方式来实现多表连接查询,包括 HQL(Hibernate Query Language)和 Criteria 查询。本项目主要关注 Criteria API 的使用,这是一种基于 Java 对象的查询方式,更加灵活且易于理解和维护。 **...

    hql模糊查询hql模糊查询

    根据提供的文件信息,本文将详细解析HQL(Hibernate Query Language)中的模糊查询技术,并通过具体的代码示例来阐述不同方式下的实现方法。 ### HQL模糊查询概述 HQL是Hibernate框架提供的一种面向对象的查询语言...

    Hibernate教程(数据查询)HQL,PDF格式

    在给定的部分内容中,我们看到了一个简单的Hibernate查询示例: ```java List users = session.find("from User"); ``` 这条语句使用HQL语法查询了所有的`User`对象。`find`方法是`Session`接口的一个快捷方法,...

    Hibernate查询方式代码示例

    下面是一个简单的HQL查询示例: ```java String hql = "FROM Student WHERE age > 20"; Query query = session.createQuery(hql); List<Student> students = query.list(); for (Student student : students)...

Global site tag (gtag.js) - Google Analytics