Maven Java 項目pom.xml 文件
<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>com.zzg</groupId>
<artifactId>java</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
******
<!--mysql8 驅動包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!--jooq 依賴jar包 -->
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<version>3.12.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- jdk版本編譯 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--jooq 代碼生成插件 -->
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>3.12.3</version>
<configuration>
<!-- mysql8 連接-->
<jdbc>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/myblog?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true</url>
<user>root</user>
<password>123456</password>
</jdbc>
<generator>
<database>
<!--include用於控制數據庫中哪些表生成-->
<includes>.*</includes>
<!--exclude用於控制數據庫中哪些表不生成-->
<!--<excludes></excludes>-->
<!--數據庫名稱-->
<inputSchema>myblog</inputSchema>
</database>
<!--生成代碼文件的包名及放置目錄-->
<target>
<packageName>com.zzg.jooq</packageName>
<directory>/src/main/java</directory>
</target>
</generator>
</configuration>
</plugin>
</plugins>
</build>
</project>
新建Java Maven項目的編譯指令:mvn jooq-codegen:generate
生成結果展示:
相關類說明:
com.zzg.jooq.Keys:主要記錄自增鍵、唯一鍵、外鍵。
com.zzg.jooq.Tables:主要記錄數據庫下涉及的表常量
com.zzg.jooq.Index:主要記錄數據庫涉及的索引。
com.zzg.jooq.DefaultCatalog:主要獲取實體對象的Schema.
com.zzg.jooq.Myblog:數據庫`Myblog`常量,包含該庫所有表描述常量
com.zzg.jooq.tables 文件夾,記錄了數據表中每個字段信息,包括字段名、數據類型、非空、默認值等。注意:假設表裏添加了新字段,就要修改這個文件
com.zzg.jooq.tables.records文件夾,主要涉及表操作對象,包含字段get,set方法。
JOOQ 簡單查詢:
package com.zzg.jooq.test;
import java.sql.Connection;
import java.sql.DriverManager;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.Result;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;
import com.zzg.jooq.Tables;
import com.zzg.jooq.tables.User;
public class JooqTest {
// 用戶名
public static String userName = "root";
// 密碼
public static String password = "123456";
// mysql連接url
public static String url = "jdbc:mysql://localhost:3306/myblog?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
public static void main(String[] args) {
try (Connection conn = DriverManager.getConnection(url, userName, password)) {
DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
Result<Record> result = create.select().from(Tables.USER).fetch();
for (Record r : result) {
Integer id = r.getValue(Tables.USER.ID);
String address = r.getValue(Tables.USER.ADDRESS);
String username = r.getValue(Tables.USER.USERNAME);
/**
* 控制檯輸出 ID: 1 first name: 3 last name: zhang ID: 2 first name: 4 last name: li
*/
System.out.println("ID: " + id + " address is: " + address + " username name: " + username);
}
// 關閉連接對象
conn.close();
}
// For the sake of this tutorial, let's keep exception handling simple
catch (Exception e) {
e.printStackTrace();
}
}
}
控制檯結果輸出:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/org/apache/activemq/activemq-all/5.15.13/activemq-all-5.15.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
INFO |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@
@@@@@@@@@@@@@@@@ @@ @@ @@@@@@@@@@
@@@@@@@@@@ @@@@ @@ @@ @@@@@@@@@@
@@@@@@@@@@ @@ @@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@ @@ @@@@@@@@@@
@@@@@@@@@@ @@ @@ @@@@ @@@@@@@@@@
@@@@@@@@@@ @@ @@ @@@@ @@@@@@@@@@
@@@@@@@@@@ @@ @ @ @@@@@@@@@@
@@@@@@@@@@ @@ @@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Thank you for using jOOQ 3.12.3
ID: 1 address is: 廣東省深圳市 username name: zzg
ID: 2 address is: 廣東省深圳市 username name: wz
ID: 3 address is: 廣東省深圳市 username name: zcx
JOOQ 核心類總結:
org.jooq.DSLContext:
jOOQ的核心接口之一,可以理解爲一個SQL執行器,通過靜態方法 DSL.using
,可以獲取一個 DSLContext
實例,此實例抽象了所有對於SQL的操作API,可以通過其提供的API方便的進行SQL操作。
重點: 通過數據庫連接和數據庫方言配置來創建一個執行器對象。
org.jooq.Result:
結果集接口,此接口實現了List接口,可以當做一個集合來操作,是一個數據庫查詢結果集的包裝類,除了集合的相關方法,該接口還提供了一些結果集轉換,格式化,提取字段等方法。通常我們查詢出來的結果都是此接口的實現類,掌握好此接口是jOOQ的基礎接口,基本所有的SQL查詢操作,都會碰到這個接口。
org.jooq.Record
主要用於定義數據庫表記錄,儲存的內容是一條表記錄的字段和值,每個值會儲存對應字段的類型,可以通過通用的 getValue(Field field)
方法,取到對應字段的值,也可以將這個接口看做是一條記錄的字段/值映射。