主要是通过 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);