第十一章 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