jooq从入门到精通

  • 简介
  • 环境介绍
  • 环境准备
  • 代码生成
  • 代码测试

简介

本篇文章作为jooq的入门,搭建一个jooq的基本的测试环境,为后续深入学习jooq作准备。

jooq是一个orm层的框架,生态中的地位和mybatis等同,但是不用书写过多的sql语句,其包括了强大的api以及数据层代码生成能力。

环境介绍

sping boot 2.5.6
postgresql 10.4

环境准备

首先需要创建一个spring boot的项目,添加依赖如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

添加postgresql依赖和jooq依赖以及jooq代码生成器相关的依赖:

<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.5</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jooq</artifactId><version>2.5.6</version>
</dependency>
<dependency><groupId>org.jooq</groupId><artifactId>jooq-codegen</artifactId><version>3.11.5</version><exclusions><exclusion><groupId>org.jooq</groupId><artifactId>jooq-meta</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.jooq</groupId><artifactId>jooq-meta</artifactId><version>3.11.5</version>
</dependency>

注意: jooq-codegen:3.11.5又依赖了jooq-meta,但是其自动下载的版本却是3.14.5,会在运行代码生成器的时候,报错缺少一个类,所以上文中手动引用指定版本的jooq-meta。

代码生成

import org.jooq.codegen.GenerationTool;
import org.jooq.meta.jaxb.Configuration;
import org.jooq.meta.jaxb.Database;
import org.jooq.meta.jaxb.Generator;
import org.jooq.meta.jaxb.Jdbc;
import org.jooq.meta.jaxb.Target;
import org.junit.jupiter.api.Test;
/*** @author daxue0929* @date 2023/3/11*/
public class GenerateCode {@Testpublic void generate() throws Exception {Configuration configuration = new Configuration().withJdbc(new Jdbc().withDriver("org.postgresql.Driver").withUrl("jdbc:postgresql://localhost:5432/app_config?useJDBCCompliantTimezoneShift=true&amp;serverTimezone=UTC&amp;useSSL=false").withUser("postgres").withPassword("123456")).withGenerator(new Generator().withDatabase(new Database().withName("org.jooq.meta.postgres.PostgresDatabase").withIncludes("config").withExcludes("").withIncludePrimaryKeys(true).withInputSchema("public")).withTarget(new Target().withPackageName("com.daxue.configtest.config.repository.dao").withDirectory("src/main/java").withClean(false)));GenerationTool.generate(configuration);}
}

如果运行成功将会在相应的包下生成代码。其中注意的是: 因为withDirectory()指定的是相对路径,所以一定要注意测试类运行的工作目录是哪里,一定要检查Working directory参数。

代码测试

到这里我们已经生成了代码,但是想要运行生成的测试代码,但是不要忘了应为我们启动的是spring boot环境,所以还需要配置spring boot连接数据库的 application.yml 如下参考:

server:port: 8089
spring:application:name: config-testdatasource:driver-class-name: org.postgresql.Driverurl: jdbc:postgresql://localhost:5432/app_config?useJDBCCompliantTimezoneShift=true&amp;serverTimezone=UTC&amp;useSSL=falseusername: postgrespassword: 123456

同样因为我们用的是spring boot想要建立测试类,一定要注意@SpringBootTes注解的测试类,它的包名一定要和启动类,也就是@SpringBootApplication的包名一致,这样才能自动扫描到bean。
在测试类中我们可以直接属性注入DSLContext类的单例bean。

package com.daxue.configtest;import com.daxue.configtest.config.repository.dao.tables.records.ConfigRecord;
import org.jooq.DSLContext;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static com.daxue.configtest.config.repository.dao.Tables.CONFIG;/*** @author daxue0929* @date 2023/3/12*/
@SpringBootTest
public class ConfigTestApplicationTest {@Autowiredpublic DSLContext context;@Testpublic void context() {ConfigRecord configRecord = context.selectFrom(CONFIG).where(CONFIG.ID.eq("1")).fetchOne();System.out.println(configRecord.getName());}
}

jooq入门篇环境搭建到此结束,程序测试结果符合预期,下一篇再介绍DSLContext相关api的用法。
插一句: 公司项目中数据存取层是对DSLContext相关的api的再次封装。


❤️ 博主笔力尚浅,文中记录有疏漏之处还请流言指正,不胜感激。❤️ 谢谢大家。❤️

jooq从入门到精通(一)相关推荐

  1. java从入门到精通_想要开始学java?你要的java从入门到精通布列如下!

    java从入门到精通,让我来告诉你! 毫无疑问,java是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握java看似是一件十分困难的事.其实,只要掌握了科学的学习方法 ...

  2. 虚幻引擎5(UE5)实时VFX游戏特效制作入门到精通

    UE5 Niagara学习教程  课程获取:虚幻引擎5(UE5)实时VFX游戏特效制作入门到精通-云桥网 你会学到什么 我将通过创建各种各样的实时效果来教你虚幻引擎中强大的粒子系统. 我们将从简单的基 ...

  3. Revit:从入门到精通学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确) |大小:8.07 GB |时长:12h 16m Re ...

  4. 《Java 开发从入门到精通》—— 2.2 编写第一段Java程序

    本节书摘来异步社区<Java 开发从入门到精通>一书中的第2章,第2.2节,作者: 扶松柏 , 陈小玉,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 编 ...

  5. meteor从入门到精通_我已经大规模运行Meteor一年了。 这就是我所学到的。

    meteor从入门到精通 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 我已经大规模运行Meteor一年了. 这就是我所学到的. (I've been runni ...

  6. Java学习从入门到精通的学习建议

    想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...

  7. ASP网络编程从入门到精通 下载

    <ASP网络编程从入门到精通> 清华大学出版社 特点: 面向ASP零基础读者,循序渐进 全面分析ASP技术细节 用代码描述个个知识点,操作性强 通过典型模块设计,体会ASP的奥妙 通过网上 ...

  8. 【组队学习】【28期】数据采集从入门到精通

    数据采集从入门到精通 论坛版块: http://datawhale.club/c/team-learning/38-category/38 开源内容: https://github.com/dataw ...

  9. MAT入门到精通(二)

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 阅读本文大概需要6分钟. 上一篇文章MAT入门到精通(一)介绍了MAT的使用场景和基本概念,这篇文 ...

最新文章

  1. python随机读取字符_python 怎样随机生成中文字符?
  2. 多线程调用同一个方法,局部变量会共享吗
  3. 以太网RJ45 接线标准 线序(备忘)
  4. mysql数据库的备份和二进制日志恢复
  5. 前端学习(2886):如何短时间内实现v-for 组件化设计方案
  6. 前端学习(1568):封装一个面包屑导航
  7. Javascript ES6 Promise异步链式读取文件解决回调地狱
  8. 面经个人向(算法岗)
  9. Win7平台上通过QQ查询对方IP地址
  10. 一个高难度的 Java 3D 智力游戏,立方四子棋
  11. oracle数据库怎么切换实例,oracle切换数据库实例
  12. Tecplot 自定义色谱颜色
  13. java实现斜水印铺满整张图
  14. WSUS 3.0 的部署
  15. nest 模拟器_如何将Nest Thermostat用作运动探测器
  16. pythontrun什么意思_python 新手笔记一
  17. 什么叫单模光纤_单模光纤和多模光纤有什么区别
  18. 将iPhone短信完整迁移到安卓系统上的方法
  19. 关于产品的一些思考——阿里巴巴之阿里旺旺
  20. C++创建windows窗口

热门文章

  1. 最新|神秘的互联网大厂薪资和职级!
  2. 实现strncmp()函数
  3. 笔记 | 笨方法学Python
  4. QQRobot一款基于Java的娱乐qq机器人
  5. 安卓虚拟键盘_0202年了,苹果IOS和安卓系统的差距还大吗?
  6. [力扣c语言实现]207. 课程表(拓扑排序)
  7. css(六)--css高级技巧
  8. MPLS基本部署实验解析(静态LSP与动态LSP)
  9. IOS下载资源zip到本地然后读取
  10. 身份证实名认证-身份实名认证-身份证核验