jOOQ,H2和Maven入门

本文是我们学院课程的一部分,标题为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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlserver迁移数据到mysql_SQLServer数据库之将ABP的数据库从SQLSERVER迁移到MySql

本文主要向大家介绍了SQLServer数据库之将ABP的数据库从SQLSERVER迁移到MySql&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习SQLServer数据库有所帮助。安装MySql.Data.Entity然后你需要安装 MySql.Data.Entity和 MySql.Data 到你的 .EntityFramework 和 .We…

查询SQL中某表里有多少列包含某字段

select c.namefrom SYSCOLUMNS as c left join SYSOBJECTS as t on c.idt.id where c.name like 这里是某个字段% and t.name这里是表名 转载于:https://www.cnblogs.com/qiywtc/p/3719087.html

php与mysql连接程序_PHP与Mysql连接

首先请确保LAMP环境完全配置成功&#xff0c;否则请猛击我&#xff01;然后通过mysql的密码登陆到phpMyAdmin&#xff0c;在浏览器中输入http://127.0.0.1/phpMyAdmin登陆后就像是这样&#xff1a;首先我们来创建一个用于测试的数据库。偷懒的话直接在phpMyAdmin中创建就可以了…

java自动gc_具有Java 7中自动资源管理功能的GC

java自动gc这篇文章简要概述了Java 7中引入的称为自动资源管理或ARM的新功能。 文章探讨了ARM如何减少开发人员为有效释放分配的资源的JVM堆而必须编写的代码。 Java编程语言中编程的最甜蜜之处之一是对象取消分配的自动处理。 在Java世界中&#xff0c;这通常被称为垃圾收集。…

ASP.NET 程序优化

一、SqlDataRead和Dataset的选择 Sqldataread优点&#xff1a;读取数据非常快。如果对返回的数据不需做大量处理的情况下&#xff0c;建议使用SqlDataReader&#xff0c;其性能要比datset好很多。缺点&#xff1a;直到数据读完才可close掉于数据库的连接 (SqlDataReader 读数据…

python pandas excel数据处理_Python处理Excel数据-pandas篇

Python处理Excel数据-pandas篇非常适用于大量数据的拼接、清洗、筛选及分析在计算机编程中&#xff0c;pandas是Python编程语言的用于数据操纵和分析的软件库。特别是&#xff0c;它提供操纵数值表格和时间序列的数据结构和运算操作。它的名字衍生自术语“面板数据”(panel dat…

Proe Top-Down设计演示

前段时间有网友问我&#xff0c;proe 里面有没有装配设计中当某一零件尺寸需要修改时&#xff0c; 与其相关的零件尺寸都需要随之做相应改变的法子。我认为top-down是很好的选择。 下面介绍一下top-down的理论&#xff1a; 就按照产品的功能要求先定义产品架构并考虑组件与零件…

spring和maven_具有Spring和Maven教程的JAX–WS

spring和mavenSpring框架通过JAX-WS提供对Web服务的远程支持&#xff0c;实际上&#xff0c;如Spring 参考文档中所述 &#xff0c;有三种将Spring POJO服务公开为JAX-WS Web服务的方式&#xff1a; 公开基于Servlet的Web服务&#xff08;适用于Java EE 5环境&#xff09; 导…

python映射实体类_【HIBERNATE框架开发之二】第一个HIBERNATE-ANNONATION项目(采用@ENTITY、@ID直接映射实体类)...

紧接上一篇&#xff0c;这里Himi直接copy上一篇创建的HelloHibernate项目&#xff0c;然后改名为&#xff1a;HelloAnnonation,Ok&#xff1b;OK&#xff0c;准备工作&#xff1a;首先第一步&#xff0c;继续再我们自定义的user libraries 中添加Annotation所需的包&#xff0c…

Union-SQL Server学习笔记

1、简单笔记 数据库查询语句中&#xff0c;通过UNION组合查询语句&#xff0c;可以将两个或更多查询的结果组合为单个结果集&#xff0c;该结果集包含组合查询中的所有查询的全部行。 利用UNION语句可以实现将不同数据表中符合条件&#xff0c;不同列种的数据信息&#xff0c;显…

从Java集成Active Directory

首先&#xff0c;您将需要设置Active Directory&#xff0c;以便可以运行和测试代码。 如果&#xff08;像我一样&#xff09;没有一台装有Windows Server的计算机&#xff0c;那么即使在Mac OSX上&#xff0c;也可以通过这种方法设置Active Directory。 您要做的第一件事是在…

编译 php mysql 依赖包_MySQL 5.5.15源码包编译安装

mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到cmake来进行编译了&#xff0c;编译的过程没有本质mysql果然是不愧是目前最火的数据库&#xff0c;自从mysql5.5.8之后&#xff0c;mysql的源码包编译安装都要用到c…

云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题

在发现云服务器读取OCS缓存的“黑色0.1秒”是发生在socket读取数据时&#xff0c;而且是发生在读取开始的字节&#xff0c;甚至在socket写数据时&#xff08;比如写入缓存key&#xff09;也会出现超过50ms的情况&#xff0c;我们的好奇心被激发到一个新的高度。 根据我们的实测…

Cobertura和Sonar 5.1的问题

最近&#xff0c;我有些麻烦&#xff0c;试图在我的Grails 2.4.4项目中使用Sonar 5.1。 我使用的是Groovy常用的东西&#xff1a; Gmetrics&#xff0c;Codenarc和Cobertura 。 对于Sonar数据库&#xff0c;我使用的是Postgres 9.4 。 声纳跑步者的日志文件给了我这个&#xf…

centos6.4 卸载mysql_彻底删除MYSQL-CENTOS

yum remove mysql mysql-server mysql-libs compat-mysql51rm -rf /var/lib/mysqlrm /etc/my.cnf查看是否还有mysql软件&#xff1a;rpm -qa|grep mysql有的话继续删除RPM方式安装MySQL5.6a. 检查MySQL及相关RPM包&#xff0c;是否安装&#xff0c;如果有安装&#xff0c;则移除…

ARIMA模型建模步骤

ARIMA模型建模步骤一. 绘制时序图判断序列是否有明显的趋势或周期二. 单位根检验检验方法ADFDFGLSPPKPSSERSNP前三种有有关常数与趋势项假设&#xff0c;应用不方便&#xff0c;建议少用。后三种是去除原序列趋势后进行检验&#xff0c;应用方便。原假设6种方法除KPPS外&#x…

WT2605C音频蓝牙语音芯片:单芯片实现蓝牙+MP3+BLE+电话本多功能应用

在当今的电子产品领域&#xff0c;多功能、高集成度成为了一种趋势。各种产品都需要具备多种功能&#xff0c;以满足用户多样化的需求。针对这一市场趋势&#xff0c;唯创知音推出了一款集成了蓝牙、MP3播放、BLE和电话本功能的音频蓝牙语音芯片——WT2605C&#xff0c;实现了单…

rabbitmq订单模块_RabbitMQ播放模块! 构架

rabbitmq订单模块RabbitMQ提供了具有可预测且一致的吞吐量和延迟的高可用性&#xff0c;可伸缩和便携式消息传递系统。 RabbitMQ是AMQP &#xff08;业务消息传递的开放标准&#xff09;的领先实现 &#xff0c;并且通过适配器支持XMPP&#xff0c;SMTP&#xff0c;STOMP和HTTP…

mysql as join_mysql as 别名与 join 多表连接语法

在MySQL中&#xff0c;使用AS关键字为字段、表、视图取别名&#xff0c;或者不用as&#xff0c;用空格隔开&#xff1a;SELECT (SELECT id a,title b FROM blog c limit 1)d;使用字段别名&#xff0c;可以帮助我们有效的组织查询的输出结果。---------------------------------…

'固定' table宽度,走起!

为了让表格能够填充屏幕(剩余空白区域)&#xff0c;常将其宽度属性定义为&#xff1a;100%&#xff0c;单元格也是用百分数来定义。 但这样就会出现问题&#xff1a; 如果单元格中的文本超过宽度限制&#xff0c;就会自动换行&#xff0c;高度自动增高&#xff0c;导致整个表格…