jOOQ系列一:SpringBoot2.x整合jOOQ 1. 引入依赖 2. 配置类 3. 配置文件 4. 使用mvn命令自动生成代码 推荐阅读

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命令自动生成代码

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

生成后的目录格式:

推荐阅读

jooq系列教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章