J Micro SQL JOOQ
提供业务层面的 JOOQ 封装:通用 DAO、分页查询、Lombok POJO 生成扩展等。相比 MyBatis,JOOQ 可以像写 Java 一样写 SQL,并具备良好的类型校验。
目录
引入依赖
<dependency>
<groupId>com.jiangtj.micro</groupId>
<artifactId>micro-sql-jooq</artifactId>
</dependency>
建议配合
micro-dependenciesBOM 使用,省略版本号(见根 README)。
PageUtils 分页查询
Fluent API
PageUtils.selectFrom(create, ADMIN_USER)
.conditions(condition(new AdminUserRecord(user)))
.pageable(pageable)
.fetchPage(AdminUser.class)
如果你希望修改查询内容:
PageUtils.select(create, field("val1"), field("val2") /* ... */)
.from(ADMIN_USER)
.conditions(condition(new AdminUserRecord(user)))
.pageable(pageable)
.fetchPage(AdminUser.class)
分别查询列表与总数
Condition condition = ...;
PageUtils.selectLimitList(create.select(table).from(table), pageable, condition);
PageUtils.selectCount(create.selectCount().from(table), condition);
响应式
首先添加一个 DSLContext 配置:
@Bean
public DSLContext dslContext(ConnectionFactory connectionFactory) {
return DSL.using(connectionFactory);
}
之后,使用 subscribe() 获取并转换值:
public Mono<Page<AdminUser>> fetchPage() {
return PageUtils.selectFrom(create, ADMIN_USER)
.conditions(condition(new AdminUserRecord(user)))
.pageable(pageable)
.subscribe(Flux::from, Mono::from)
.map(PageReactiveUtils.toPage(AdminUser.class));
}
GenerateHelper 代码生成
帮助生成 JOOQ 代码的工具类。在程序中控制代码生成比 Maven 插件更具自定义空间——尤其当项目已有数据库链接配置时,只需读取配置即可转换为目标类,本工具类负责这些杂事:
@SpringBootTest
public class GenerateTest {
@Resource
DataSourceProperties properties;
@Test
public void generate() throws Exception {
GenerateHelper.init(properties);
GenerationTool.generate(new Configuration()
.withJdbc(GenerateHelper.getJdbc())
.withGenerator(new Generator()
.withDatabase(GenerateHelper.getDatabase(".*"))
.withTarget(GenerateHelper.getTarget("com.jiangtj.platform.system.jooq"))
.withGenerate(new Generate()
.withPojos(true)
.withPojosAsJavaRecordClasses(true)
.withValidationAnnotations(true)
.withDaos(true))));
}
}
GenerateHelper.init(properties):注入 Spring Boot 数据源配置GenerateHelper.getJdbc():获取 JDBC 配置GenerateHelper.getDatabase(tableNamePattern):获取数据库配置GenerateHelper.getTarget(packageName):获取生成位置配置
ExtendGenerator 扩展生成器
扩展 JOOQ 代码生成器,提供以下功能:
- 为表定义提供获取 POJO 类型(默认
false) - 为 DAO 生成类提供
fetchPage方法(默认true)
@SpringBootTest
public class GenerateTest {
@Resource
DataSourceProperties properties;
@Test
public void generate() throws Exception {
GenerateHelper.init(properties);
GenerationTool.generate(new Configuration()
.withJdbc(GenerateHelper.getJdbc())
.withGenerator(new Generator()
.withName(ExtendGenerator.class.getName())
.withDatabase(GenerateHelper.getDatabase(".*"))
.withTarget(GenerateHelper.getTarget("com.jiangtj.platform.system.jooq"))
.withGenerate(new Generate()
.withPojos(true)
.withPojosAsJavaRecordClasses(true)
.withValidationAnnotations(true)
.withDaos(true))));
}
}
通过 withName 设置生成类即可。你也可以通过 GenerateHelper 修改默认配置;同时也提供了 PageDAOImpl,修改你的 DAO 类继承它即可获得相同效果。