查询结果用Object类或其数组的List接收

当查询结果只需部分字段时,使用Object数组而非完整实体类能提升效率。例如,避免`select *`并用Object[]接收,通过遍历和下标获取所需字段值。文章中还提及了SQL中的COALESCE函数,用于返回非空表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询结果用Object数组接收并返回前端获取和展示,很多时候是封装的方法直接用实体类接收和返回,当所查询出的值包含不只一个实体类的属性值时,返回某个实体类不满足要求,或者不需要此实体类属性太多,返回整个实体类效率太低,这时用Object[]接收最莱斯:

          String codename = receiveData.getParam("codename".toUpperCase());
                String sql = "select itemvalue,itemtext from code_items where codeid = (select codeid from code_main where codename = '";
                sql += codename;
                sql += "') order by itemvalue";
                List<Object[]> objlist = service.getResultListNative(sql);
                List<JSONObject> list = new ArrayList<JSONObject>();
                if (objlist != null && objlist.size() > 0) {
                    for (Object[] obj : objlist) {
                        JSONObject jsonObject = new JSONObject();
                        jsonObject.accumulate("ItemValue", obj[0]);
                        jsonObject.accumulate("ItemText", obj[1]);
                        list.add(new JSONObject().accumulate("codeiteminfo", jsonObject));
                    }
                    returndata.putUserData("ItemList", JsonUtil.listToJson(list));
                }

其中只需要两个字段的值,返回整个实体效率太低,并且select * 的查询语句尽量要避免;

 e.g.2:

       StringBuffer sql = new StringBuffer();    
            sql.append("SELECT COALESCE(queue.QueueLen, 0) QueueLen, COALESCE(window.WinCOunt, 0) WinCount ");
            sql.append(" FROM (SELECT TASKTYPEGUID FROM Audit_Queue_Window_TaskType where WINDOWGUID='" + windowGuid
                    + "') win");
            sql.append(" LEFT JOIN");
            sql.append(" (SELECT TASKGUID, COUNT(1) QueueLen FROM AUDIT_QUEUE  WHERE STATUS = '0' and "
                    + this.getCommonDateSQL());
            sql.append(" GROUP BY TASKGUID ) queue ON win.TASKTYPEGUID = queue.TASKGUID");
            sql.append(" LEFT JOIN");
            sql.append(" (SELECT TASKTYPEGUID, COUNT(1) WinCOunt FROM AUDIT_WINDOW_USER u INNER JOIN Audit_Queue_Window_TaskType t ON u.WINDOWGUID = t.WINDOWGUID");
            sql.append(" WHERE u.IS_ONUSER = 1 GROUP BY t.TASKTYPEGUID ) window ON window.TASKTYPEGUID = win.TASKTYPEGUID and QueueLen<>0");

        // 语句查询字段多的不谈了,必须用Object类接收   

         List<Object> list = this.getResultListNative(sql.toString());

              Integer len = 0;

        // 遍历Object对象,不是Object[]数组接收,要先转换成Object[]数组,方便通过下标获取查询的字段值

        for (Object object : list) {
          Object[] arr = (Object[]) object;
          len += (Integer)arr[0];
        }

 
 

其中COALESCE是一个函数,作用是返回表达式中第一个非空表达式,如SELECT COALESCE(NULL,NULL,3,4,5) FROM dual,其返回结果为:3;

转载于:https://www.cnblogs.com/wmqiang/p/10524283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值