标签: jooq

PostgreSQL 函数 + jOOQ 中的强制转换

这个说法用jOOQ怎么表达呢?

SELECT version FROM abc ORDER BY string_to_array(version, '.', '')::int[] desc limit 1

我正在为功能和演员组合而苦苦挣扎。

postgresql jooq

2
推荐指数
1
解决办法
1616
查看次数

jOOQ 插入 .. Postgres 不存在的地方

我正在尝试在 jOOQ 中为 Postgres 执行 upsert 风格的语句。我运行的框架负责处理这种特定情况下的并发问题,因此我并不担心这一点。我仅使用 jOOQ 来创建 SQL,实际执行是通过 Spring 的 JdbcTemplate 和 BeanPropertySqlParameterSource 完成的。

我决定采用两步“插入..不存在的地方”/“更新..”过程。

我的SQL是:

insert into mytable (my_id, col1, col2) select :myId, 
   :firstCol, :secondCol where not exists (select 1 
   from mytable where my_id = :myId)
Run Code Online (Sandbox Code Playgroud)

我正在使用 Postgres 9.4、jOOQ 3.5。我不知道如何表达 select 中的 jOOQ 参数和 jOOQ 中的“where not办法”子句。

更改编程语言或数据库的建议在我的情况下不可行。

postgresql jooq

2
推荐指数
1
解决办法
4106
查看次数

从 JOOQ 中的代码生成中排除特定模式

我目前正在尝试使用 JOOQ 基于我现有的 Postgres DB 生成类。在我的 JOOQ .xml 配置中,我省略了任何 inputSchema 标记,以便 JOOQ 生成它找到的所有模式:

     <schemata>
      <schema>
      </schema>
     </schemata>   
Run Code Online (Sandbox Code Playgroud)

但是,我想从生成的内容中排除信息模式。有没有办法以黑名单方式做到这一点?或者我是否必须为除信息架构之外的所有架构添加输入架构?

java orm code-generation jooq

2
推荐指数
1
解决办法
674
查看次数

jOOQ如何使用可选排序

我有一个从表中选择人员的查询。

SelectConditionStep<PersonRecord> select = context
    .selectFrom(Tables.PERSON)
    .where(Tables.PERSON.ISDELETED.eq(false));

if(searchValue != null && searchValue.length() > 0){
    select.and(Tables.PERSON.LASTNAME.likeIgnoreCase(String.format("%%%s%%", searchValue)));
}
List<PersonRecord> dbPersons = select
    .orderBy(Tables.PERSON.LASTNAME, Tables.PERSON.FIRSTNAME, Tables.PERSON.ID)
    .limit(length).offset(start)
    .fetch();
Run Code Online (Sandbox Code Playgroud)

这段代码工作得很好。因为我在数据表中显示数据,所以我需要具有可选/动态排序功能。到目前为止我没有找到解决方案。

java sql jooq

2
推荐指数
1
解决办法
411
查看次数

jOOQ 中的字符串 LIKE 列

我一直在寻找一种在 jOOQ 中实现以下查询的方法,但找不到任何东西。

SELECT *
FROM   tableName
WHERE  'this is a string' LIKE CONCAT('%', word ,'%')
Run Code Online (Sandbox Code Playgroud)

提前致谢。

jooq

2
推荐指数
1
解决办法
792
查看次数

jOOQ .fetchMap() 与转换器

我正在尝试使用 jOOQ 执行 .fetchMap(key, value) 但我想通过自定义转换器处理密钥。

文档非常清楚如何使用转换器以及如何使用 .fetchMap() 但我在任何地方都找不到将两者结合起来的方法。

我的 jOOQ 版本 (3.9) 是否缺少此功能?

java dictionary converters jooq

2
推荐指数
1
解决办法
2478
查看次数

使用 jOOQ 的任意运算符

我无法理解以下内容。我有一个字段和一些值:

Field<T> field = ...;
List<T> values = ...;
Run Code Online (Sandbox Code Playgroud)

现在,我想field = ANY({... the values ....})WHERE子句中表达过滤器。PostgreSQL 支持该ANY(array of values)运算符。我从https://blog.jooq.org/2017/03/30/sql-in-predicate-with-in-list-or-with-array-which-is-faster/得到这个想法。

我尝试了以下方法来创造条件:

field.equal(PostgresDSL.any(PostgresDSL.array(values)));
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用。这编译:

field.equal((QuantifiedSelect) PostgresDSL.any(PostgresDSL.array(values)));
Run Code Online (Sandbox Code Playgroud)

第一个问题:为什么需要额外的演员阵容?API 是否应该更改?我不确定泛型错误实际上是在哪一边(我的还是 jOOQ 的)。

但是,进行此更改后,查询本身无法正常工作。它给出了错误:

org.jooq.exception.SQLDialectNotSupportedException: Type class java.util.ArrayList is not supported in dialect DEFAULT
Run Code Online (Sandbox Code Playgroud)

第二个问题:如何声明/创建值数组?上面的调用PostgresDSL.array(...)回落到DSL.array(...),这可能是第二个问题的根源?

java postgresql jooq

2
推荐指数
1
解决办法
3092
查看次数

具有不同模式的多个数据库的 jOOQ 代码生成

对于我的项目,我想使用 jOOQ,但我有 3 个数据库。其中两个是相似的(登台,生产),第三个是应用程序的数据库,具有完全不同的模式。所有数据库版本都相同,MySQl 5.6。不同之处在于所使用的表之间,在一个数据库中我得到了公司的翻译,而在另一个数据库中得到了一些客户等。纯 SQL 是非常不可读的,因为查询非常复杂。我知道这没有意义,但这就是我得到的。

有没有可能的方法为具有不同模式的不同数据库生成代码?

我使用 Maven 来生成代码。

java maven jooq

2
推荐指数
1
解决办法
1982
查看次数

Mockito:如何模拟方法,其结果取决于其参数之一?

有没有办法将参数传递给模拟函数并在内部使用该参数值。示例(注意 name 作为 param):

Mockito.when(clientRepo.registerNewClient(Mockito.any(String.class) as name ))
    .then返回(
        dsl上下文
            .insertInto(客户端)
            .set(CLIENT.CLIENT_NAME,名称)
            。执行());

有没有办法做到这一点?

java spring mockito jooq

2
推荐指数
1
解决办法
1220
查看次数

如何使用jooq批量更新

使用以下方式使用 jOOQ 进行更新。

for (Balance balance : balances) {
       dslContext.update(BALANCE)
                 .set(BALANCE.AMOUNT, balance.getAmount())
                 .where(BALANCE.ID.eq(balance.getId))
                 .execute();
}
Run Code Online (Sandbox Code Playgroud)

这将遍历所有余额并插入每个余额。我知道这可以使用 UpdatableRecord 来完成。但我想避免从数据库中获取余额。Balance 是包含超过 8 个字段的表,但我只对更新一个字段感兴趣。如果没有 UpdatableRecord,还有其他方法可以做到这一点吗?

java jooq

2
推荐指数
2
解决办法
2371
查看次数

标签 统计

jooq ×10

java ×7

postgresql ×3

code-generation ×1

converters ×1

dictionary ×1

maven ×1

mockito ×1

orm ×1

spring ×1

sql ×1