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系列教程

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