2013-11-14 58 views
1

我們只是切換到位標準DAO和直接的SQL的使用JOOQ,我想這個SQL轉換爲JOOQ方面:JOOQ MySQL的按位

產品在MySQL的定義爲INT(4)場5.6。

SELECT DISTINCT f1 
FROM table_A WHERE 
    (f1 IS NOT NULL) 
    AND (products & 255) 
    AND (age <= 180) 
    AND (flag < 1) 
ORDER BY f1; 

JOOQ版本:

context.selectDistinct(TABLE_A.F1).from(TABLE_A).where(TABLE_A.F1.isNotNull()) 
    .and(TABLE_A.flag.lessthan(UInteger.valueof(1)) 
    .and(TABLE_A.age.lessthan(UInteger.valueof(180)) 
.orderBy(TABLE_A.f1); 

我似乎無法弄清楚是怎麼做的(產品& 255)位運算。

回答

1

您可以在relevant section of the jOOQ manual中找到關於按位運算符/位功能的一些信息。

具體而言,使用DSL.bitAnd()

DSL.bitAnd(TABLE_A.PRODUCTS, 255); 

參見上jOOQ User Group相關的討論。

+0

爲什麼JOOQ的一些功能隱藏在DSL包內? – awm

+0

我不確定你的意思? 'DSL'是一個類,它包含各種函數,您可以在Java類中靜態導入這些函數。換句話說,它們根本不「隱藏」,它們很暴露:-)另見:http://www.jooq.org/doc/3.2/manual/sql-building/dsl。不過,如果按位操作在「中綴記法」中也得到支持,我認爲它可能會有用。我會看到這將在jOOQ 3.3中加入:https://github.com/jOOQ/jOOQ/issues/2848 –