JOOQ 代码生成

    技术2022-07-12  84

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

    Processed: 0.008, SQL: 9