HQL語句的3個小技巧
阿新 • • 發佈:2017-08-19
ret region enum hibernate 完整版 from 屬性 lan 速度
如:查詢角色時,我們只想要 id,name,和remark 這3個屬性的值,我們可以用new map的方式。 查詢結果是: List<Map> ,其中map的key是as後面的字符串,map的value 是as前面的屬性的值Hql如下:
註意:new map的括號裏面是 : 列屬性名 as 集合的key名
註意點:如果這個javaBean沒有被hibernate映射過,則new 後面寫全包名+類簡稱。
使用concat就可以解決這個問題。
代碼:
1.巧用new map
在查詢表中部分字段的值時,我們可以用map來封裝這些字段的值,可以提高查詢效率,而且查出數據也更小,傳輸到頁面的速度也更快。如:查詢角色時,我們只想要 id,name,和remark 這3個屬性的值,我們可以用new map的方式。 查詢結果是: List<Map> ,其中map的key是as後面的字符串,map的value 是as前面的屬性的值Hql如下:
String hql = "select new map(r.id as id,r.name as name ,r.remark as remark) from Role r"
;
註意:new map的括號裏面是 : 列屬性名 as 集合的key名
new map(屬性 as 集合鍵名 , 屬性 as 集合鍵名)
2.巧用 new javaBean
在查詢表中部分字段時,也可以用javaBean來封裝的部分字段的值。註意點:如果這個javaBean沒有被hibernate映射過,則new 後面寫全包名+類簡稱。
//希望返回的結果是:一個JavaBean對象(這個JavaBean有被hibernate映射過)
/*Query query = session.createQuery("select new Products(name,price) from Products");
List<Products> list = query.list();
for (Products products : list) {
System.out.println(products.getName()+"="+products.getPrice());
}*/
//希望返回的結果是:一個JavaBean對象(這個JavaBean沒有被hibernate映射過)
//如果需要封裝數據的JavaBean的寫法使用完整版(包名+類簡稱),就不需要在hibernate映射
Query query = session.createQuery("select new gz.zxy.entity.ProductsVO(name,price) from Products"
);List<ProductsVO> list = query.list();
for (ProductsVO products : list) {
System.out.println(products.getName()+"="+products.getPrice());
}
3.巧用 concat 將個字段數據拼接
在數據查詢時,我們希望查詢出幾個字斷的拼接後的結果。如:有省、市,區3個字段,我們希望查詢出的結果是:xx省xx市xx區。使用concat就可以解決這個問題。
代碼:
/* concat將字段的值拼接起來,這樣查詢後name對應的值:xx省xx市xx區 */
hql= "select concat(province,city,district) as name from Region ";
HQL語句的3個小技巧