JOOQ(Java Object Oriented Querying),是基于Java的轻量级数据库访问库,通过特定的语法将类以及数据库模式翻译成对应的SQL语句实现实体与关系的映射。
JOOQ具有如下的特点:
新建Springboot项目,加入JOOQ依赖项。
org.jooq
jooq-meta
org.jooq
jooq-codegen
在plugins节点下插入以下代码:
org.jooq
jooq-codegen-maven
${jooq.version}
generate
org.postgresql
postgresql
42.2.5
src/main/resources/JooqConfig.xml
之后根据上一步中填写的路径,在resources目录下新建配置文件JooqConfig.xml:
org.postgresql.Driver
jdbc:postgresql://localhost:5432/postgres
name
********
org.jooq.codegen.JavaGenerator
scheme1\..*\.id
override_primmary_key
org.jooq.meta.postgres.PostgresDatabase
.*
scheme1
true
true
true
false
com.generator
src/main/java
需要注意的是,由于JAVA9中不允许不同的模块含有相同的包名,因此JOOQ对jooq-meta以及jooq-codegen中的包名进行了重命名,新的前缀如下:
因此在参考,使用网上众多之前其他的JOOQ相关代码时记得将其进行修改。
在终端输入 mvn clean compile,出现Build Success后可以看到在generator目录下生成了众多文件,表示JOOQ的环境成功搭建。
数据库建表语句:
CREATE TABLE "scheme1"."users" (
"id" int4 NOT NULL DEFAULT nextval('users_id_seq'::regclass),
"firstname" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"gender" varchar(255) COLLATE "pg_catalog"."default",
"province" varchar(255) COLLATE "pg_catalog"."default",
"city" varchar(255) COLLATE "pg_catalog"."default",
"phonenumber" varchar(11) COLLATE "pg_catalog"."default",
"secondname" varchar(255) COLLATE "pg_catalog"."default",
"age" int4,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "scheme1"."users"
OWNER TO "postgres";
2019.3.7更新
数据表中没有主键时,自动生成代码时会跳过Daos层代码的生成,即使JooqConfig.xml配置文件中
true
设置为true,控制台中可以看到:
[INFO] Generating DAO : UserDao.java
[INFO] Skipping DAO generation : UserDao.java
jooq-codegen包下,example路径下找到JavaGenerator类,可以看到输出到控制台的信息都是在这个类下,搜索一下Skipping DAO generation,可以看到以下代码:
UniqueKeyDefinition key = table.getPrimaryKey();
if (key == null) {
log.info("Skipping DAO generation", out.file().getName());
} else {
···
···
}
当编译之后没有生成预想的的文件时,查看控制台输出,并且在这个JavaGenerator类中排查问题的原因是一个好的方法。