标签: jooq

如何通过 jOOQ 使用自定义 SGBD 类型

我想知道如何利用最新版本的 PostgresSQL 中可以找到的新范围类型。

我可以找到有关如何使用自定义 Java 类型管理普通列的jOOQ文档,但是我找不到如何在自定义 Java 类型中使用自定义类型列。jOOQ 中是否有文档或一段现有代码可供我查看并尝试贡献?

java sql postgresql jooq

5
推荐指数
1
解决办法
875
查看次数

jooq - Add code to the generated Record class

I learning how to work with jooq. I would like to know if I can add some domain-level methods in to the generated Record classes.

Suppose the record was this:

public class ConCalCompanyRecord extends org.jooq.impl.UpdatableRecordImpl<com.aesthete.csmart.connect.model.db.gen.tables.records.ConCalCompanyRecord> implements org.jooq.Record6<java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.sql.Timestamp, java.sql.Timestamp> {

// properties
// getters and setters

// I would like to add a method like this:
   public void isABlueCompany(){
     // work with the fields
   }

}
Run Code Online (Sandbox Code Playgroud)

But I know if I do this, as soon as I …

java jooq

5
推荐指数
1
解决办法
1930
查看次数

jOOQ 3.5.3 中的 case 表达式和别名

我在 jOOQ 中表达以下查询时遇到问题

SELECT s.season_name, l.league_name,
  COUNT(CASE WHEN m.full_time_result = 'H' THEN 'H' END) AS home_wins,
  COUNT(CASE WHEN m.full_time_result = 'D' THEN 'D' END) AS draws,
  COUNT(CASE WHEN m.full_time_result = 'A' THEN 'A' END) AS away_wins,
  COUNT(m.full_time_result) AS all_matches
  FROM football_stats.matches AS m
  JOIN football_stats.seasons AS s USING (season_id)
  JOIN football_stats.leagues AS l USING (league_id) GROUP BY s.season_name, l.league_name
Run Code Online (Sandbox Code Playgroud)

我的java代码是:

final Field<String> homeWins = DSL.decode().when(MATCHES.FULL_TIME_RESULT.eq(HOME_WIN), HOME_WIN).as("home_wins");
final Field<String> draws = DSL.decode().when(MATCHES.FULL_TIME_RESULT.eq(DRAW), DRAW).as("draws");
final Field<String> awayWins = DSL.decode().when(MATCHES.FULL_TIME_RESULT.eq(AWAY_WIN), AWAY_WIN).as("away_wins");
final Field<?>[] …
Run Code Online (Sandbox Code Playgroud)

java jooq

5
推荐指数
1
解决办法
1694
查看次数

从文件生成 JOOQ 架构

是否可以在没有数据库连接的情况下使用 JOOQ 从 sql 文件生成 Java 类?我尝试指定 inputSchema 标记,但出现异常:

WARNING: SQL exception            : Exception while executing meta query: Cannot execute query. No Connection configured
Run Code Online (Sandbox Code Playgroud)

我的配置如下:

<configuration>
                <generator>
                    <database>
                        <name>org.jooq.util.postgres.PostgresDatabase</name>
                        <inputSchema>filesystem:src/main/resources/schema.sql</inputSchema>
                        <includes>.*</includes>
                        <outputSchemaToDefault>true</outputSchemaToDefault>
                    </database>
                    <target>
                        <packageName>pckg.some</packageName>
                        <directory>target/generated-sources/jooq</directory>
                    </target>
                </generator>
</configuration>
Run Code Online (Sandbox Code Playgroud)

java jooq

5
推荐指数
1
解决办法
2372
查看次数

使用POJO仅更新JOOQ记录中已更改的字段

我想使用POJO作为源更新JOOQ记录中的已更改字段.Record.from(Object)几乎是正确的,但根据文件

生成的记录将为所有值将其内部"已更改"标志设置为true.

我只希望实际更改的字段(如说,确定Objects.equals(Object, Object))更新其标志.

这样做的两个原因是:

  • 我不想触发插入
  • 我只想在update语句中向数据库发送新值(带宽,并发更新等)

java database orm jooq

5
推荐指数
1
解决办法
2219
查看次数

从用户定义的函数 JOOQ 查询

我正在寻找从用户定义的函数进行查询。select我见过的所有示例都是以参数形式查询函数

myFunction.setMyParam("plapla");
create.select(myFunction.asField()).fetch();
Run Code Online (Sandbox Code Playgroud)

尽管结果实际上是多列,但这会将结果作为一列返回。

我想做的是

myFunction.setMyParam("plapla");
create.select().from(myFunction).fetch();
Run Code Online (Sandbox Code Playgroud)

但我还没有找到办法这样做......

目前我正在使用

DSL.using(create.configuration())
                .select()
                .from("myFunction('" + myparam + "')")
                .fetch();
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个好的解决方案(未转义、未经处理等)

如何使用JOOQ生成的函数来做到这一点?

java sql postgresql jooq

5
推荐指数
1
解决办法
2871
查看次数

jOOQ 选择 POJO,仅为某些字段指定映射

我使用 jOOQ 和普通 SQL(不是生成的代码)。我正在尝试直接选择具有一些枚举类型字段的 POJO。

MyType pojo = context.select().from(table("Table"))
            .where(field("ID").equal("1")).fetchOne()
            .into(MyType.class);
Run Code Online (Sandbox Code Playgroud)

在我看来,我只能为整个 POJO 指定一个高级映射器,如下所示:

MyType pojo = context.select().from(table("Table"))
            .where(field("ID").equal("1")).fetchOne()
            .map(new RecordMapper<Record, MyType>() {
                @Override
                public MyType map(Record record) {
                    ...
                }
            });
Run Code Online (Sandbox Code Playgroud)

我找不到只为某些字段提供映射或转换器的方法。具体来说,我想告诉 jooq 类似“正常转换所有字段,除非我的 POJO 中的字段是 MyEnum 类型,在这种情况下使用此映射(或转换器)”。

如何为某些字段指定映射器而不为其他字段指定映射器?

顺便说一句,我注意到我可以在配置级别做类似的事情,将数据库字段名称与通配符匹配(如此处所述,但我认为如果由 POJO 中字段的类型来驱动决策会更好。

java sql enums jooq

5
推荐指数
1
解决办法
1927
查看次数

未在 Micronaut 项目中创建 jOOQ DSLContext Bean

我正在尝试在我的 Micronaut 应用程序中使用 jOOQ,并将 jOOQ DSLContext 作为注入的 bean 自动提供给我的构造函数,但它找不到 bean。

我已经在 application.yml 中配置了数据源以连接到我的 postgres 数据库,并声明了我的构造函数如下:

@Singleton
public class RepositoryImpl implements Repository
{
    private final DSLContext context;

    public RepositoryImpl(DSLContext context)
    {
        this.context = context;
    }
}
Run Code Online (Sandbox Code Playgroud)

和我的 application.yml 为:

datasources:
  default:
    url: "jdbc:postgresql://localhost:5432/my_db"
    username: "user"
    password: "password"
    driver-class-name: "org.postgresql.Driver"
Run Code Online (Sandbox Code Playgroud)

我在 build.gradle 中包含了以下依赖项

    compile 'io.micronaut.configuration:micronaut-jooq'
    runtime 'org.postgresql:postgresql:42.2.4'
Run Code Online (Sandbox Code Playgroud)

我希望我可以访问 DSLContext 并在我的 RepositoryImpl 类中编写查询,但是在尝试使用实现类时,代码失败并出现以下异常:

Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [org.jooq.DSLContext] exists. Make sure the bean is not disabled by bean requirements (enable …
Run Code Online (Sandbox Code Playgroud)

java postgresql jooq micronaut

5
推荐指数
1
解决办法
1114
查看次数

JOOQ 如何在不展平属性的情况下获取连接到 POJO 的结果?

我有以下查询,我连接表AB以及C

  • CB通过有关C.B_ID
  • BA通过有关B.A_ID

我想检索一份报告,其中对于每个C,我还想从相应的B和 中检索字段A。如果只需要字段的子集,则投影和提取到 POJO(具有来自C, B, 的必需属性A)是一种显而易见的方法。

class CReportDTO {
    Long c_id;
    Long c_field1;
    Long c_bid;
    Long b_field1;
    // ...
    CReportDTO(Long c_id, Long c_field1, Long c_bid, Long b_field1) {
        // ...
    }

    // ..
}
Run Code Online (Sandbox Code Playgroud)
public List<CReportDTO> getPendingScheduledDeployments() {
        return dslContext.select(
                C.ID,
                C.FIELD1,
                C.B_ID,
                B.FIELD1,
                B.A_ID
                A.FIELD1,
                A.FIELD2
                )
                .from(C)
                .join(B)
                .on(C.B_ID.eq(B.ID))
                .join(A)
                .on(B.A_ID.eq(A.ID)) …
Run Code Online (Sandbox Code Playgroud)

java sql jooq

5
推荐指数
1
解决办法
563
查看次数

quarkus 与 jooq 的结构

我在 php 上有应用程序后端。但最近我在 Quarkus 上创建了相同的后端,并将其部署在带有数据库 MYSQL 的 kubernetes 上。我在 php 后端路由一半用户,从应用路由一半 qaurkus。PHP 后端工作正常,但 quarkus 后端有问题,它在几个小时后卡住,请求延迟增加超过一分钟,有时会超时。在检查了一些堆栈之后,我发现它卡在数据源中的 getConnection 上,我正在起诉 agroal。它不是数据库问题,因为与此同时,如果我使用 php 检查应用程序,它运行良好,没有任何问题或延迟。我也尝试增加和减少最小/最大池大小,但仍然是同样的问题。我将分享我在 mysql 中使用 quarkus、agroal 和 jooq 的结构。我认为问题在于那个。

我正在使用 kotlin 并且 DSLContext 是静态的对象。

应用程序.kt

@ApplicationScoped
class AppLifecycleBean {
    @Inject
    lateinit var dsl: DSLContext
    @Inject
    lateinit var launchMode: LaunchMode

    fun onStart(@Observes ev: StartupEvent?) {
        DBHelper.init(dsl)
    }

    fun onStop(@Observes ev: ShutdownEvent?) {
    }

}
Run Code Online (Sandbox Code Playgroud)

数据库助手.kt

object DBHelper {
    lateinit var db: DSLContext
    private set

    fun init(db: DSLContext){
        this.db = db
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我在应用程序开始时将 JOOQ …

jooq quarkus agroal

5
推荐指数
1
解决办法
263
查看次数

标签 统计

jooq ×10

java ×9

sql ×4

postgresql ×3

agroal ×1

database ×1

enums ×1

micronaut ×1

orm ×1

quarkus ×1