HOw 将此 SQL 转换为 Grails Gorm 标准查询



我挂断了如何处理 IFNULL(( 在选择和 where 子句中

。我知道 HQL 提供了 COALESCE((,但我不确定如何进行 w.r.t. 标准。

sql.eachRow("""SELECT DISTINCT cl.name, b.title, b.type, cb.region, IFNULL(cb.start, c.start),IFNULL(cb.end, c.end)
FROM table.C_B cb
JOIN table.B b on b.id = cb.B_id
JOIN table.C c on c.id = cb.C_id
JOIN table.CL cl on cl.id = c.CL_id
WHERE cb.status='active' AND
DATEDIFF(IFNULL(cb.start, c.start),'""" + startmonth + """') <=0
AND DATEDIFF(IFNULL(cb.end, c.end),'""" + startmonth + """') >0 order by cl.name, b.title"""
) {row ->
str.append('<tr>')
(0..3).each {str.append('<td>' + row[it] + '</td>')}
(4..5).each {str.append('<td>' + String.format('%tY/%<tm/%<td', row[it]) + '</td>')}
str.append('</tr>')
}

sqlProjection 是前进的方向吗?

我的建议是不要。GORM适用于简单的查询和CRUD的,但是是允许的,有时有必要下降到直接SQL。HQL可以让你更接近,因为你可以创建自己的方言,从你正在使用的方言扩展,并添加你缺少的功能。

其中查询,条件查询,HQL,SQL都是您可以使用的工具。对于 CRUD 和简单查询,前者更易于编码和维护,但可能缺乏功能,或者在某些情况下性能不佳。对于后者,将更容易编写,并针对复杂的性能方案进行调整。因此,简而言之,您必须在何时使用正确的工具进行工作之间找到平衡。

相关内容

  • 没有找到相关文章

最新更新