我有使用带有分页的多个参数的创建条件。我要解决的问题是,是否有可能在内部重用代码,而对于其他创建标准则完全不同,而不必重复代码。我想说的是,如果我有case createcriteria并想对case2做相同的“过滤器”而不必重复代码,则不能将两个createCriteria统一起来每个实例,我面临的问题是需要具有分页功能,而其他功能则不需要,并且两者都需要访问不同的字段,因此唯一的选择是在我不丢失任何内容的情况下创建两个相同的创建条件。举个例子,案例与案例2的比例至少为90%,那么重用代码的最佳方式是什么?
def cases = PpCase.createCriteria().list{
and{
if(limit){
maxResults(limit)
}
firstResult(offset)
order("mostRecentPaymentDate", "desc")
order("totalAmount", "desc")
if(params.admin_id){
eq("adminId",params.admin_id)
}
if(params.status){
eq("status",params.status.toUpperCase() as PpCase.Status)
}
if(params.date_from){
ge('dateCreated', Date.parse("yyyy-MM-dd",params.date_from))
}
if(params.date_to){
le('dateCreated', Date.parse("yyyy-MM-dd",params.date_to))
}
if(params.date_closed_from){
ge('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_from))
}
if(params.date_closed_to){
le('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_to))
}
}
}
def cases2 = PpCase.createCriteria().list{
and{
firstResult(offset)
order("mostRecentPaymentDate", "desc")
order("totalAmount", "desc")
if(params.admin_id){
eq("adminId",params.admin_id)
}
if(params.status){
eq("status",params.status.toUpperCase() as PpCase.Status)
}
if(params.date_from){
ge('dateCreated', Date.parse("yyyy-MM-dd",params.date_from))
}
if(params.date_to){
le('dateCreated', Date.parse("yyyy-MM-dd",params.date_to))
}
if(params.date_closed_from){
ge('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_from))
}
if(params.date_closed_to){
le('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_to))
}
}
}
更真实的示例:在某些情况下,我需要一些字段,但是有一个限制,而在case2中,我需要不同的字段,在没有限制的情况下,我要复制90%的代码。
def cases = PpCase.createCriteria().list{
projections {
sum("field1")
countDistinct("id")
}
and{
if(limit){
maxResults(limit)
}
//HERE SHOULD BE THE CODE THAT I NEED TO REUTILIZE
}
def cases2 = PpCase.createCriteria().list{
projections {
sum("field2")
countDistinct("id")
}
and{
//HERE SHOULD BE THE CODE THAT I NEED TO REUTILIZE
}
我不确定当您说“统一两个createCriteria都不是一种选择”时的意思,尤其是考虑到在上面的代码中,您两次执行完全相同的查询,并最终得到包含相同行的两个列表。
重用条件的一种方法是将条件定义为单独的闭包,然后将其传递给createCriteria。
Closure fetchPayments = {
and{
if(limit){
maxResults(limit)
}
firstResult(offset)
order("mostRecentPaymentDate", "desc")
order("totalAmount", "desc")
if(params.admin_id){
eq("adminId",params.admin_id)
}
if(params.status){
eq("status",params.status.toUpperCase() as PpCase.Status)
}
if(params.date_from){
ge('dateCreated', Date.parse("yyyy-MM-dd",params.date_from))
}
if(params.date_to){
le('dateCreated', Date.parse("yyyy-MM-dd",params.date_to))
}
if(params.date_closed_from){
ge('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_from))
}
if(params.date_closed_to){
le('closedDate', Date.parse("yyyy-MM-dd",params.date_closed_to))
}
}
}
def cases = PpCase.createCriteria().list(fetchPayments)
def cases2 = PpCase.createCriteria().list(fetchPayments)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句