主要是通过 org.hibernate.Query接口的实例来使用HQL语句进行查询。
1、简单的查询(from+实体类名称)
Query query = session.createQuery("from User"); List<User> list = query.list(); for(User user : list){ System.out.println(user.getUsername()); }
2、条件查询
Query query = session.createQuery("from User as u where u.id > 210"); List<User> list = query.list(); for(User user : list){ System.out.println(user.getUsername()); }
这里只是简单的条件查询,更多可以通过查看 hql语法进行操作。
3、预处理的HQL
使用?号来占位:
Query query = session.createQuery("from User as u where u.id > ?"); //这里第一个参数代表的是占位符的位置,从0开始。第二个是指这个位置的值。而setXXX()方法是根据值的类型来决定的。setString()、setDouble()、setInteger()等。 query.setInteger(0, 210); List<User> list = query.list(); for(User user : list){ System.out.println(user.getUsername()); }
使用字符串(如:n)来占位:
Query query = session.createQuery("from User as u where u.id > :n"); //基本上和和使用?号占位方式一样。注意:这里占位符的前面还有一个:号。 query.setInteger("n", 210); List<User> list = query.list(); for(User user : list){ System.out.println(user.getUsername()); }
4、根据外键作为条件查询
Query query = session.createQuery("from IdCard as idCard where idCard.person.id =15"); List<IdCard> list = query.list(); for(IdCard idCard : list){ System.out.println(idCard.getCardNo()); }
5、分页(重点)
Query query = session.createQuery("from User"); query.setFirstResult(0); //从哪条记录开始 query.setMaxResults(5); //取多少条记录 List<User> list = query.list(); for(User user : list){ System.out.println(user.getUsername()); } //具体: Query query = session.createQuery(hql); Query q = session.createQuery("select count(*) from Person"); Long count = (Long) q.uniqueResult(); int pageSize = 5; //每一页的记录数 Long totalPages = count/pageSize; //一共有多少页 if(count%pageSize != 0){ totalPages += 1; } System.out.println(totalPages); int page = 3; //查询是的第几页 query.setFirstResult((page - 1)*pageSize); query.setMaxResults(pageSize); List<Person> list = query.list(); for(Person p : list){ System.out.println(p.getId()+"--"+p.getName()); }
6、uniqueResult
查询记录只有一条的时候使用。
Query query = session.createQuery("select count(*)from User"); Long count = (Long) query.uniqueResult(); System.out.println(count);