介绍下关于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
for(Map
{
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,然后将结果进行处理
Listlist = hibernateTemplate.find(hql);
for (List
{
String id = item.get(0).toString();
String remark = item.get(1).toString();
int number = (int)item.get(2);
int price = (int)item.get(3);
//自行处理取出的数据
}