HQL语句的3个小技巧详解编程语言

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"; 
1

 

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名
new map(属性 as 集合键名 , 属性 as 集合键名) 
1

 

1

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()); 		} 		
16

 

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

        

8

        

9

        //希望返回的结果是:一个JavaBean对象(这个JavaBean没有被hibernate映射过)

10

        //如果需要封装数据的JavaBean的写法使用完整版(包名+类简称),就不需要在hibernate映射

11

        Query query = session.createQuery("select new gz.zxy.entity.ProductsVO(name,price) from Products");

12

        List<ProductsVO> list = query.list();

13

        for (ProductsVO products : list) {

14

            System.out.println(products.getName()+"="+products.getPrice());

15

        }

16

        

3.巧用 concat 将个字段数据拼接

        在数据查询时,我们希望查询出几个字断的拼接后的结果。如:有省、市,区3个字段,我们希望查询出的结果是:xx省xx市xx区。
        使用concat就可以解决这个问题。
        代码:
/* concat将字段的值拼接起来,这样查询后name对应的值:xx省xx市xx区 */ 
hql= "select concat(province,city,district) as name from Region ";
 

1

/* concat将字段的值拼接起来,这样查询后name对应的值:xx省xx市xx区 */

2

hql= "select concat(province,city,district) as name from Region ";

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15514.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论