标签: jooq

我的开源库正在稳定下来.现在如何获得关注?

我最近稳定了用Java编写的主要开源库的开发.然后我在服务器端发表了一篇文章,这给我带来了许多积极的(但也是批评性的,建设性的)反馈.并且是第一个贡献者,这太棒了!

因此,通过所有这些良好的反馈,我对我的项目有了很好的感觉,我创造了一些有用和原创的东西.我的项目背后的一些关键想法,以及为什么我认为它是原创的:

  • 它是一个or-mapper.好的,现在真的不是原创...... ;-)
  • 它有代码生成.好的,仍然不是原创.但那总是很好.
  • 它允许使用自己的特定于域的语言在Java中创建类型安全的查询.那更好.没有字符串连接.JPA刚刚从Hibernate复制了标准查询.
  • 它允许使用所有SQL功能,包括复杂连接,嵌套选择,联合,别名等.现在这对我来说似乎是原创的.OR-mappers倾向于试图忽略RDBMS背后的关系数据模型.
  • 它支持各种本地非标准功能,如UDT,存储过程,本机功能等.我不知道任何or-mapper可以做到这一点.

我认为这些关键想法对于特定类型的开发人员非常有用.特定的开发人员

  • Java与巨大的遗留数据库接口.
  • 很了解SQL并希望广泛使用它.
  • 不想学习任何新语言(HQL,JPQL等)
  • 不想花一分钟微调一些复杂的XML配置.
  • 希望对SQL有一点抽象,因为他的软件与他的数据库紧密结合.我认为Hibernate或JPA的人似乎忽略了一些东西.
  • 编辑:需要一个强大但轻量级的数据库访问库.例如,当他们为移动设备开发时(请参阅SRM的评论).

现在是艰苦工作的开始.怎么引起注意?我怎样才能获得更多人群?我的项目如何变得相关?如何达到"特定类型的开发者"?

open-source jooq

6
推荐指数
1
解决办法
349
查看次数

如何通过 Gradle 使用 jOOQ 代码生成?

我正在阅读jOOQ的这篇教程

它向我展示了如何从 Gradle 内部使用 jOOQ 代码生成。

根据本教程,我修改了我的build.gradle文件,如下所示:

group 'com.abhi'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'org.flywaydb.flyway'

sourceCompatibility = 1.8

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.flywaydb:flyway-gradle-plugin:3.2.1'
        classpath 'org.jooq:jooq-codegen:3.7.1'
        classpath 'com.h2database:h2:1.4.177'
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.jooq', name: 'jooq', version: '3.7.1'
    compile group: 'org.jooq', name: 'jooq-meta', version: '3.7.1'
    compile group: 'org.jooq', name: 'jooq-codegen', version: '3.7.1'
    runtime group: 'com.h2database', name: 'h2', version: '1.4.177'
}

flyway {
    url = 'jdbc:h2:file:target/foobar'
    user …
Run Code Online (Sandbox Code Playgroud)

gradle jooq

6
推荐指数
1
解决办法
1万
查看次数

超过 22 列的 jOOQ 查询示例

我正在寻找如何执行超过 22 行的 jOOQ 查询的示例。

http://www.jooq.org/doc/latest/manual/sql-building/column-expressions/row-value-expressions/

告诉我这是可能的,但我还没找到例子。

有人能指出我正确的方向吗?

java sql jooq

6
推荐指数
1
解决办法
2423
查看次数

Postgres 和 JOOQ 不区分大小写的正则表达式?

我目前在 JOOQ 中使用此代码:

Condition condition = DSL.trueCondition();
if( isNotBlank(email) ){
  condition = condition.and(APP_USER.EMAIL.likeRegex(email));
}
Run Code Online (Sandbox Code Playgroud)

最终发出 Postgres 特定的 SQL,在数据库中进行正则表达式匹配:

app_user.email ~ '{email regex}'
Run Code Online (Sandbox Code Playgroud)

是否可以让 JOOQ 发布不区分大小写的版本:app_user.email ~* '{email regex}'


我当前的解决方法是使用此代码:

if( isNotBlank(email) ){
  condition = condition.and(
    APP_USER.EMAIL.lower().likeRegex(email.toLowerCase()) );
}
Run Code Online (Sandbox Code Playgroud)

java sql jooq

6
推荐指数
1
解决办法
1597
查看次数

如何让 Docker Compose 服务构建依赖于另一个服务?

这就是我的意思。如何编写 docker-compose.yaml 文件,以便在“构建”其中一个服务时,它首先运行另一个服务?

我会尽量说得更具体一些。我正在尝试使用数据库库 JOOQ 构建 Java 应用程序,该应用程序希望在构建时连接到数据库,以便生成与数据库表相对应的 Java 类。我想要 Dockerfile(s) 和 docker-compose.yaml 文件的某种组合,以便以下大致按以下顺序发生。

  1. 启动“数据库”服务(在我的情况下,使用 postgres 图像)。
  2. 数据库是用我的开发仓库中的 SQL 脚本初始化的。
  3. 我的“web”服务的构建阶段运行,它使用同一个 repo 中的 Dockerfile,它调用 Gradle 构建,它告诉 JOOQ 连接到在步骤 1 中启动的数据库服务。这会生成 Java 文件,编译它们,然后执行用于构建容器的所有其他内容。
  4. “web”服务启动,连接到步骤 1 中启动的数据库服务。

这是我正在使用的 docker-compose.yaml 文件

version: '3.7' 
services:
  postgres:
    image: postgres:10.5-alpine
    restart: always
    ports:
      - "6432:5432"
    environment:
      POSTGRES_DB: flashtools
      POSTGRES_USER: flashtools
      POSTGRES_PASSWORD: flashtools
    volumes:
      - ./src/main/scripts/01_init.sql:/docker-entrypoint- 
initdb.d/01_init.sql
  web:
    build: .
    network_mode: host
    depends_on:
      - postgres
    ports:
      - "8080:8080"
Run Code Online (Sandbox Code Playgroud)

我会用更多细节来充实这一点,但希望我要问的是非常简单的。

database postgresql jooq docker docker-compose

6
推荐指数
1
解决办法
2413
查看次数

JooQ 中的 DuplicateKeyException

我正在使用 JooQ 在 Aurora MySQL 上执行 CRUD 操作。

我有以下场景:

  1. 如果由于重复键异常导致插入失败,则再次重试相同的操作,否则忽略异常。
  2. 如果插入失败,则在满足条件的情况下更新记录。

有没有办法只捕获 DuplicateKeyException?JooQ 将异常作为 DataAccessException 抛出。

在启用 OnDuplicateKeyUpdate 时,似乎如果记录存在,它将盲目更新数据库中的记录。我的用例是如果记录存在于数据库中,则在满足更新条件时更新记录。

我可以在两个单独的 Insert 和 Update 调用中做到这一点,但有没有办法在单个调用中做到这一点?

谢谢!!

java mysql sql jooq amazon-aurora

6
推荐指数
1
解决办法
1279
查看次数

在jOOQ中插入记录而不指定列名

我有一个包含 5 列的 USER_ROLES 表。另外,还有一个 UserRole 类,其字段数和名称与 USER_ROLES 相同。

我试图插入一行而不指定列名:

    UserRole ur = new UserRole();
    // UserRole fields setting

    create.insertInto(USER_ROLES).values(ur).execute();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试创建行时出现此错误:

The number of values must match the number of fields

我是否被迫指定列名称?

java jooq

6
推荐指数
1
解决办法
1827
查看次数

使用 jOOQ 获取表列表

我一直在 jOOQ 中使用Schema.getTables()方法来获取模式中的表列表,但今天我发现该方法返回的是我们执行 jOOQ 代码生成时存在的表列表,而不是返回的表存在于此时此刻。

我的具体用例是我们随着时间的推移创建表(自动分区),并且我们的 Java 服务对它们进行一些操作。

jOOQ 有没有办法从数据库获取当前表列表?

我可以直接查询information_schema.tables,但我更愿意重用 jOOQ 中的方法(如果有)。

postgresql jooq

6
推荐指数
1
解决办法
2389
查看次数

如何使用 Jooq 获取多级一对多嵌套

这是场景,我有 5 个表,彼此之间具有一对多关系,我必须在下面给定的 Pojos 和 Jooq 中以分层方式映射结果数据。

DB 表是 a、b、c、d、e

// Here are response Pojo's
Class APojo {
  public string name;
  public List<BPojo> listOfB;

}

Class BPojo {
  public string name;
  public List<CPojo> listOfC;
}

Class CPojo {
  public string name;
  public List<DPojo> listOfD;

}

Class DPojo {
  public string name;
  public List<EPojo> listOfE;

}

Class EPojo {
  public string name;

}
Run Code Online (Sandbox Code Playgroud)

预期样本响应

{
  "name":"A1",
  "list_of_b":[
    {
      "name":"A1B1",
      "list_of_c":[
        {
          "name":"A1B1C1",
          "list_of_d":[
            {
              "name":"A1B1C1D1",
              "list_of_e":[
                {
                  "name":"A1B1C1D1E1"
                },
                {
                  "name":"A1B1C1D1E2" …
Run Code Online (Sandbox Code Playgroud)

java sql spring jooq jooq-codegen-maven

6
推荐指数
1
解决办法
2265
查看次数

在jooq的条件表达式中使用自定义数据类型

我将 jooq 与自定义绑定一起使用,该绑定将所有 JTS 几何类型转换为适当的 Postgis 数据类型。这使我能够无缝地编写和读取 JTS 几何类型,但我无法使用这些相同的自定义类型执行查询。

例如,当我尝试将此条件添加到查询中时:

Polygon polygon = geometryFactory.createPolygon(
  new Coordinate[]{topLeftCorner, bottomLeftCorner, bottomRightCorner, topRightCorner, topLeftCorner}
);
polygon.setSRID(4326);
DSL.condition("ST_WITHIN({0}, {1})", USER.COORDINATES, polygon)
Run Code Online (Sandbox Code Playgroud)

它失败并显示以下消息

org.jooq.exception.SQLDialectNotSupportedException: Type class org.locationtech.jts.geom.Polygon is not supported in dialect DEFAULT
Run Code Online (Sandbox Code Playgroud)

java postgis jooq

6
推荐指数
1
解决办法
384
查看次数