JOOQ 代码生成分析

不点 阅读:273 2021-03-31 14:11:41 评论:0

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

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号