jooq 入门

本文是我们学院课程“ jOOQ –类型安全数据库查询”的一部分 。

在SQL和特定关系数据库很重要的Java应用程序中,jOOQ是一个不错的选择。 当JPA / Hibernate抽象过多而JDBC过于抽象时,这是一种替代方法。 它显示了一种现代的领域特定语言如何可以极大地提高开发人员的生产率,从而将SQL内部化为Java。

在本课程中,我们将看到如何使用jOOQ有效地查询数据库。 在这里查看 !

目录

1.课程项目的设置 2. H2数据库示例 3.代码生成器

1.课程项目的设置

在本部分中,我们将学习如何正确设置课程项目,您可以从以下网站获取该项目: https : //github.com/jOOQ/jOOQ/tree/master/jOOQ-examples/jOOQ-academy 。

为了直接从GitHub运行本课程的示例,您需要安装:

  • Git( http://git-scm.com )
  • Maven( http://maven.apache.org )
  • Java 8( http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html )

如果您已经安装了自己喜欢的IDE(例如Eclipse,IntelliJ或NetBeans),则可以轻松地直接从GitHub导入jOOQ Academy Maven项目。 安装数据库和运行jOOQ代码生成器所需要做的就是调用:

mvn clean install

2. H2数据库示例

整个课程将针对简单的H2示例数据库运行查询,该数据库的源代码可从此处获取: https : //github.com/jOOQ/jOOQ/blob/master/jOOQ-examples/jOOQ-academy/src/main/资源/db-h2.sql

您无需手动安装任何东西。 使用Maven构建jOOQ Academy Maven项目时,将自动安装示例数据库。 作为参考,我们将在此处复制数据库:

DROP TABLE IF EXISTS book_to_book_store
;
DROP TABLE IF EXISTS book_store
;
DROP TABLE IF EXISTS book
;
DROP TABLE IF EXISTS author
;DROP SEQUENCE IF EXISTS s_author_id
;
CREATE SEQUENCE s_author_id START WITH 1
;CREATE TABLE author (id INT NOT NULL,first_name VARCHAR(50),last_name VARCHAR(50) NOT NULL,date_of_birth DATE,CONSTRAINT pk_t_author PRIMARY KEY (ID)
)
;CREATE TABLE book (id INT NOT NULL,author_id INT NOT NULL,title VARCHAR(400) NOT NULL,published_in INT,rec_timestamp TIMESTAMP,CONSTRAINT pk_t_book PRIMARY KEY (id),CONSTRAINT fk_t_book_author_id FOREIGN KEY (author_id) REFERENCES author(id),
)
;CREATE TABLE book_store (name VARCHAR(400) NOT NULL,CONSTRAINT uk_t_book_store_name PRIMARY KEY(name)
)
;CREATE TABLE book_to_book_store (book_store_name VARCHAR(400) NOT NULL,book_id INTEGER NOT NULL,stock INTEGER,CONSTRAINT pk_b2bs PRIMARY KEY(book_store_name, book_id),CONSTRAINT fk_b2bs_bs_name FOREIGN KEY (book_store_name)REFERENCES book_store (name)ON DELETE CASCADE,CONSTRAINT fk_b2bs_b_id    FOREIGN KEY (book_id)REFERENCES book (id)ON DELETE CASCADE
)
;INSERT INTO author VALUES (next value for s_author_id, 'George', 'Orwell', '1903-06-25')
;
INSERT INTO author VALUES (next value for s_author_id, 'Paulo', 'Coelho', '1947-08-24')
;INSERT INTO book VALUES (1, 1, '1984'        , 1948, null)
;
INSERT INTO book VALUES (2, 1, 'Animal Farm' , 1945, null)
;
INSERT INTO book VALUES (3, 2, 'O Alquimista', 1988, null)
;
INSERT INTO book VALUES (4, 2, 'Brida'       , 1990, null)
;INSERT INTO book_store (name) VALUES('Amazon'),('Barnes and Noble'),('Payot')
;INSERT INTO book_to_book_store VALUES('Amazon', 1, 10),('Amazon', 2, 10),('Amazon', 3, 10),('Barnes and Noble', 1, 1),('Barnes and Noble', 3, 2),('Payot', 3, 1)
;DROP ALIAS IF EXISTS count_books
;CREATE OR REPLACE ALIAS count_books AS $$
int countBooks(Connection c, int authorID) throws SQLException {try (PreparedStatement s = c.prepareStatement("SELECT COUNT(*) FROM book WHERE author_id = ?")) {s.setInt(1, authorID);try (ResultSet rs = s.executeQuery()) {rs.next();return rs.getInt(1);}}
}
$$
;

如您所见,我们正在使用非常常见SQL功能:

  • 具有主键和外键的表
  • ID生成的顺序
  • 储存程序

3.代码生成器

jOOQ从您的数据库元信息生成Java代码。 这意味着上述架构将为上述每个表生成类,如下所示:

持有对所有表的静态引用的类

public class Tables {public static final Author          AUTHOR             = // [...]public static final Book            BOOK               = // [...]public static final BookStore       BOOK_STORE         = // [...]public static final BookToBookStore BOOK_TO_BOOK_STORE = // [...]
}

每个表都有对其所有列的引用

public class Author extends TableImpl<AuthorRecord> {public final TableField<AuthorRecord, Integer>   ID            = // [...]public final TableField<AuthorRecord, String>    FIRST_NAME    = // [...]public final TableField<AuthorRecord, String>    LAST_NAME     = // [...]public final TableField<AuthorRecord, Timestamp> DATE_OF_BIRTH = // [...]
}

这些是最重要的人工制品。 稍后,我们将研究生成的记录,POJO,DAO以及序列和存储过程的生成对象。

翻译自: https://www.javacodegeeks.com/2015/09/getting-started-with-jooq-h2-and-maven.html

jooq 入门

jooq 入门_jOOQ,H2和Maven入门相关推荐

  1. jOOQ,H2和Maven入门

    本文是我们学院课程的一部分,标题为jOOQ –类型安全的数据库查询 . 在SQL和特定关系数据库很重要的Java应用程序中,jOOQ是一个不错的选择. 当JPA / Hibernate抽象过多,JDB ...

  2. Maven入门指南⑦:Maven的生命周期和插件

    Maven入门指南⑦:Maven的生命周期和插件 一个完整的项目构建过程通常包括清理.编译.测试.打包.集成测试.验证.部署等步骤,Maven从中抽取了一套完善的.易扩展的生命周期.Maven的生命周 ...

  3. Maven学习总结(一)——Maven入门

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(一)--Maven入门 一.Maven的基本概念 Maven(翻译为"专家",&quo ...

  4. Maven学习(一)——Maven入门

    为什么80%的码农都做不了架构师?>>>    一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服 ...

  5. Maven入门指南(一)

    原文链接  译文链接  译者:nkcoder  校对:方腾飞 Maven介绍: Maven是一个强大的Java项目构建工具.当然,你也可以使用其它工具来构建项目,但由于Maven是用Java开发的,因 ...

  6. Maven入门极简使用教程

    Maven入门级别使用 回顾 拦截器 统一异常处理 ​ 实现接口的方式. ​ 注解方式.(分享) ​ 如果是ajax请求,会将异常信息发送到客户端的响应中. 复习spring springmvc SS ...

  7. Maven 入门 (1)—— 安装

    Maven 入门 (1)-- 安装 http://blog.csdn.net/kakashi8841/article/details/17371837 1.下载maven安装包 http://mave ...

  8. Maven入门详解以及Eclisp的集成

    1.首先要安装Maven到操作系统上 Maven的下载页面:http://maven.apache.org/download.html Maven跟Tomcat很像,下载下来后直接解压在指定的目录就安 ...

  9. Hibernate基于Maven入门实例,与MyBatis比对

    此篇承接上一篇: MyBatis基于Maven入门实例 准备部分 1. 进入http://mvnrepository.com/ , 搜索 Hibernate ORM, 找到相应的版本后, 可以看到配置 ...

最新文章

  1. 点云配准 PointNet + Concat + FC
  2. TypeScript VS JavaScript 深度对比
  3. 重构-改善既有代码的设计:对象之间移动特性的八种方法(五)
  4. 华为2013校园招聘上机笔试题
  5. 初识 RESTful API规范
  6. Java批量生成数据库测试数据
  7. 火狐插件火狐***插件将Firefox变成***工具的七个插件
  8. 浙江电信网上营业厅的一个BUG(有更新)
  9. 如何修改Git仓库的URL(地址)
  10. C# DataTable 用法简介
  11. html编写在线打字通,金山打字在线练习版 怎么修改金山打字通打字速度?
  12. 实现elementUI多语言切换
  13. RTL8153B ,瑞昱千兆网卡芯片 ,扩展坞HUB千兆网口芯片。
  14. Qt MDI及其使用方法
  15. lua菜鸟教程_lua经典学习教程.pdf
  16. 个人网站搭建及IIS部署(2019/3/11)个人心得分享
  17. 平价好用的真无线蓝牙耳机,这五款入门首选超划算
  18. 【RPA之家转载】智能RPA平台Ikigai获1300万美元种子轮融资,初创团队来自麻省理工
  19. P1489 猫狗大战
  20. iOS 苹果所有设备的系统、屏幕尺寸和像素

热门文章

  1. jzoj3801-[NOIP2014模拟8.23]骰子【数学期望】
  2. nssl1232-函数【数论,欧拉函数,莫比乌斯反演】
  3. 【模拟】【递归】解压字符串(jzoj 1519)
  4. 汇编语言(二十一)之数值交换与自增
  5. jQuery中position()与offset()区别
  6. 【双11劲爆干货】阿里高级Java面试题(首发,70道)
  7. 史上最全 BAT 大厂面试题整理
  8. 从0部署一个动态网站
  9. java人脸识别更新:摄像头支持360、火狐和谷歌浏览器
  10. mysql---批量插入数据:100w条数据