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);
}