在做一个查询业务时,我需要写入查询语句,返回list
我要取出list中的object的两数据如:测试数据、外包客服内容
通过上网查找到hql的情况:
*在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:
1.查询全部字段的情况下,如”from 实体类”,list中封装的对象为实体类本身,各属性都将得到填充。
2.只查询一个字段,默认情况下,list中封装的是Object对象。
3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。
对于后两种情况,用标签遍历时不太方便,因为无法直接转换成实体类的对象。
比较简单的解决方法是:在hql中使用 select new 包名.类名(属性1,属性2……) from 实体类,
同时在实体类中添加带参的构造方法,参数的个数和顺序与(属性1,属性2……) 保持一致,
这样我们得到的list中存放的依然是实体类的对象,所查询到的属性得到了填充,使用起来更为方便。*
其实SQL语句的情况也差不多
***1.只查询一个字段,默认情况下,list中封装的是Object对象。
2.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。*
当第2种情况时,代码如下:
String sql = "select s.wo_company,wo_next_organ_name from crm_cus_workflow_task t,crm_cus_workflow w,crm_si_workorder s"
+ " where t.workflow_id = w.workflow_id and t.workflow_task_id ='"
+ workflowTaskId + "' and s.wo_workflow_id=w.workflow_id";
// 按工单任务id查询企业名称、营业机构的值
List list = queryBySql(sql);
String company = "";
String organ = "";
for (int i = 0; i < list.size(); i++) {
**Object[] object = (Object[]) list.get(i);**
if (object[0] != null) {
company = object[0].toString();
}
if (object[1] != null) {
organ = object[1].toString();
}
}