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&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)
方法,取到对应字段的值,也可以将这个接口看做是一条记录的字段/值映射。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。