hibernate(七)HQL(1)
阿新 • • 發佈:2018-12-19
HQL
HQL是Hibernate Query Language的縮寫
hql和sql區別/異同
hql | sql |
---|---|
類名/屬性 | 表名/列名 |
區分大小寫,關鍵字不區分大小寫 | 不區分大小寫 |
別名 | 別名 |
?(佔位符),從下標0開始計算位置(hibernate5之後不支援) | ?(佔位符),從順序1開始計算位置 |
:命名引數 | 不支援:命名引數 |
面向物件的查詢語言 | 面向結構查詢語言 |
處理返回的結果集
1、單個物件
/** * 結果處理情況 1: Book * 直接利用物件進行資料接收 */ @Test public void testList1() { String hql = "from Book"; Query query = session.createQuery(hql); List<Book> list = query.list(); for (Book book : list) { System.out.println(book); } }
2、String
/** * 結果處理情況 2:String * 查詢一列 * jdbc:查詢的是表裡面的某一列 不區分大小寫 * hpl:查的是實體類中的某一屬性 嚴格區分大小寫 */ @Test public void testList2() { String hql = " select bookname from Book "; // Query query = session.createQuery(hpl); // List<String> list = query.getResultList(); // System.out.println(list); List<String> list = session.createQuery(hql).list(); System.out.println(list); }
3、Object[]
/**
* 結果處理情況 3:Object[]
*/
@Test
public void testList3() {
String hql = "select bookid,bookname from Book ";
List<Object[]> list = session.createQuery(hql).list();
for (Object[] book : list) {
System.out.println(Arrays.toString(book));
}
}
4、Map
這裡的map是hibernate內建函式
/**
* 結果處理情況 4:利用hibernate內建函式進行結果處理
*/
@Test
public void testList4() {
String hql = "select new map(bookid,bookname) from Book ";
List<Map> list = session.createQuery(hql).list();
for (Map book : list) {
System.out.println(book);
}
}
5、構造方法
實體類提供構造方法,隨便加上無參的構造器
/**
* 結果處理情況 5:利用構造方法進行結果處理
* 1、當你給某一個類提供有參構造器,順便加上無參構造器
* 2、構造方法賦值的原理(完善MVC的crud)
*/
@Test
public void testList5() {
String hql = "select new Book(bookid,bookname) from Book ";
List<Book> list = session.createQuery(hql).list();
for (Book book : list) {
System.out.println(book);
}
}
hql中使用佔位符
/**
* hql中使用佔位符:
* jdbc:select * from Book where book_id = ?
* hpl:
*
*/
@Test
public void testList6() {
//一
// String hql = "from Book where bookid = :bookid ";
// Query query = session.createQuery(hql);
// query.setParameter("bookid", 2);
// Book book = (Book) query.getSingleResult();
// System.out.println(book);
//二
// String hql = "from Book where price > :min and price < :max ";
// Query query = session.createQuery(hql);
// query.setParameter("min", 10f);
// query.setParameter("max", 30f);
// List<Book> list = query.list();
// for (Book book : list) {
// System.out.println(book);
// }
//三
String hql = "from Book where bookid in (:bookids) ";
Query query = session.createQuery(hql);
// new Integer[] {2,3,4}
List<Integer> params = new ArrayList<>();
params.add(2);
params.add(3);
params.add(4);
query.setParameterList("bookids", params);
List<Book> list = query.list();
for (Book book : list) {
System.out.println(book);
}
}
聚合函式
/**
* 聚合函式
*/
@Test
public void testList8() {
String hql = "select count(*) from Book";
Object list = session.createQuery(hql).list();
System.out.println(list);
}
分頁
/**
* 分頁
*/
@Test
public void testList9() {
String hql = "from Book where bookname like :bookname ";
int rows = 3;// 每頁行數
int page = 1;// 頁碼
Query query = session.createQuery(hql);
query.setParameter("bookname", "%完美%");
query.setFirstResult((page-1)*rows);// 設定起始記錄下標
query.setMaxResults(rows);// 設定返回的最大結果集
List<Book> list = query.list();
for (Book book : list) {
System.out.println(book);
}
}