1. 程式人生 > >HQL語句的3個小技巧

HQL語句的3個小技巧

ret region enum hibernate 完整版 from 屬性 lan 速度

1.巧用new map

在查詢表中部分字段的值時,我們可以用map來封裝這些字段的值,可以提高查詢效率,而且查出數據也更小,傳輸到頁面的速度也更快。
如:查詢角色時,我們只想要 id,name,和remark 這3個屬性的值,我們可以用new map的方式。 查詢結果是: List<Map> ,其中map的key是as後面的字符串,map的value 是as前面的屬性的值Hql如下:
  1. String hql = "select new map(r.id as id,r.name as name ,r.remark as remark) from Role r"
    ;

註意:new map的括號裏面是 : 列屬性名 as 集合的key名
  1. new map屬性 as 集合鍵名 , 屬性 as 集合鍵名)



2.巧用 new javaBean

在查詢表中部分字段時,也可以用javaBean來封裝的部分字段的值。
註意點:如果這個javaBean沒有被hibernate映射過,則new 後面寫全包名+類簡稱
  1. //希望返回的結果是:一個JavaBean對象(這個JavaBean有被hibernate映射過)
  2. /*Query query = session.createQuery("select new Products(name,price) from Products");
  3. List<Products> list = query.list();
  4. for (Products products : list) {
  5. System.out.println(products.getName()+"="+products.getPrice());
  6. }*/
  7. //希望返回的結果是:一個JavaBean對象(這個JavaBean沒有被hibernate映射過)
  8. //如果需要封裝數據的JavaBean的寫法使用完整版(包名+類簡稱),就不需要在hibernate映射
  9. Query query = session.createQuery("select new gz.zxy.entity.ProductsVO(name,price) from Products"
    );
  10. List<ProductsVO> list = query.list();
  11. for (ProductsVO products : list) {
  12. System.out.println(products.getName()+"="+products.getPrice());
  13. }


3.巧用 concat 將個字段數據拼接

在數據查詢時,我們希望查詢出幾個字斷的拼接後的結果。如:有省、市,區3個字段,我們希望查詢出的結果是:xx省xx市xx區。
使用concat就可以解決這個問題。
代碼:
  1. /* concat將字段的值拼接起來,這樣查詢後name對應的值:xx省xx市xx區 */
  2. hql= "select concat(province,city,district) as name from Region ";


HQL語句的3個小技巧