jOOQ系列教程

主要是针对查询出来的结果进行处理, 以及响应

查询结果处理

Record 相当于模型, 可以对其修改和删除; 其 .from().into() 方法实现对 Record 的填充和转换(通常是使用pojos实体类进行转换然后响应).

安装(与spring boot集成)

<!-- jooq -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jooq</artifactId>
</dependency>
<!-- 代码生成器插件 mvn jooq-codegen:generate -->
<plugin>
    <groupId>org.jooq</groupId>
    <artifactId>jooq-codegen-maven</artifactId>
    <version>${jooq.version}</version>
    <configuration>
        <jdbc>
            <driver>com.mysql.cj.jdbc.Driver</driver>
            <url>jdbc:mysql://127.0.0.1:3306/exadmin</url>
            <user>root</user>
            <password>root</password>
        </jdbc>
        <generator>
            <database>
                <!-- 包含的数据库和表 -->
                <includes>exadmin.*</includes>
            </database>
            <target>
                <!-- 指定包名和位置 -->
                <!-- 主包+子包 -->
                <packageName>com.example.blog.jooqgen</packageName>
                <!-- 主包目录即可 -->
                <directory>./src/main/kotlin/</directory>
            </target>
            <generate>
                <!-- 生成pojo文件,修改自行继承 -->
                <pojos>true</pojos>
                <!-- 生成dao文件 -->
                <daos>true</daos>
            </generate>
        </generator>
    </configuration>
</plugin>

配置

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/exadmin
    username: root
    password: root
logging:
  level:
    org.jooq.tools.LoggerListener: DEBUG

使用(kotlin)

package com.example.blog

import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import org.jooq.DSLContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.jooq.Record;
import com.jooqgen.exadmin.Tables.*;
import org.jooq.Record1
import org.jooq.Result
import org.jooq.impl.DSL

@RestController
class HtmlController {

    @Autowired
    private val dslContext: DSLContext? = null;

    @RequestMapping("/")
    fun blog(): Array<Int> {
        var list = emptyArray<Int>();
        dslContext?.select(ADMIN_CONFIGS.ID)?.from(ADMIN_CONFIGS)
            ?.join(AGENT_DATA)
            ?.on(ADMIN_CONFIGS.ID.eq(AGENT_DATA.ID))
            ?.where(AGENT_DATA.ID.eq(2))
            ?.fetch()?.forEach() { record ->
                run {
                    list += record.getValue(AGENT_DATA.ID);
                }
            };

        return list;
    }

}

Note

也可以使用Dao层直接返回pojos, Dao层分装了部分 fetchBy[] 方法

var dao: AdminConfigsDao? = AdminConfigsDao(dslContext?.configuration());
return dao?.fetchById(1);

mvn jooq-codegen:generate 配置

# 配置 不生成无符号的pojos: https://www.jooq.org/doc/latest/manual/code-generation/
# 配置 生成kt代码: https://www.jooq.org/doc/latest/manual/code-generation/kotlingenerator/