Spring Boot+JOOQ(一)基本环境搭建

JOOQ介绍

JOOQ(Java Object Oriented Querying),是基于Java的轻量级数据库访问库,通过特定的语法将类以及数据库模式翻译成对应的SQL语句实现实体与关系的映射。

JOOQ具有如下的特点:

  • 继承了ORM框架的优点,简单操作,类型安全等。jOOQ将SQL建模为内部DSL,使用Java编译器编译SQL语法,元数据和数据类型。
  • JOOQ会根据数据库的元数据来生成对应的实体类,省略了原有开发中不断修改对应数据库的类名,属性名。
  • JOOQ允许运行时配置数据库模式,且支持行级别的安全。
  • 支持联合查询,多表查询,存储过程等数据库高级操作。

Springboot集成JOOQ

新建Springboot项目,加入JOOQ依赖项。

Spring Boot+JOOQ(一)基本环境搭建_第1张图片
项目建立后,在pom文件中另外引入两个依赖:


    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-meta.jar: org.jooq.meta
  • jooq-meta-extensions.jar: org.jooq.meta.extensions
  • jooq-codegen.jar: org.jooq.codegen
  • jooq-codegen-maven.jar: org.jooq.codegen.maven

因此在参考,使用网上众多之前其他的JOOQ相关代码时记得将其进行修改

在终端输入 mvn clean compile,出现Build Success后可以看到在generator目录下生成了众多文件,表示JOOQ的环境成功搭建。
Spring Boot+JOOQ(一)基本环境搭建_第2张图片
数据库建表语句:

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类中排查问题的原因是一个好的方法。

你可能感兴趣的:(Java学习)