JOOQ 商业级 SQL框架,MyBatis之外的 ORM 选择

唯一的缺点,就是针对商业级数据库(Oracle、DB2、SQLServer)需要购买授权。开源数据库免费无影响。

这一点在我看来,对国内互联网公司,完全没影响,因为一般都用MySQL数据库。

官网:https://www.jooq.org/

下面是pom.xml 配置,包含代码生成器:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>javalibase</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <jooq.version>3.16.3</jooq.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.javalin</groupId>
            <artifactId>javalin</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.8.0-beta4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.8.0-beta4</version>
        </dependency>
        <dependency>
            <groupId>org.jooq</groupId>
            <artifactId>jooq</artifactId>
            <version>${jooq.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.13.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.13.1</version>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>5.0.1</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.20</version>
        </dependency>

        <!--        <dependency>-->
        <!--            <groupId>org.ktorm</groupId>-->
        <!--            <artifactId>ktorm-core</artifactId>-->
        <!--            <version>3.4.1</version>-->
        <!--        </dependency>-->
        <!--        <dependency>-->
        <!--            <groupId>com.fasterxml.jackson.module</groupId>-->
        <!--            <artifactId>jackson-module-kotlin</artifactId>-->
        <!--            <version>2.13.1</version>-->
        <!--        </dependency>-->

    </dependencies>

    <build>
        <plugins>
            <!-- 代码生成器插件 -->
            <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.01/test_jlin?serverTimezone=Asia/Shanghai</url>
                        <user>root</user>
                        <password>123456</password>
                    </jdbc>
                    <generator>
                        <database>
                            <includes>sys.*</includes>
                            <inputSchema>test_jlin</inputSchema>
                        </database>
                        <target>
                            <packageName>com.mcuu.jooq.codegen</packageName>
                            <directory>/src/main/java</directory>
                        </target>
                    </generator>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>


选中pom.xml,右键生成(jooq-codegen:generate),如下图


简单初始化 DSLContext

import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public abstract class Dao {
    protected static final DSLContext dslContext;

    static {
        String jdbcUrl = "jdbc:mysql://localhost:3306/learn-jooq?serverTimezone=GMT%2B8";
        String jdbcUsername = "root";
        String jdbcPassword = "root";
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        // 获取 jOOQ 执行器
        dslContext = DSL.using(connection, SQLDialect.MYSQL);
    }