第十一章 Hibernate的查詢 Query Language(官方推薦使用)
主要是通過 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);
最後更新:2017-04-03 18:52:11