NutzCN Logo
问答 自定义sql分页问题
发布于 2103天前 作者 wx_nvu0j53rdpc0ebqbi0kc 2113 次浏览 复制 上一个帖子 下一个帖子
标签:

数据条数应该是14条,加上分页之后变成10条。

 Cnd cnd = Cnd.NEW();
        cnd.where().setTop(false); // 这样就没有where了
        and(cnd,"a.BSHX0042","=",yearString);
        and(cnd,"a.ALLOT_ID","=",allotId);
        and(cnd,"b.PARENT_CODE","=",region);
        Sql sql = Sqls.create("select a.* from DFJG_PROJECT a,dc_region b where a.BSHA0008 = b.id and $cnd");
        sql.setCallback(Sqls.callback.entities());
        sql.setEntity(dao.getEntity(DfjgProjectDO.class));
        sql.setPager(pager);
        sql.setVar("cnd",cnd);
        dao.execute(sql);
16 回复

setPager去掉条数是对的,可是无法下一页。加上之后只有10条数据。

得到的分页sql跟你的预期一样吗?

@wendal
sql应该是对的,到的数据是我想要的。 就是当设置列表每页显示10条的时候,数据就只有10条,没有分页

没查总数并设置到pager?

@wendal
下面是方法入口,怎么让它自动分页?自动分页失败的话,应该set哪些?
public QueryResult listProject(String year,String allotId,Pager pager,String regionNo)

  Cnd cnd = Cnd.NEW();
        cnd.where().setTop(false); // 这样就没有where了
        and(cnd,"a.BSHX0042","=",yearString);
        and(cnd,"a.ALLOT_ID","=",allotId);
        and(cnd,"b.PARENT_CODE","=",region);
        Sql sql = Sqls.create("select a.* from DFJG_PROJECT a,dc_region b where a.BSHA0008 = b.id and $cnd");
        sql.setPager(pager);
        sql.setCallback(Sqls.callback.entities());
        sql.setEntity(dao.getEntity(DfjgProjectDO.class));
        sql.setVar("cnd",cnd);
        dao.execute(sql);
        List<DfjgProjectDO> list = sql.getList(DfjgProjectDO.class);
 QueryResult qr = new QueryResult();
        qr.setList(listVO);
        pager.setRecordCount(list.size());
        qr.setPager(pager);
        return qr;
pager.setRecordCount(list.size());

要Daos.queryCount

count一下才知道总数多少

@wendal 用了 还是原来的那样

 Long count = Daos.queryCount(dao,sql);
  pager.setRecordCount(count.intValue());

完整的

 public QueryResult listProject(String year,String allotId,Pager pager,String regionNo){
        String yearString=null;
        if(isNotBlank(year)){
            year = year.replace("\"", "");
        }
        if(isNotBlank(year)){
        yearString = year.substring(0, 4);
        }
        String region = "";//需要获取登录用户所属区,待接口
        if(!BizCodeTypeConstants.SHANGHAI.equals(regionNo)){
           // Region dicRegion = RegionUtils.getInstance().getCacheRegionBycode(BizCodeTypeConstants.ISSTANDARD,regionNo);//拿到的是用户区划code,数据库业务表存的id,转一下
            region = regionNo;
        }
        Cnd cnd = Cnd.NEW();
        cnd.where().setTop(false); 
        and(cnd,"a.BSHX0042","=",yearString);
        and(cnd,"a.ALLOT_ID","=",allotId);
        and(cnd,"b.PARENT_CODE","=",region);
        Sql sql = Sqls.create("select a.* from DFJG_PROJECT a,dc_region b where a.BSHA0008 = b.id and $cnd");
        sql.setPager(pager);
        sql.setCallback(Sqls.callback.entities());
        sql.setEntity(dao.getEntity(DfjgProjectDO.class));
        sql.setVar("cnd",cnd);
        dao.execute(sql);
        Long count = Daos.queryCount(dao,sql);

        List<DfjgProjectDO> list = sql.getList(DfjgProjectDO.class);
        List<DfjgProjectVO> listVO = new ArrayList<DfjgProjectVO>();
        if (list != null) {
            for (int i=0;i<list.size();i++){
                DfjgProjectDO dfjgProjectDO = list.get(i);
                DfjgProjectVO vo = new DfjgProjectVO();
                vo.setId(dfjgProjectDO.getId());//项目ID
                vo.setYear(dfjgProjectDO.getYear());
                vo.setPlanName(dfjgProjectDO.getPlanName());//项目名称
                DfjgQuotaAllotDO dfjgQuotaAllotDO = getIssuedDefine(dfjgProjectDO.getAllotId());
                vo.setQuotaName(dfjgQuotaAllotDO.getQuotaName());//指标名称
                vo.setAddress(dfjgProjectDO.getAddress());//地址
                if(dfjgProjectDO.getCivilMan() != null){
                    vo.setLinkMan(dfjgProjectDO.getCivilMan());//如果是医疗机构指标 set区联系人
                    vo.setContactNum(dfjgProjectDO.getCivilPhone());
                }else{
                    vo.setLinkMan(dfjgProjectDO.getLinkMan());//联系人
                    vo.setContactNum(dfjgProjectDO.getContactNum());
                }
                String progress = sumProjectProgress(dfjgProjectDO.getId(),dfjgProjectDO.getAllotId());
                vo.setEndPlan(progress);
                if(region == ""){
                    Region regionById = RegionUtils.getInstance().getCacheRegionById(BizCodeTypeConstants.ISSTANDARD,dfjgProjectDO.getRegion());
                    Region area = RegionUtils.getInstance().getCacheRegionBycode(BizCodeTypeConstants.ISSTANDARD,regionById.getParentCode());
                    vo.setAreaName(area.getName());
                }
                listVO.add(vo);
            }
        }
        QueryResult qr = new QueryResult();
        qr.setList(listVO);
        pager.setRecordCount(count.intValue());
        qr.setPager(pager);
        return qr;
    }
Daos.queryCount(dao,sql)

运行是打印的sql对吗?

哦,等等, 应该先执行queryCount,再dao.exec

设置分页之前查询总数,然后设置分页,查询具体的页

。。。。顺序的问题

添加回复
请先登陆
回到顶部