一、什么是JOOQ:
JOOQ 是基于Java访问关系型数据库的工具包。JOOQ 既吸取了传统ORM操作数据的简单性和安全性,又保留了原生sql的灵活性,它更像是介于 ORMS和JDBC的中间层。
DSL(Domain Specific Language )风格,代码够简单和清晰。遇到不会写的sql可以充分利用IDEA代码提示功能轻松完成。
保留了传统ORM 的优点,简单操作性,安全性,类型安全等。不需要复杂的配置,并且可以利用Java 8 Stream API 做更加复杂的数据转换。
支持主流的RDMS和更多的特性,如self-joins,union,存储过程,复杂的子查询等等。
丰富的Fluent API和完善文档。
runtime schema mapping 可以支持多个数据库schema访问。简单来说使用一个连接池可以访问N个DB schema,使用比较多的就是SaaS应用的多租户场景。
如何反向生成Jooq?
前言:本次项目的搭建使用SpringBoot + MySQL + Jooq整合
1.创建好SpringBoot项目后在pom.xml中导入jooq所需包:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.demo
springjooq-1
0.0.1-SNAPSHOT
springjooq-1
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
mysql
mysql-connector-java
5.1.21
org.springframework.boot
spring-boot-starter-jooq
org.projectlombok
lombok
1.16.18
com.alibaba
fastjson
1.2.15
com.alibaba
druid
1.1.3
org.jooq
jooq-meta
org.jooq
jooq-codegen
org.springframework.boot
spring-boot-maven-plugin
org.jooq
jooq-codegen-maven
${jooq.version}
generate
mysql
mysql-connector-java
5.1.21
src/main/resources/JooqConfig.xml
2.在application.properties中加入访问数据库路径
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
3.在SpringBoot项目结构的src/main/resources下创建一个JooqConfig.xml
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8
root
123456
org.jooq.meta.mysql.MySQLDatabase
.*
demo
true
true
true
false
com.demo.main.jooq
src/main/java
4.右击项目选择Run->Maven install运行即可,如图 (注:如使用IDEA在编辑器的右边点击Maven找到指定项目点击install即可 )
5.生成好后可以看到项目的结构
6.生成的每个类是做什么的!
1.先讲解下jooq包下面的每个类的作用:
DefaultCatalog.java:里面存放的是Demo.java也就是数据库名
/*
* This file is generated by jOOQ.
*/
package com.demo.main.jooq;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Generated;
import org.jooq.Schema;
import org.jooq.impl.CatalogImpl;
/**
* This class is generated by jOOQ.
*/
@Generated(
value = {
"http://www.jooq.org",
"jOOQ version:3.11.9"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class DefaultCatalog extends CatalogImpl {
private static final long serialVersionUID = 1891688733;
/**
* The reference instance of
*/
public static final DefaultCatalog DEFAULT_CATALOG = new DefaultCatalog();
/**
* The schema demo
.
*/
public final Demo DEMO = com.demo.main.jooq.Demo.DEMO;
/**
* No further instances allowed
*/
private DefaultCatalog() {
super("");
}
@Override
public final List getSchemas() {
List result = new ArrayList();
result.addAll(getSchemas0());
return result;
}
private final List getSchemas0() {
return Arrays.asList(
Demo.DEMO);
}
}
Demo.java里面存放的是数据库的表
/*
* This file is generated by jOOQ.
*/
package com.demo.main.jooq;
import com.demo.main.jooq.tables.SClass;
import com.demo.main.jooq.tables.Student;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Generated;