jOOQ,是一个ORM框架,利用其生成的Java代码和流畅的API,可以快速构建有类型约束的安全的SQL语句
1. 引入依赖
1.1 依赖的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>test-jooq</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<jooq.version>3.14.8</jooq.version>
</properties>
<dependencies>
<!--springboot-相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入Spring事务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--jooq starter:导入JOOQ框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jooq</artifactId>
</dependency>
<!--jooq 代码映射插件-->
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen</artifactId>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta</artifactId>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--lombok的判断-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.14</version>
<scope>provided</scope>
</dependency>
<!--数据源配置-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<!--logback的条件判断-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--配置JOOQ自动生成的插件信息-->
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>3.14.8</version>
<!--具体的配置信息-->
<configuration>
<configurationFile>src/main/resources/jooq/jooq-codegen-config.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.2 jooq自动生成的配置
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<!--数据源配置-->
<jdbc>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://127.0.0.1:3306/test</url>
<user>root</user>
<password>root</password>
</jdbc>
<generator>
<database>
<name>org.jooq.meta.mysql.MySQLDatabase</name>
<!--数据库中的哪个库-->
<schemata>
<schema>
<inputSchema>test</inputSchema>
</schema>
</schemata>
<!--数据库中需要生成的表-->
<includes>t_user|t_product</includes>
<unsignedTypes>false</unsignedTypes>
<!--数据库中要排除的表-->
<!-- <excludes></excludes>-->
<!-- <forcedTypes></forcedTypes>-->
<!-- <outputSchemaToDefault>true</outputSchemaToDefault>-->
</database>
<generate>
<!--是否生成dao和pojo-->
<daos>true</daos>
<pojos>true</pojos>
<!--是否把数据库时间类型映射到java 8时间类型-->
<javaTimeTypes>true</javaTimeTypes>
<!--<interfaces>true</interfaces>-->
<!--是否在生成的代码中添加spring注释,比如@Repository-->
<springAnnotations>true</springAnnotations>
</generate>
<!--文件生成位置-->
<target>
<packageName>com.tellme.dsl.jooq</packageName>
<directory>src/main/java</directory>
</target>
</generator>
</configuration>
2. 配置类
/**
* 按照{@link JooqAutoConfiguration}仿写
*/
@Configuration
@EnableTransactionManagement
@Slf4j
public class JooqConfiguration {
/**
* 创建DSL的上下文,
* DSLContext可以去拼接sql信息。
*/
@Bean
public DSLContext dslContext(org.jooq.Configuration configuration) {
return DSL.using(configuration);
}
/*******************************************************************
* 主库的配置
*******************************************************************/
/**
* 定义数据源
*/
@Bean("masterDataSource")
@ConfigurationProperties(prefix = "mysql.master.datasource")
public DataSource dataSource() {
return new DruidDataSource();
}
/**
* 主库的配置
*/
@Bean
@Primary
public org.jooq.Configuration configuration() {
//配置信息
org.jooq.Configuration configuration = new DefaultConfiguration();
//配置信息
configuration.set(SQLDialect.MYSQL).settings()
.withRenderFormatted(true)
.withRenderCatalog(false)
.withRenderSchema(false);
//数据源,填充durid数据源
configuration.set(dataSourceConnectionProvider());
configuration.set(transactionProvider());
return configuration;
}
/**
* 事务管理器
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
/**
* 数据源连接的代理
*/
@Bean
public DataSourceConnectionProvider dataSourceConnectionProvider() {
return new DataSourceConnectionProvider(
new TransactionAwareDataSourceProxy(dataSource()));
}
/**
* 事务提供者
*/
@Bean
public TransactionProvider transactionProvider() {
return new SpringTransactionProvider(transactionManager());
}
/*******************************************************************
* 从库的配置
*******************************************************************/
@Bean("salveDataSource")
@ConfigurationProperties(prefix = "mysql.salve.datasource")
public DataSource slaveDataSource() {
return new DruidDataSource();
}
/**
* 从库的配置
*/
@Bean("slaveConfiguration")
public org.jooq.Configuration slaveConfiguration() {
//配置信息
org.jooq.Configuration configuration = new DefaultConfiguration();
//配置信息
configuration.set(SQLDialect.MYSQL).settings()
.withRenderFormatted(true)
.withRenderCatalog(false)
.withRenderSchema(false);
//数据源,填充durid数据源
configuration.set(new DataSourceConnectionProvider(
new TransactionAwareDataSourceProxy(slaveDataSource())));
return configuration;
}
}
3. 配置文件
mysql:
master:
datasource:
name: master_test
url: jdbc:mysql://localhost:3306/test
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
salve:
datasource:
name: salve_test
url: jdbc:mysql://localhost:3306/jooq
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
4. 使用mvn命令自动生成代码

注意事项:生成代码时,要确保项目是可以编译成功的,否则代码会生成失败,而异常信息却也看不出来到底哪里失败。
生成后的目录格式:

网友评论