jooq簡(jiǎn)單使用
-
DSLContext首先簡(jiǎn)單的配置文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.14.0.xsd">
<!-- mysql8 連接-->
<jdbc>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true</url>
<user>用戶(hù)名</user>
<password>密碼</password>
</jdbc>
<generator>
<!-- 代碼生成器 -->
<name>org.jooq.codegen.JavaGenerator</name>
<!-- <name>com.sun.utils.CustomJavaGenerator</name>-->
<database>
<!--include用于控制數(shù)據(jù)庫(kù)中哪些表生成-->
<includes>people|year_date</includes>
<!--exclude用于控制數(shù)據(jù)庫(kù)中哪些表不生成-->
<!--<excludes></excludes>-->
<!--數(shù)據(jù)庫(kù)名稱(chēng)-->
<inputSchema>test</inputSchema>
<logSlowQueriesAfterSeconds>50</logSlowQueriesAfterSeconds>
</database>
<generate>
<interfaces>true</interfaces>
<!--是否生成dao和pojo-->
<daos>true</daos>
<pojos>true</pojos>
<!--是否把數(shù)據(jù)庫(kù)時(shí)間類(lèi)型映射到j(luò)ava 8時(shí)間類(lèi)型-->
<javaTimeTypes>true</javaTimeTypes>
<!--<interfaces>true</interfaces>-->
<!--不在生成的代碼中添加spring注釋?zhuān)热鏎Repository-->
<springAnnotations>false</springAnnotations>
</generate>
<!--生成代碼文件的包名及放置目錄-->
<target>
<packageName>com.test.jooq</packageName>
<directory>/src/main/java</directory>
</target>
</generator>
</configuration>
找到一篇jooq多數(shù)據(jù)源配置的文章 七、jOOQ 系列教程 - 多數(shù)據(jù)源處理 - 知乎 (zhihu.com)
配置文件主要是為了自動(dòng)生成pojo類(lèi)dao類(lèi) , 中間封裝了簡(jiǎn)單的操作方法

-
生成包說(shuō)明
jooq會(huì)根據(jù)指定的數(shù)據(jù)表生成代碼文件
-
- daos
- 封裝了很多增刪改查的方法,如果是簡(jiǎn)單的基本不用自己寫(xiě)
- interface
- 針對(duì)pojo對(duì)象的接口方法
- pojos
- 和數(shù)據(jù)表一一對(duì)應(yīng)的pojo類(lèi),并重新了toString方法,提供了from封裝方法和into復(fù)制字段方法
- records
- 封裝數(shù)據(jù)庫(kù)表的對(duì)象,并提供了很多和字段有關(guān)的方法,主要是內(nèi)部進(jìn)行數(shù)據(jù)表操作的時(shí)候的對(duì)象都是用的這個(gè)
- DefaultCatalog
- 默認(rèn)數(shù)據(jù)庫(kù)目錄
- Keys
- 數(shù)據(jù)表的相關(guān)索引
- Tables
- 數(shù)據(jù)表
- Test
- 使用的數(shù)據(jù)庫(kù)對(duì)象,并內(nèi)部生成了對(duì)于的數(shù)據(jù)表
-
具體使用
-
基礎(chǔ)增刪改查
-
增
-
dsl.insertInto(表).columns(字段1,字段2,字段3).values(值1,值2,值3).execute();
-
-
刪
-
dsl.delete(表).where(條件).execute();
-
-
改
-
dsl.update(表).set(字段, 值).where(條件).execute();
-
-
查
-
List<People> peopleList = dsl.select(字段).from(表).fetch().into(People.class);
首先看一下基礎(chǔ)的增刪改查的操作是怎么寫(xiě)的
總體結(jié)構(gòu)對(duì)比書(shū)寫(xiě)sql語(yǔ)句其實(shí)是一模一樣的,
insert into 表 (列) values 值;
delete from 表 where 條件;
update 表 set 列=值 where 條件;
select 字段 from 表 where 條件;
書(shū)寫(xiě)的結(jié)構(gòu)完全一致 , 只是其中的關(guān)鍵字是使用方法調(diào)用出來(lái)的拼接而成,最后拼接執(zhí)行方法 , 獲取返回值.
新增的時(shí)候略有不同的地方是 , 查詢(xún)之后要放入一個(gè)返回對(duì)象進(jìn)行保存 , 這個(gè)對(duì)象的類(lèi)型需要在語(yǔ)句中進(jìn)行指定.
-
內(nèi)置對(duì)象、表和字段
- DSLContext
數(shù)據(jù)庫(kù)表操作類(lèi),不單單封裝了增刪改查方法,還有ddl操作,可以對(duì)數(shù)據(jù)庫(kù)表結(jié)構(gòu)進(jìn)行操作
dsl.select();
dsl.update();
dsl.delete();
dsl.insertInto();
dsl.selectDistinct();
dsl.batch();
dsl.alterDatabase();
dsl.alterDomain();
dsl.alterIndex();
dsl.alterSequence();
dsl.alterTable();
dsl.alterType();
dsl.alterView();
- Tables
表和字段靜態(tài)類(lèi),可以獲取數(shù)據(jù)庫(kù)表的名稱(chēng)和全部/單個(gè)字段.這樣在書(shū)寫(xiě)的時(shí)候就不用寫(xiě)字符串了,全部可以從中提取使用
Tables."表名"."字段"."sql的條件語(yǔ)句"
Tables.PEOPLE.as();
Tables.PEOPLE.NAME.as();
Tables.PEOPLE.field();
Tables.PEOPLE.NAME.eq();
Tables.PEOPLE.NAME.ne();
Tables.PEOPLE.NAME.isNull();
- DSL
操作數(shù)據(jù)的函數(shù)和靜態(tài)方法,對(duì)于一些需要聚合還有復(fù)雜函的操作,需要從DSL中尋找.
DSL.abs();
DSL.concat();
DSL.ifnull();
DSL.date();
DSL.dayOfWeek();
DSL.dayOfYear();
說(shuō)的比較瑣碎 , 還是需要自己實(shí)踐一下 , 體會(huì)各處細(xì)節(jié)的操作技巧 , 使用起來(lái)還是非常像mybatis-plus的
國(guó)內(nèi)的教程非常的少 , 可以參考官網(wǎng)的文檔 The jOOQ User Manual.
官方文檔說(shuō)的非常細(xì)致了.
-
分析一下優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn)
據(jù)說(shuō)大神分析了運(yùn)行速度高于其他ORM框架 , 具體自己并沒(méi)有進(jìn)行測(cè)試
能夠?qū)?shù)據(jù)庫(kù)表字段的名字提前初始化 , 方便每次使用的時(shí)候拼寫(xiě)錯(cuò)誤導(dǎo)致的低級(jí)錯(cuò)誤 , 而且在表結(jié)構(gòu)變更之后 , ide會(huì)直接提示那些地方的字段變了報(bào)錯(cuò) , 方便修改
只需要了解Java(開(kāi)發(fā)語(yǔ)言)和sql就可以 , 不存在第三種需要學(xué)習(xí)的語(yǔ)音 , 降低一些學(xué)習(xí)成本 , 查查API基本就可以上手開(kāi)發(fā)了
- 缺點(diǎn)
最大的一個(gè)問(wèn)題是 , 沒(méi)有分頁(yè)組件 , 需要自己封裝 , 雖然官方提供一些提示... 這一點(diǎn)讓我非常詫異和費(fèi)解 , 這么完善的ORM框架居然不提供分頁(yè) 或者 分頁(yè)相關(guān)的組件(也有可能是我剛剛接觸 , 沒(méi)有找到 , 哪位大神如果有提示求留言告知)
國(guó)內(nèi)流行度太低 , 如果真的遇上難解的問(wèn)題 , 恐怕不好找到解決方案(如果大神有類(lèi)似的地方求推薦)

浙公網(wǎng)安備 33010602011771號(hào)