怎樣用hibernate的hql查詢查詢成map或list



這裏製作一個引子,具體內容比較多,而且hibernate文檔裏的hql篇寫的很詳細
可以這麼用:
List list = getHibernateTemplate().find("select new map(t1.c1,t2.c3) from table1 t1 ,table2 t2 where t1.c1=t2.c2");
這樣的話list裏的每個元素都是一個map,每個map裏包含兩個元素
注意:這裏的table1和table2都是class名並不是真的表名,畢竟這是hql。除了可以用map還還支持list和自定義的bean。

//HQL-Associations
String hql = "select s.name, p.name, p.price from Product p inner join p.supplier as s";
Query query = session.createQuery(hql);
List results = query.list();


//HQL-Delete
String hql = "delete from Product where name = :name";
Query query = session.createQuery(hql);
query.setString("name","Product 1");
int rowCount = query.executeUpdate();


//HQL-Function
String hql = "select min(product.price), max(product.price) from Product product";
Query query = session.createQuery(hql);
List results = query.list();


//HQL-Fetch Associations HQL Inner Join
String hql = "from Supplier s inner join fetch s.products as p";
Query query = session.createQuery(hql);
List results = query.list();


//HQL-Named Parameters
String hql = "from Product where price > :price";
Query query = session.createQuery(hql);
query.setDouble("price",2.0);
List results = query.list();
String hql = "from Product as product where product.supplier=:supplier";
Query query = session.createQuery(hql);
query.setEntity("supplier",supplier);
List results = query.list();


//HQL-Update
String hql = "update Supplier set name = :newName where name = :name";
Query query = session.createQuery(hql);
query.setString("name","Supplier Name 1");
query.setString("newName","s1");
int rowCount = query.executeUpdate();


//HQL-where
String hql = "from Product where price > 2.0 and name like 'P%'";
Query query = session.createQuery(hql);
List results = query.list();

//HQL-Map
String hql = " select new map(usr.name as userName, usr.password as password) from User usr";
Query query = session.createQuery(hql);
List list = query.list();
Map goods =(Map)list.get(0);

【注】
   String hql = " select new map(usr.name as userName, usr.password as password) from com.jason.User usr";
   String hql = " select new map(usr.name as userName, usr.password as password) from com.jason.User usr";
由於from之前的空格,引起unexpected token:  from



//select new

給一個構建函數:
public class Department(Department d, Integer employeeSize)

然後寫成這樣:
SELECT new Department(department, count(employee.id)) FROM .....


Java代碼  收藏代碼
  1. //查詢其中幾個字段,添加new map(),注意map裏的m是小寫的。也不需要導入包,這樣通過query.list()出來的list裏存放的不再是默認的Object數組了,而是map集合了  

  2. 120. String hql = " select new map(name,passwd) from Users";    

  3. 121. Query query = session.createQuery(hql);    

  4. 122. //默認查詢出來的list裏存放的是一個Object數組,但是在這裏list裏存放的不再是默認的Object數組了,而是Map集合了  

  5. 123. List<Map> list = query.list();    

  6. 124. for(Map user : list){    

  7. 125. //一條記錄裏所有的字段值都是map裏的一個元素,key是字符串0,1,2,3....,value是字段值  

  8. 126. //如果將hql改爲:String hql = " select new map(name as username,passwd as password) from Users";,那麼key將不是字符串0,1,2...了,而是"username","password"了  

  9. 127. String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形  

  10. 128. String passwd = (String)user.get("1");    

  11. 129.    

  12. 130. System.out.println(name + " : " + passwd);    

  13. 131. }    

  14. 132. /**  

  15. 133. 輸出結果爲:  

  16. 134. name1 : password1  

  17. 135. name2 : password2  

  18. 136. name3 : password3  

  19. 137. */

  20. 138.//查詢其中幾個字段,添加new map(),注意map裏的m是小寫的。也不需要導入包,這樣通過query.list()出來的list裏存放的不再是默認的Object數組了,而是map集合了  

  21. 139. String hql = " select new map(name,passwd) from Users";    

  22. 140. Query query = session.createQuery(hql);    

  23. 141. //默認查詢出來的list裏存放的是一個Object數組,但是在這裏list裏存放的不再是默認的Object數組了,而是Map集合了  

  24. 142. List<Map> list = query.list();    

  25. 143. for(Map user : list){    

  26. 144. //一條記錄裏所有的字段值都是map裏的一個元素,key是字符串0,1,2,3....,value是字段值  

  27. 145. //如果將hql改爲:String hql = " select new map(name as username,passwd as password) from Users";,那麼key將不是字符串0,1,2...了,而是"username","password"了  

  28. 146. String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形  

  29. 147. String passwd = (String)user.get("1");    

  30. 148.    

  31. 149. System.out.println(name + " : " + passwd);    

  32. 150. }    

  33. 151. /**  

  34. 152. 輸出結果爲:  

  35. 153. name1 : password1  

  36. 154. name2 : password2  

  37. 155. name3 : password3  

  38. 156. */



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章