SpringBoot项目导入jooq

  1. 在业务模块的pom文件中引入依赖

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.jooq</groupId>
    <artifactId>jooq</artifactId>
    <version>${jooq.version}</version>
    </dependency>
  2. 引入jooq-gen

  3. 修改library.xml中的配置,主要是jdbc的配置和文件生成位置

  4. 在终端中运行win-generate.bat生成相关文件

配置JooqConfig

  1. 首先要确保dataSource配置正确

  2. 然后新建JooqConfig类,并使用@Configuration注解

  3. 注意在Config类中注册bean时,name字段决定了自动装配的bean名称

    1
    2
    3
    4
    5
    6
    /*DSLContext for rppm */
    @Bean(name = "dslRppm")
    public DefaultDSLContext dslContext(@Qualifier("dataSourceConnectionProviderRppm") DataSourceConnectionProvider connectionProviderRppm,
    @Qualifier("transactionProviderRppm") SpringTransactionProvider transactionProviderRppm) {
    return new DefaultDSLContext(configuration(connectionProviderRppm, transactionProviderRppm));
    }

例如,使用@Resource private DSLContext dslRppm;进行装配时会去查找名称为dslRppm的bean,即自己配置的DSLContext

  1. 具体的JooqConfig类,可以去standard-server中查看

在业务方法中使用jooq进行查询

  1. 注入依赖@Resource private DSLContext dslRppm;会根据上面的配置的bean的名称进行自动装配

  2. 查询语句示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Result<Record> result = dslRppm
    .select()
    .from(STUDENT_TABLE)
    .fetch();
    result.forEach(res -> {
    Map<String, Object> map = new HashMap<>();
    String id = res.getValue(STUDENT_TABLE.ID);
    map.put("id", id);
    String name = res.getValue(STUDENT_TABLE.NAME);
    map.put("name", name);
    Integer age = res.getValue(STUDENT_TABLE.AGE);
    map.put("age", age);
    list.add(map);
    });
    Result<StudentTableRecord> studentTableRecords = result.into(STUDENT_TABLE);
        studentTableRecords.forEach(studentTableRecord -> {
        String id = studentTableRecord.getId();
        });
  3. 上述语句会查询student_table表中的所有数据,并保存在Result中,其继承了List类,可以当成List使用;也可以使用.into()方法,将默认Record对象,转换为表的Record对象,直接调用getter/setter

  4. fetchInto方法可以可以传入任意class类型,或者表常量