日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[jOOQ中文] 七个步骤快速入门

發布時間:2024/3/24 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [jOOQ中文] 七个步骤快速入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://segmentfault.com/a/1190000010415384


關于jOOQ

jOOQ: The easiest way to write SQL in Java

jOOQ是一個基于Java編寫SQL的工具包,具有:簡單、輕量、函數式編程寫SQL等獨特優勢,非常適合敏捷快速迭代開發。

初見jOOQ

使用jOOQ,SQL看起來好像是由Java原生支持的,保留SQL原有的簡單。

SQL語句:

SELECT AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, COUNT(*)FROM AUTHORJOIN BOOK ON AUTHOR.ID = BOOK.AUTHOR_IDWHERE BOOK.LANGUAGE = 'DE'AND BOOK.PUBLISHED > DATE '2008-01-01' GROUP BY AUTHOR.FIRST_NAME, AUTHOR.LAST_NAMEHAVING COUNT(*) > 5 ORDER BY AUTHOR.LAST_NAME ASC NULLS FIRSTLIMIT 2OFFSET 1

Java代碼:

create.select(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, count()).from(AUTHOR).join(BOOK).on(AUTHOR.ID.equal(BOOK.AUTHOR_ID)).where(BOOK.LANGUAGE.eq("DE")).and(BOOK.PUBLISHED.gt(date("2008-01-01"))).groupBy(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME).having(count().gt(5)).orderBy(AUTHOR.LAST_NAME.asc().nullsFirst()).limit(2).offset(1)

一、準備

如果還沒有下載,請下載jOOQ:
http://www.jooq.org/download
或者,可是使用Maven:

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

二、創建數據庫

我們要創建一個名為library的數據庫,和一個author表,在表中插入zhang3,li4數據。

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`) );INSERT INTO `author` (`id`, `first_name`, `last_name`) VALUES ('1', '3', 'zhang'), ('2', '4', 'li');

三、代碼生成

在這一步中,我們將使用jOOQ的命令行工具生成映射到author表的Java類。
有關jOOQ代碼生成器的更詳細信息,請參見:
jOOQ manual pages about setting up the code generator
代碼生成的最簡單的方法是將jOOQ的3個jar文件和MySQL Connector jar文件復制到一個臨時目錄(本示例中目錄是test-generated), 然后創建一個如下所示的library.xml(名字隨意修改):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.9.2.xsd"><!-- Configure the database connection here --><jdbc><driver>com.mysql.jdbc.Driver</driver><!-- 數據庫url --><url>jdbc:mysql://localhost:3306/library?useUnicode=true&amp;characterEncoding=UTF-8</url><!-- 數據庫賬號 --><user>root</user><!-- 數據庫賬號密碼 --><password>123456</password></jdbc><generator><!-- The default code generator. You can override this one, to generate your own code style.Supported generators:- org.jooq.util.JavaGenerator- org.jooq.util.ScalaGeneratorDefaults to org.jooq.util.JavaGenerator --><name>org.jooq.util.JavaGenerator</name><database><!-- The database type. The format here is:org.util.[database].[database]Database --><name>org.jooq.util.mysql.MySQLDatabase</name><!-- The database schema (or in the absence of schema support, in your RDBMS thiscan be the owner, user, database name) to be generated --><inputSchema>library</inputSchema><!-- All elements that are generated from your schema(A Java regular expression. Use the pipe to separate several expressions)Watch out for case-sensitivity. Depending on your database, this might be important! --><includes>.*</includes><!-- All elements that are excluded from your schema(A Java regular expression. Use the pipe to separate several expressions).Excludes match before includes, i.e. excludes have a higher priority --><excludes></excludes></database><target><!-- The destination package of your generated classes (within the destination directory) --><!-- 生成的包名,生成的類在此包下 --><packageName>test.generated</packageName><!-- The destination directory of your generated classes. Using Maven directory layout here --><!-- 輸出的目錄 --><directory>C:/workspace/jOOQ-User-Manual/jooq-tutorials-1/src/main/java</directory></target></generator> </configuration>

在Windows中,cd到test-generated目錄,執行以下命令:

注意jar包的版本號與您本地對應上,在這個例子中,jOOQ使用3.9.5,MySQL使用5.1.30。

java -classpath jooq-3.9.5.jar;jooq-meta-3.9.5.jar;jooq-codegen-3.9.5.jar;mysql-connector-java-5.1.30.jar; org.jooq.util.GenerationTool library.xml

UNIX / Linux / Mac中:

java -classpath jooq-3.9.5.jar:jooq-meta-3.9.5.jar:jooq-codegen-3.9.5.jar:mysql-connector-java-5.1.30.jar: org.jooq.util.GenerationTool library.xml

如果一切正常,您應該在控制臺輸出中看到這些信息:

七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: Initialising properties : library.xml 七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: No <inputCatalog/> was provided. Generating ALL available catalogs instead. 七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: License parameters 七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: Thank you for using jOOQ and jOOQ's code generator 七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: 七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: Database parameters 七月 30, 2017 1:12:51 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: dialect : MYSQL 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: URL : jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: target dir : C:/workspace/jOOQ-User-Manual/jooq-tutorials-1/src/main/java 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: target package : test.generated 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: includes : [.*] 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: excludes : [] 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: includeExcludeColumns : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: JavaGenerator parameters 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: strategy : class org.jooq.util.DefaultGeneratorStrategy 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: deprecated : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: generated annotation : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: JPA annotations : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: validation annotations : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: instance fields : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: sequences : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: udts : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: routines : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: tables : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: records : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: pojos : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: immutable pojos : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: interfaces : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: immutable interfaces : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: daos : false 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: relations : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: table-valued functions : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: global references : true 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generation remarks 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating catalogs : Total: 1 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ @@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@ @@ @@ @@@@@@@@@@ @@@@@@@@@@ @@@@ @@ @@ @@@@@@@@@@ @@@@@@@@@@ @@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@ @@@@@@@@@@ @@@@@@@@@@ @@ @@ @@@@ @@@@@@@@@@ @@@@@@@@@@ @@ @@ @@@@ @@@@@@@@@@ @@@@@@@@@@ @@ @ @ @@@@@@@@@@ @@@@@@@@@@ @@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Thank you for using jOOQ 3.9.5七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ARRAYs fetched : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Enums fetched : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Packages fetched : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Routines fetched : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Tables fetched : 1 (1 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: No schema version is applied for catalog . Regenerating. 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating catalog : DefaultCatalog.java 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ========================================================== 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating schemata : Total: 1 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: No schema version is applied for schema library. Regenerating. 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating schema : Library.java 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: ---------------------------------------------------------- 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Sequences fetched : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: UDTs fetched : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating tables 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Synthetic primary keys : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Overriding primary keys : 1 (0 included, 1 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating table : Author.java [input=author, output=author, pk=KEY_author_PRIMARY] 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Tables generated : Total: 819.168ms 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating table references 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Table refs generated : Total: 827.491ms, +8.323ms 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating Keys 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Keys generated : Total: 835.486ms, +7.995ms 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating table records 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generating record : AuthorRecord.java 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Table records generated : Total: 854.667ms, +19.18ms 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Domains fetched : 0 (0 included, 0 excluded) 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Generation finished: library: Total: 860.822ms, +6.155ms 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: 七月 30, 2017 1:12:52 下午 org.jooq.tools.JooqLogger info 信息: Removing excess files

四、連接到您的數據庫

我們在工程中編寫一個測試類Main.java:

package test.generated;import java.sql.Connection; import java.sql.DriverManager;/*** 測試類* Created by jan on 2017/7/30.*/ public class Main {public static void main(String[] args) {// 用戶名String userName = "root";// 密碼String password = "123456";// mysql連接urlString url = "jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8";// 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();}} }

這是一個標準的JDBC MySQL連接代碼。

五、查詢

我們使用jOOQ的DSL構建出一個簡單查詢:

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

傳入Connection連接對象、數據方言得到一個DSLContext的實例,然后使用DSL對象查詢得到一個Result對象。

注意:DSLContext不會主動關閉連接,需要我們手動關閉。

六、輸出結果

得到Result對象后,循環輸出結果集:

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.generated;import org.jooq.DSLContext; import org.jooq.Record; import org.jooq.Result; import org.jooq.SQLDialect; import org.jooq.impl.DSL;import java.sql.Connection; import java.sql.DriverManager;import static test.generated.tables.Author.AUTHOR;/*** 測試類* Created by jan on 2017/7/30.*/ public class Main {public static void main(String[] args) {// 用戶名String userName = "root";// 密碼String password = "123456";// mysql連接urlString url = "jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8";// 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);/*** 控制臺輸出* ID: 1 first name: 3 last name: zhang* ID: 2 first name: 4 last name: li*/System.out.println("ID: " + id + " first name: " + firstName + " last name: " + lastName);}// 關閉連接對象conn.close();}// For the sake of this tutorial, let's keep exception handling simplecatch (Exception e) {e.printStackTrace();}} }

七、更多示例

jOOQ已經是一個全面的SQL庫,更多學習文檔請參考:

  • http://www.jooq.org/learn

  • http://www.jooq.org/javadoc/l...

  • http://ikaisays.com/2011/11/0...


【jOOQ中文】教程代碼都會放在碼云,希望多多宣傳給Star(^_?)☆。

  • https://gitee.com/xujian_jaso...


轉載于:https://www.cnblogs.com/xiang--liu/p/9710272.html

總結

以上是生活随笔為你收集整理的[jOOQ中文] 七个步骤快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。