JOOQ 代碼生成

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&amp;serverTimezone=UTC&amp;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) 方法,取到對應字段的值,也可以將這個接口看做是一條記錄的字段/值映射。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章