如何将此SQL查询写入jOOQ?

时间:2016-06-15 10:53:08

标签: java sql jooq

SELECT 
    feature_name, 
    ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) 
      * cos( radians( long ) - radians(-122) ) + sin( radians(37) ) 
      * sin( radians( lat ) ) ) ) AS distance 
FROM 
    geo_features 
HAVING 
    distance < 25 
ORDER BY 
    distance

1 个答案:

答案 0 :(得分:1)

假设这个静态导入:

import static org.jooq.impl.DSL.*;

以下是如何编写查询:

GeoFeatures f = Tables.GEO_FEATURES;
Field<Double> distance =
    val(3959.0).mul(acos(cos(rad(37.0)))).mul(cos(rad(f.LAT)))
               .mul(rad(f.LONG).sub(rad(-122.0)).add(sin(rad(37.0)))
               .mul(sin(rad(f.LAT))).as("distance")

DSL.using(configuration)
   .select(
       f.FEATURE_NAME,
       distance
   )
   .from(f)
   .having(distance.lt(25.0))
   .orderBy(distance)

这些是要记住的关键事项:

  • 每个SQL函数都转换为org.jooq.impl.DSL
  • 中的函数
  • 通过&#34; infix&#34;可以访问算术运算。符号,但运算符必须写为方法名称,例如* = mul()+ = add() or plus()- = sub() or minus()
  • 算术操作左侧的数字必须由jOOQ API显式包装,使用val()(对于绑定变量)或inline()(用于内联)