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) 方法,取到对应字段的值,也可以将这个接口看做是一条记录的字段/值映射。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值