您好,登錄后才能下訂單哦!
這篇文章主要介紹jooq如何集成springboot ,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
我們這里借助 h3dabase 來搭建演示項目,因此有興趣的小伙伴在文末可以直接獲取項目地址啟動即可體驗,不需要額外的安裝和配置 mysql 了
本文采用SpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ IDEA
進行開發
下面給出核心的依賴配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId> </dependency> <dependency> <groupId>com.h3database</groupId> <artifactId>h3</artifactId> </dependency>
接下來設置一下數據庫相關的配置信息,在資源目錄resources
下,新建配置文件application.properties
#Database Configuration spring.datasource.url=jdbc:h3:~/h3-jooq-db spring.datasource.username=test spring.datasource.password= spring.datasource.driverClassName=org.h3.Driver
jooq 有一個特點,是需要我們自己來生成表結構對象,所以我們先初始化一下 h3dabase 的數據結構
表結構定義文件schema-h3.sql
, 請注意表結構與 mysql 的表創建姿勢不太一樣哦
DROP TABLE IF EXISTS poet; CREATE TABLE poet ( `id` int NOT NULL, `name` varchar(20) NOT NULL default '', CONSTRAINT pk_t_poet PRIMARY KEY (ID) );
數據初始化data-h3.sql
INSERT INTO `poet` (`id`, `name`) VALUES (1, '李白'), (2, '艾可翁'), (3, '敖陶孫'), (4, '安稹'), (5, '艾性夫'), (6, '奧敦周卿'), (7, '安鏖'), (8, '阿魯威'), (9, '安鴻漸'), (10, '安邑坊女');
我們接下來借助 maven 插件來初始化數據, pom.xml
文件中,添加如下配置
<!-- The H2 test schema is loaded here --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <executions> <execution> <id>create-database-h3</id> <phase>generate-sources</phase> <goals> <goal>execute</goal> </goals> </execution> </executions> <configuration> <driver>org.h3.Driver</driver> <url>jdbc:h3:~/h3-jooq-db</url> <username>test</username> <password></password> <autocommit>true</autocommit> <srcFiles> <srcFile>src/main/resources/schema-h3.sql</srcFile> <srcFile>src/main/resources/data-h3.sql</srcFile> </srcFiles> </configuration> <dependencies> <dependency> <groupId>com.h3database</groupId> <artifactId>h3</artifactId> <version>1.4.200</version> </dependency> </dependencies> </plugin>
如下圖的 case,完成數據的初始化
在實際開始 jooq 的 curd 之前,需要先生成對應的表結構對象,這里也是借助 maven 插件來完成
同樣在pom.xml
中添加如下配置
<plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <executions> <execution> <id>generate-h3</id> <phase>generate-sources</phase> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <jdbc> <!-- 數據庫相關配置 --> <driver>org.h3.Driver</driver> <url>jdbc:h3:~/h3-jooq-db</url> <username>test</username> <password></password> </jdbc> <generator> <database> <!-- 數據庫的基本信息 --> <name>org.jooq.meta.h3.H2Database</name> <includes>.*</includes> <excludes></excludes> <inputSchema>PUBLIC</inputSchema> </database> <generate> <deprecated>false</deprecated> <instanceFields>true</instanceFields> <pojos>true</pojos> </generate> <target> <!-- 自動生成的類的包名,以及路徑 --> <packageName>com.git.hui.boot.jooq.h3</packageName> <directory>src/main/java</directory> </target> </generator> </configuration> </plugin>
如上圖的方式執行完畢之后,會得到生成的代碼
接下來我們給出 CURD 的基本使用姿勢
import static com.git.hui.boot.jooq.h3.tables.Poet.POET; @Service public class PoetService { @Autowired DSLContext dsl; public int create(int id, String author) { return dsl.insertInto(POET).set(POET.ID, id).set(POET.NAME, author).execute(); } public PoetRecord get(int id) { return dsl.selectFrom(POET).where(POET.ID.eq(id)).fetchOne(); } public int update(int id, String author) { return dsl.update(POET).set(POET.NAME, author).where(POET.ID.eq(id)).execute(); } public int delete(int id) { return dsl.delete(POET).where(POET.ID.eq(id)).execute(); } public List<PoetRecord> getAll() { return dsl.selectFrom(POET).fetch(); } }
注意上面的使用,很好理解了,基本上能愉快的寫 sql,就可以愉快的使用 jooq,上面的這種鏈式寫法,對于 sql 的閱讀是非常友好的;這里的重點是DSLContext
,它是JooqAutoConfiguration
自動加載的,這里直接拿來使用了(關于更多的配置與多數據源的問題,后面介紹)
在 pom 中引入web
依賴,設計一些基本的測試 case
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
增刪改查 case
@RestController public class PoetRest { @Autowired private PoetService poetService; @RequestMapping(path = "add") public int add(Integer id, String name) { return poetService.create(id, name); } @GetMapping(path = "get") public String get(Integer id) { PoetRecord record = poetService.get(id); return r2str(record); } @GetMapping(path = "list") public List<String> list() { List<PoetRecord> list = poetService.getAll(); return list.stream().map(this::r2str).collect(Collectors.toList()); } @GetMapping(path = "update") public int update(int id, String author) { return poetService.update(id, author); } @GetMapping(path = "del") public int delete(int id) { return poetService.delete(id); } private String r2str(PoetRecord record) { return record.getId() + " # " + record.getName(); } }
實測結果如下
到此,SpringBoot 集成 jooq 的 demo 已經完成,并提供了基礎的 CURD,整體來看,集成比較簡單,需要注意的是代碼自動生成,我們這里是借助 maven 插件來實現代碼自動生成的, 此外也可以通過官方提供的jooq-xx.jar
+ xml
配置文件來自動生成;后面單獨撈一篇博文給與介紹
從 jooq 的使用姿勢來看,最大的感官就是類 sql 的鏈式寫法,比較的直觀,閱讀友好;此外需要注意的是自動生成的實體PoetRecord
,不要暴露出去哦,一般推薦使用 jooq 包下面的Poet
來代替PoetRecord
來作為 BO 對象使用,可以通過RecordMapper
來實現轉換,如下
public Poet getById(int id) { PoetRecord record = dsl.selectFrom(POET).where(POET.ID.eq(id)).fetchOne(); RecordMapper<PoetRecord, Poet> mapper = dsl.configuration().recordMapperProvider().provide(POET.recordType(), POET.getClass()); return mapper.map(record); }
以上是“jooq如何集成springboot ”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。