29.5 Using jOOQ
Java面向对象查询(jOOQ)是一个Data Geekery出品的广受欢迎的产品, 它能让你通过其流利的API从从数据库生成Java代码而构建类型安全的SQL查询.商业和开源版本都可以在Spring Boot中使用.
Code Generation
为了使用jOOQ类型安全的查询,你需要从数据库的模式生成Java类.你可以参照jOOQ用户手册.
如果你使用jooq-codegen-maven插件并且您还使用spring-boot-starter-parent父POM,您可以安全地忽略插件的n>标记。versio.
您还可以使用Spring Boot预定义的版本变量(例如h2.version)来声明插件的数据库依赖.下面的清单显示了一个示例:
<plugin><groupId>org.jooq</groupId><artifactId>jooq-codegen-maven</artifactId><executions>...</executions><dependencies><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>${h2.version}</version></dependency></dependencies><configuration><jdbc><driver>org.h2.Driver</driver><url>jdbc:h2:~/yourdatabase</url></jdbc><generator>...</generator></configuration></plugin>
Using DSLContext
jOOQ提供的简洁的API是通过org.jooq.DSLContext接口初始化的.Spring Boot自动配置DSLContext为Spring Bean实例并且自动连接到你的应用程序数据源.
当然你也可通过@Autowire注入DSLContext,如以下示例所示:
@Componentpublic class JooqExample implements CommandLineRunner {private final DSLContext create;@Autowiredpublic JooqExample(DSLContext dslContext) {this.create = dslContext;}}
Tip
jOOQ手册倾向于使用一个名为
create的变量来保存DSLContext.
然后可以使用DSLContext构造你的查询,如下面的示例所示
public List<GregorianCalendar> authorsBornAfter1980() {return this.create.selectFrom(AUTHOR).where(AUTHOR.DATE_OF_BIRTH.greaterThan(new GregorianCalendar(1980, 0, 1))).fetch(AUTHOR.DATE_OF_BIRTH);}
JOOQ SQL Dialect
除非spring.jooq.sql-dialect属性已经配置,否则Spring Boot为你使用的数据源指定SQL方言.如果Spring Boot不能检测到该方言,则使用DEFAULT.
Note
Spring Boot只能自动配置jOOQ开源版本支持的方言.
customizing jOOQ
当jOOQ Configuration类创建使用时,可通过定义你自己的@Bean来进行高级配置.您可以为以下jOOQ类型定义bean:
- ConnectionProvider
- TransactionProvider
- RecordMapperProvider
- RecordUnmapperProvider
- RecordListenerProvider
- ExecuteListenerProvider
- VisitListenerProvider
您还可以创建你自己的org.jooq.Configuration @Bean实例,这样你就可以完全管理jOOQ配置.
