当今企业级开发中,几乎都会用到orm框架,有全自动的orm框架hibernate,也有半自动的orm框架mybatis,还有springboot推荐使用的jpa,作者本人个偏向于mybatis框架(写原生sql真的很爽啊!!!),但是在高并发的场景下,不推荐在sql语句中使用关联查询,更倾向于单张表表冗余查询,在代码中使用stream操作,当然这是题外话。前几天逛论坛意外发现一篇标题为《抛弃mybatis,拥抱jooq》的文章,jooq是什么?随后撸了一遍官网:jooq官网链接

在learn模块中,我们可以看到介绍,入门学习只需要7步骤:

Getting started with the tutorial
Your simplest entry point is probably to get the tutorial running. It shows how to use jOOQ and its code generator with a simple MySQL database
Preparation: Download jOOQ and your SQL driver
Step 1: Create a SQL database and a table
Step 2: Generate classes
Step 3: Write a main class and establish a MySQL connection
Step 4: Write a query using jOOQ's DSL
Step 5: Iterate over results
Step 6: Explore!

好吧,一步步来实现吧!!!

step1:Download jOOQ and your SQL driver

准备所需要的jar包。这里使用的是免费的版本

<dependency><groupId>org.jooq</groupId><artifactId>jooq</artifactId><version>3.12.3</version>
</dependency>
<dependency><groupId>org.jooq</groupId><artifactId>jooq-meta</artifactId><version>3.12.3</version>
</dependency>
<dependency><groupId>org.jooq</groupId><artifactId>jooq-codegen</artifactId><version>3.12.3</version>
</dependency>

jooq模块是jooq的核心jar包。
jooq-meta模块是jooq的元数据包,里面提供了不同类型数据库的元数据。
jooq-codegen模块是自动生成代码所需要的包,可以指定生成的目标代码的包名以及存放位置等信息。

既然要链接数据库,当然少不了sql的driver包

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version></dependency>

step2:Create a SQL database and a table

创建数据库,以及新建一张表

CREATE DATABASE `library`;USE `library`;CREATE TABLE `author` (`id` int NOT NULL,`first_name` varchar(255) DEFAULT NULL,`last_name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
);

step3:Code generation

在resource文件中,我们创建library.xml文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.12.0.xsd"><!-- 数据库连接配置 --><jdbc><driver>com.mysql.jdbc.Driver</driver><url>jdbc:mysql://localhost:3306/library</url><user>root</user><password>19950617</password></jdbc><generator><!--jooq是基于java的,这里代表自动生成代码de1ed风格,有-org.jooq.codegen.JavaGenerator-org.jooq.codegen.ScalaGenerator默认是java风格--><name>org.jooq.codegen.JavaGenerator</name><database><!--指定数据库类型,有mysql,h2,postgres,sqlite...但是不支持oracle--><name>org.jooq.meta.mysql.MySQLDatabase</name><!--指定连接的数据库--><inputSchema>library</inputSchema><includes>.*</includes><excludes></excludes></database><target><!--  自动生成代码存放的目标包名--><packageName>test.generated</packageName><!--  自动生成代码存放的路径--><directory>/Users/fengyue/IdeaProjects/jooq/src/main/java</directory></target></generator>
</configuration>

注:
com.mysql.jdbc.Driver 是 mysql-connector-java 5中的,
com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6中的
官网使用的是com.mysql.cj.jdbc.Driver,这个根据driver包的版本确定。

官网说将jooq,jooq-meta,jooq-codegen,mysql-connector-java这4个jar包跟library.xml存放与同一目录下。执行命令:

windows:

java -classpath jooq-3.12.3.jar;^
jooq-meta-3.12.3.jar;^
jooq-codegen-3.12.3.jar;^
mysql-connector-java-5.1.18-bin.jar;. ^
org.jooq.codegen.GenerationTool library.xml

Mac/liunx

java -classpath jooq-3.12.3.jar:\
jooq-meta-3.12.3.jar:\
jooq-codegen-3.12.3.jar:\
mysql-connector-java-5.1.18-bin.jar:. \
org.jooq.codegen.GenerationTool library.xml

运行之后会发现,还缺少一个jar。

Exception in thread "main" java.lang.NoClassDefFoundError: org/reactivestreams/Publisherat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:763)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)at java.net.URLClassLoader.access$100(URLClassLoader.java:73)at java.net.URLClassLoader$1.run(URLClassLoader.java:368)at java.net.URLClassLoader$1.run(URLClassLoader.java:362)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:361)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at org.jooq.impl.DSL.using(DSL.java:601)at org.jooq.meta.mysql.MySQLDatabase.create0(MySQLDatabase.java:530)at org.jooq.meta.AbstractDatabase.create(AbstractDatabase.java:260)at org.jooq.meta.AbstractDatabase.create(AbstractDatabase.java:249)at org.jooq.meta.AbstractDatabase.setConnection(AbstractDatabase.java:239)at org.jooq.codegen.GenerationTool.run0(GenerationTool.java:501)at org.jooq.codegen.GenerationTool.run(GenerationTool.java:221)at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:216)at org.jooq.codegen.GenerationTool.main(GenerationTool.java:188)
Caused by: java.lang.ClassNotFoundException: org.reactivestreams.Publisherat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 21 more

好吧,我也不懂为什么,我也不敢问啊,缺什么补什么吧…

<dependency><groupId>org.reactivestreams</groupId><artifactId>reactive-streams</artifactId><version>1.0.2</version>
</dependency>

下载reactive-streams包,放在同级目录中执行命令:
java -classpath reactive-streams-1.0.2.jar:jooq-3.12.3.jar:jooq-meta-3.12.3.jar:jooq-codegen-3.12.3.jar:mysql-connector-java-5.1.26.jar:. org.jooq.codegen.GenerationTool library.xml
会自动生成该目录结构:

好吧,代码生成好了。进入下一步…

Step 4: Connect to your database

// For convenience, always static import your generated tables and jOOQ functions to decrease verbosity:
import static test.generated.Tables.*;
import static org.jooq.impl.DSL.*;import java.sql.*;public class Main {public static void main(String[] args) {String userName = "root";String password = "";String url = "jdbc:mysql://localhost:3306/library";// Connection is the only JDBC resource that we need// PreparedStatement and ResultSet are handled by jOOQ, internallytry (Connection conn = DriverManager.getConnection(url, userName, password)) {// ...} // For the sake of this tutorial, let's keep exception handling simplecatch (Exception e) {e.printStackTrace();}}
}

这里主要是获取数据库connection。

Step 5: Querying

简单介绍如何使用jooq查询数据,当然还有更多的api等待解锁:

DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
Result<Record> result = create.select().from(AUTHOR).fetch();

Step 6: Iterating

for (Record r : result) {Integer id = r.getValue(AUTHOR.ID);String firstName = r.getValue(AUTHOR.FIRST_NAME);String lastName = r.getValue(AUTHOR.LAST_NAME);System.out.println("ID: " + id + " first name: " + firstName + " last name: " + lastName);
}

完整代码:

package test;// For convenience, always static import your generated tables and
// jOOQ functions to decrease verbosity:
import static test.generated.Tables.*;
import static org.jooq.impl.DSL.*;import java.sql.*;import org.jooq.*;
import org.jooq.impl.*;public class Main {/*** @param args*/public static void main(String[] args) {String userName = "root";String password = "";String url = "jdbc:mysql://localhost:3306/library";// Connection is the only JDBC resource that we need// PreparedStatement and ResultSet are handled by jOOQ, internallytry (Connection conn = DriverManager.getConnection(url, userName, password)) {DSLContext create = DSL.using(conn, SQLDialect.MYSQL);Result<Record> result = create.select().from(AUTHOR).fetch();for (Record r : result) {Integer id = r.getValue(AUTHOR.ID);String firstName = r.getValue(AUTHOR.FIRST_NAME);String lastName = r.getValue(AUTHOR.LAST_NAME);System.out.println("ID: " + id + " first name: " + firstName + " last name: " + lastName);}} // For the sake of this tutorial, let's keep exception handling simplecatch (Exception e) {e.printStackTrace();}}
}

Step 7: Explore!

最后贴了一些参考文档,使用手册的地址:
http://www.jooq.org/learn
http://www.jooq.org/javadoc/latest/
https://groups.google.com/forum/#!forum/jooq-user
http://ikaisays.com/2011/11/01/getting-started-with-jooq-a-tutorial/

下次介绍springboot整合jooq…结束!

轻量级ORM框架---JOOQ相关推荐

  1. .NET轻量级ORM框架Dapper入门精通

    一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...

  2. c# 轻量级ORM框架 实现(一)

    c# 轻量级ORM框架 实现(一) 2018年09月04日 14:11:02 IT哈 阅读数:1245 发布一个自己写的一个轻量级ORM框架,本框架设计期初基于三层架构.所以从命名上来看,了解三层的朋 ...

  3. 重磅开源:基于.NET 6.0 自研轻量级ORM框架

    Fast Framework 项目:https://gitee.com/China-Mr-zhong/Fast.Framework 一.前言 1.为了实现快速开发,省去编写大量Sql时间,更好的面向对 ...

  4. 轻量级ORM框架 Bankinate

    [前言] 前面讲过ORM的前世今生,对ORM框架不了解的朋友可以参考博文:https://www.cnblogs.com/7tiny/p/9551754.html 今天,我们主要通过设计一款轻量级的O ...

  5. Python轻量级ORM框架——peewee

    这里写目录标题 Python中常用的ORM框架 peewee使用经验 从数据库中导出模型 查询 统计类查询 优化子查询 参考文章 Python中常用的ORM框架 SQLALchemy:重量级框架,适合 ...

  6. c#自己封装一个轻量级ORM框架FastORM

    在日常进行数据库操作的过程中,我的数据层使用的是微软企业库,但对于多字段的数据的插入与更新时写sql语句就会显得特别费时间,还会经常出现错误耗费时间排查,所以决定基于微软企业库封装一个轻量级的ORM框 ...

  7. Python的轻量级ORM框架peewee

    作者:小小明 在前面的<改变python对象的黑魔法metaclass>一文中,我介绍了使用metaclass自己编写ORM框架的思路. 地址:https://blog.csdn.net/ ...

  8. ORM框架---JOOQ简单介绍

    一,什么是JOOQ 继Hibernate Mybatis 之后的又一ORM框架 二,特点 1.get back in control of your sql 2.DSL(Domain Specific ...

  9. dapperpoco mysql_Dapper一个和petapoco差不多的轻量级ORM框架

    我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...

最新文章

  1. idea 连接 mysql_IDEA 与MySQL连接问题
  2. 列表渲染 wx:key 的作用、条件渲染 wx:if 与 hidden 的区别
  3. 开发转运维有什么好点的理由_企业微信SCRM哪家好点?
  4. 电脑壁纸励志_励志文案丨关于学习的文案,大家加油!
  5. ZeroClipboard的时代或许已经过去了
  6. 008. 限制上传文件的大小
  7. 使用Express和MongoDB构建简单的CRUD应用程序
  8. php 上传文件 例子,php上传文件实例
  9. 字节跳动高伟豪:端到端深度召回算法
  10. 《重构-改善既有代码的设计》学习笔记----Extract Method(提炼函数)
  11. java if case when_【SQL学习笔记4】case when 和if的用法
  12. 树莓派监测CPU温度
  13. java孙正英_JavaSE23-函数式接口Stream流
  14. word表格分开快捷键_在Word2010表格的编辑中,快速的拆分表格应按()快捷键。
  15. 网站怎么备案?如何快速通过网站备案?网站快速备案攻略请查收!
  16. 入门交互设计的4个步骤
  17. Python创建使用虚拟环境
  18. 腾讯云「邮件证书」重磅发布!从此告别邮件安全漏洞
  19. super关键字什么时候使用?super的适用场景是?
  20. 微信H5页面,返回上一页面后页面不会自动刷新

热门文章

  1. safari浏览器如何打开开发者工具
  2. 卡方检验、T检验+F检验、方差分析、Z检验
  3. 什么?还能在网站上藏一个老婆?(怎么在给个人博客或者网站添加基于Live2D的动漫模型)
  4. C语言将原始信息逆序,C语言及逆向2020知到章节期末答案
  5. layabox:小技巧及注意事项汇总(不定时更新)
  6. 年轻即出发,不负春光,野蛮生长
  7. 不读书、不吃苦,你要青春干嘛
  8. vue移动端和pc端切换显示两套不同的代码
  9. 一文速览 Go 语法(长文预警)
  10. 【贪心算法】最小能量消耗