Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用jOOQ'实现按字段值排序;s动态查询_Java_Mysql_Jooq - Fatal编程技术网

Java 如何使用jOOQ'实现按字段值排序;s动态查询

Java 如何使用jOOQ'实现按字段值排序;s动态查询,java,mysql,jooq,Java,Mysql,Jooq,我试图在jOOQ中转换如下内容: select foo from bar order by field(foo, 'value1', 'something-else', 'value3') 在select查询上,例如: SelectQuery<Record> query = ... query.addSelect(BAR.FOO); query.addFrom(BAR); query.addOrderBy( ... ? ... ) SelectQuery=。。。 query.ad

我试图在jOOQ中转换如下内容:

select foo from bar
order by field(foo, 'value1', 'something-else', 'value3')
在select查询上,例如:

SelectQuery<Record> query = ...
query.addSelect(BAR.FOO);
query.addFrom(BAR);
query.addOrderBy( ... ? ... )
SelectQuery=。。。
query.addSelect(BAR.FOO);
query.addFrom(BAR);
query.addOrderBy(…?…)
如何添加最后一位


背景


我试图完成的基本描述如下:。在我的例子中,我有一个通用的批处理加载函数,它使用“where field In(..”,我想保持顺序。这与我使用普通SQL所需要的一样有效,但我需要使用jOOQ将这一点添加到动态构造的查询中。

这似乎可以做到这一点。不确定是否有更好的答案

Field[] args = new Field[]{DSL.field("foo"), 
      DSL.val("value1"), DSL.val("something-else"), DSL.val("value3")}
query.addOrderBy(DSL.function("field", SQLDataType.INTEGER, args));

每当你达到jOOQ的极限时,求助于。您可以这样编写自己的字段函数:

class MyDSL {

    public static Field<Integer> field(Field<String> search, String in1) {
        return field(search, DSL.val(in1));
    }

    public static Field<Integer> field(Field<String> search, Field<String> in1) {
        return DSL.field("field({0}, {1})", Integer.class, search, in1);
    }

    public static Field<Integer> field(Field<String> search, 
                                       String in1, 
                                       String in2) {
        return field(search, val(in1), val(in2));
    }

    public static Field<Integer> field(Field<String> search, 
                                       Field<String> in1, 
                                       Field<String> in2) {
        return DSL.field("field({0}, {1}, {2})", Integer.class, search, in1, in2);
    }

    // ... or, support a varargs function variant, too
}

您可以使用类似的方法将以下sql转换为jooq。这里“sortAsc”用于根据给定的值顺序进行排序

SQL

select foo from bar order by field(foo, 'value1', 'something-else', 'value3')
JOOQ

DSL()
.select(BAR.FOO)
.from(BAR)
.orderBy(BAR.FOO.sortAsc('value11', 'something-else', 'value3'))
.fetch()

是的,
DSL.function
与使用
DSL.field()
DSL()
.select(BAR.FOO)
.from(BAR)
.orderBy(BAR.FOO.sortAsc('value11', 'something-else', 'value3'))
.fetch()