jOOQ 是一个基于 Java 编写 SQL 的工具包,具有:简单、轻量、函数式编程写 SQL 等独特优势,非常适合敏捷快速迭代开发。也是 Cloudopt Next 推荐的 orm。

    Cloudopt Next 提供了对 jOOQ 的插件,用于方便启动 jOOQ 。您只需要在 Cloudopt Next 的配置文件中配置下 datasource 和 jooq 即可。

    Cloudopt Next 的 jOOQ 插件默认是使用 HikariCPPool 作为连接池的,如果您需要使用其它连接池,可以参照 HikariCPPool 进行实现并修改配置。

    在使用前请先自行引用相应的依赖,请自行添加版本号。(另外,你需要自行引用 mysql jdbc 驱动)

    1. <dependency>
    2. <groupId>net.cloudopt.next</groupId>
    3. <artifactId>cloudopt-next-jooq</artifactId>
    4. <version>${version}</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.jooq</groupId>
    8. <artifactId>jooq</artifactId>
    9. <version>${version}</version>
    10. </dependency>
    11. <dependency>
    12. <groupId>mysql</groupId>
    13. <artifactId>mysql-connector-java</artifactId>
    14. <version>${version}</version>
    15. </dependency>
    16. <dependency>
    17. <groupId>mysql</groupId>
    18. <artifactId>mysql-connector-java</artifactId>
    19. <version>${version}</version>
    20. </dependency>
    1. {
    2. "datasource": {
    3. "jdbcUrl": "jdbc:mysql://127.0.0.1:8889/cloudopt?useUnicode=true&character_set_server=utf8mb4&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true",
    4. "username": "root",
    5. "password": "root",
    6. "driverClassName": "com.mysql.cj.jdbc.Driver"
    7. },
    8. "jooq": {
    9. "pool": "net.cloudopt.next.jooq.pool.HikariCPPool",
    10. "database": "mysql"
    11. }
    12. }
    Name Description
    jdbcUrl 数据库连接地址。
    username 数据库用户名。
    password 数据库密码。
    driverClassName 数据库连接驱动名。
    pool 连接池实现类的类名。
    database 使用的数据库名称。具体支持填写的参数见下面的表格。
    Database
    mysql
    cubrid
    derby
    firebird
    mariadb
    postgres
    sqlite

    配置好后在服务器启动前增加插件便会自动创建连接池和初始化Jooq。

    1. fun main(args: Array<String>) {
    2. NextServer.addPlugin(JooqPlugin())
    3. NextServer.run(TestCase::class)
    4. }
    1. fun main(args: Array<String>) {
    2. NextServer.addPlugin(JooqPlugin());
    3. NextServer.run(TestCase.class);
    4. }

    为了方便大家使用,内置了一个简单的分页器,可以体验一下。

    1. JooqPaginate(Jooqer.dsl?.selectFrom(Tables.XXXX)?.where(XXXXXX.KEY.eq(id))!!,20,page).find(XXXXX::class.java)

    另外由于 Jooq 功能比较全面复杂,我们没有对其进行改动,默认是阻塞的,所以建议你在使用时结合 await 语法糖一起使用,避免阻塞。

    避免Blocking