叙:HQL是一个完全面向对象的数据库查询语言,提供有针对多种情况下的查询方式,之前已有一些已经学习并记录了,下面电虫就条件查询进行记录一下,后面的会继续学习;
Hibernate的HQL查询之条件查询
条件查询有两个点需要注意,一个是占位符类型,另一个是占位符的实际值填充;
代码:
@Test
/*
* 条件查询
*/
public void demo3() {
Session session = HibernateUtils.openSession();
Transaction bt = session.beginTransaction();
//String hql = "from Customer where cust_id=?";
String hql1 = "from Customer where cust_id=:id ";
Query cust = session.createQuery(hql1);
//cust.setParameter(0, 2l);
cust.setParameter("id", 2l);
List list = cust.list();
System.out.println(list);
bt.commit();
session.close();
}
分析:
上面有两行被注释掉了,分别是:查询语句和占位符的实际值填充这两句,那么就这两句进行学习;
查询语句hql:它是以“?”进行占位的,使用?进行占位是比较常见的一种,在学习Java基础的时候会接触到一些,但是在hibernate中还是与基础的有些差别的,差别点就在于在占位符的实际值填充时hibernate的是从0开始排序的,即第一个占位符的序号为0,而基础学习中第一个占位符的序号为1,不要搞混了;
查询语句hql1:它以“:id”这个代号进行占位的,注意,是冒号id,没错,id前边还有个冒号(不要问是中文冒号还是英文冒号,我是不会告诉你的,嘿嘿~),这个占位符就厉害了,在进行占位符的实际值填充时不需要写序号,直接写代号就好,但是这个写的代号又需要注意,不要加上冒号,这个冒号只要在查询语句中的“=”之后的代号前写就行了,不需要在实际值的填充中写出来;
总结:
查询语句书写及其对应的实际值填充方式:
问号占位符: String hql = “from Customer where cust_id=?”;
其实际值填充:cust.setParameter(0, 2l);
注意:第一个占位符的序号为0(2l是要查询的cust_id值,因为我的数据库表中这个列的属性是Long这个包装类型的,所以要在数字后边加小写的L);代号占位:String hql1 = “from Customer where cust_id=:id “;
其实际值填充:cust.setParameter(“id”,2l);
注意:将查询语句中的代号放到序号位,不要忘记加引号,不要加冒号。
pass:这两种查询语句必须对应自己的实际值填充方式,在代码开发中实际用哪个没有太大区别;