【问题标题】:How do I set params max and offset in the List in Grails如何在 Grails 的列表中设置参数最大值和偏移量
【发布时间】:2018-02-26 22:14:24
【问题描述】:

我被困在从域中获取列表并将其保存到另一个列表中。我如何将参数传递给新创建的列表

代码如下所示:

 params.max = Math.min(max ?: 10, 100)
        params.offset = params.offset as Integer ?: 0



        Calendar date = Calendar.getInstance();
        date.set(Calendar.DAY_OF_MONTH, 1);
        Calendar date2 = Calendar.getInstance();
        date2.set(Calendar.DAY_OF_MONTH, date.getActualMaximum(Calendar.DAY_OF_MONTH));

        def MonthStartDate =date.getTime()
        def MonthEndDate =date2.getTime()
        int monthMaxDays = MonthEndDate - MonthStartDate + 1


        Calendar cal0 = Calendar.getInstance();
        cal0.set(Calendar.DAY_OF_MONTH,1);
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH,1);
     def myNewList  = new ArrayList<DomainABCTYPE>()
            def perDayDates = new ArrayList<Date>()




            for(int i=0;i<monthMaxDays;i++) {
                Date date1 = cal0.getTime();
                cal.add(Calendar.DATE, 1);
                Date calDate = cal.getTime();


              def myListPerDay = DomainABCTYPE.findAllByStartDateLessThanAndEndDateGreaterThanEquals(calDate, date1, params)



                int k=0
                for(;k < myListPerDay .size(); k++){
                    myNewList.add(myListPerDay .get(k))
                    perDayDates.add(date1)
                    }


                cal0.add(Calendar.DATE, 1)


            }


            render(view: "index", model:[ListInstance:myNewList ,ListCount:myNewList.size(), DatesList:perDayDates, MonthStartDate: MonthStartDate, MonthEndDate: MonthEndDate])

        }

【问题讨论】:

    标签: grails grails-orm gsp


    【解决方案1】:

    Have a look here 了解如何将分页参数直接传递到 GORM 查找方法中。

    老实说,我只是简单地查看了您的代码,这看起来很疯狂,您正在计算日期差异,然后迭代日期差异以查找记录。

    为什么不写一个HQL query 并使用between

    where a.date BETWEEN :date1 AND :date2
    

    简而言之,所有这些都可以通过 1 次查找来完成,并且不需要嵌套迭代查找

    【讨论】:

    • 我需要检查一个月中每一天的数据...如何编写 gorm 来检查日期范围,例如从 1 日到 30 日,哪个日期位于两列 startdate 的范围内和 enddate.. 即我在这里使用 for 循环
    • 一切都取决于您每天收集的内容、发生次数、给定日期的实际记录,无论哪种方式,还有其他可以做的事情,可以通过这样做来减少上述数据库需求有一次然后用它构建自己的地图,或者更清楚地思考正在实现的目标以及 HQL 查询甚至原始 sql 是否足以在一个查询中满足
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2023-03-04
    • 2017-11-14
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多