hql 字符串where语句_Hibernate HQL示例四:条件查询

本文介绍了在Hibernate中如何通过不同的方式实现条件查询,包括字符串拼接、使用问号占位符、命名参数及批量参数传递等,并展示了如何在HQL中使用数据库函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条件查询

* 可以拼字符串的形式传递参数

* 可以用过?来传递参数(注意索引值是从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);

}

}

}

分享到:

2010-05-05 01:24

浏览 2340

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值