hql关联表、map/list查询

来源:互联网 发布:泽诺尼亚s下载最新数据 编辑:程序博客网 时间:2024/06/08 10:42

 

介绍下关于HQL中的关联表查询的用法吧,这个算是我自己摸索尝试出来的,也许不是最优化的,但还是可以和大家分享探讨下

 

之前由于对hql的了解不深,后来要使用关联表查询的时候,就特意查询了一些资料,其中http://www.cnblogs.com/gmh/archive/2008/03/22/1117910.html这篇文章让我受益匪浅,深受启发

 

这次主要是要使用关联表查询,项目中是使用的spring mvc+hibernate

 

关联表查询,顾名思义就是查询结果设计到多个表的信息,且彼此间有一定的关联

在spring mvc中使用hql关联表查询的方法:

拿当前我们系统当中的订单表举例说明,当前记录中大部分记录的是对象ID,现在我要一并查询订单信息以及订单中关联的买家信息,步骤如下:

1.      首先声明一个类如com.zhiyuan.base.model.OrderView

a)        私有变量有String id, String remark, int orderStatus, BuyerUser buyer等等,并进行getter&&setter方法绑定

b)        创建构造函数OrderView(String id, String remark, int orderStatus, BuyerUser buyer),然后在构造函数中进行私有变量的赋值

c)        注意:这个类不要打注解@Entity/@Table,因为这只是个临时的实体类,如果打注解后会在数据库中自动生成表的

d)        重点声明一点:在构造函数中可以传参基本类型的数据,也可以传参集合甚至自定义的对象类型


2.      创建对应的OrderView Dao,依照以往的方式声明dao以备接下来的service中调用


3.      准备hql

a)        准备hql主体:select new com.zhiyuan.base.model.OrderView(order.id, order.remark, order.orderStatus,buyer) from GoodsOrder order, BuyerUser buyer where order.buyerId = buyer.id

b)        当然where 后面可以继续补充检索条件等


4.      在Service中调用OrderViewDao执行查询hql的操作,这样就会将查询结果自动封装为OrderView对象了

 

在spring mvc中使用hql用(new map) 方法统计分组等信息:

1.      准备hql

a)        select new map(id, status,count(*) as number, sum(price) as price) from GoodsOrder

b)        在where条件中拼写检索条件排列顺序等


2.      执行hql,用hibernateTemplate执行此hql,然后将结果进行处理

List<Map<String,Object>> list = hibernateTemplate.find(hql);

for(Map<String, Object> item : allList)

                   {

                    String id = item.get("id").toString();

                    String remark = item.get(“remark”).toString();

                    int number =(int) item.get(“number”);

                    int price = (int)item.get(“price”);

                    //自行处理取出的数据

           }

 


在spring mvc中使用hql用(new List) 方法统计分组等信息:

1.准备hql

a)        select new List(id, status,count(*), sum(price)) from GoodsOrder

b)        在where条件中拼写检索条件排列顺序等

2.执行hql,用hibernateTemplate执行此hql,然后将结果进行处理

List<List<Object>list = hibernateTemplate.find(hql);

for (List<Object> item : allList)

                   {

                    String id = item.get(0).toString();

                    String remark = item.get(1).toString();

                    int number = (int)item.get(2);

                    int price = (int)item.get(3);

                    //自行处理取出的数据

                   }

0 0