【Hibernate步步为营】--hql查询过滤器及相关聚合函数查询详解

        上篇文章讨论了hql查询中的连接查询,它的查询语法在功能上和sql的连接查询是相同的,内连接查询取得的是关系之间的笛卡尔积,外连接查询是获取一个关系表及与另一个关系表的合集部分,具体的使用方法见上篇文章,并在最后讨论了外置命名查询的方法。该篇文章将会对hql的参数查询、函数查询及查询过滤器做详细的讨论。


一、参数查询


        参数查询其实是使用等价代换的方法,使用设置的值替换字符串中指定位置的符号,或者通过使用参数名称,使用字符串来替换参数名称的值,这样能避免sql注入的问题,拼接字符串会出现sql注入的问题。hql提供了两种参数查询的方法,一种是通过使用符号“?”,然后使用setParameter方法设置替换的字符串;另外一种是使用参数名称,定义参数名称,并使用setParameter方法来替换指定参数名称的字串。


 1.1 参数符号--?


        通过使用符号?来设置要添加的参数内容,也就是说这里的符号?其实是hql的参数。如果想要为参数赋值,可以使用hql的方法setParameter,该方法重载参数,提供两个参数,一个能够传递参数出现的位置,另一个为参数赋值。具体如下代码:

@SuppressWarnings({ "unchecked", "rawtypes" })
public void testQuery(){
	Session session=null;
	
	try{
		session=HibernateUtils.getSession();
		session.beginTransaction();
		
		//方法链编程
		List students=session.createQuery("select s from Student s where s.name like ?").setParameter(0, "%0%").list();
		for(Iterator iter=students.iterator();iter.hasNext();){
			Student student=(Student)iter.next();
			System.out.println(student.getName());
		}
		
		session.getTransaction().commit();
	}catch(Exception e){
		e.printStackTrace();
		session.getTransaction().rollback();
	}finally{
		HibernateUtils.closeSession(session);
	}
}

       在需要使用参数的字串位置处使用?来代替,然后使用setParameter 方法,替换参数的内容。该方法中的第一个参数可以是字符串也可以是索引,如果使用了?作为参数,就必须指定?的第几个索引。


  1.2 参数名称


       上文已经讨论了符号参数的使用方法,并稍微简介了参数名称查询的方法,也就是说可通过使用参数名称的方法来定义参数,这种方法需要指定参数的名称,然后使用setParameter来设置名称替换参数,hql的参数定义是冒号+参数名。

@SuppressWarnings({ "unchecked", "rawtypes" })
public void testQuery(){
	Session session=nu
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值