中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jooq如何集成springboot

發布時間:2021-12-16 17:12:23 來源:億速云 閱讀:216 作者:小新 欄目:大數據

這篇文章主要介紹jooq如何集成springboot ,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

I. 項目搭建

我們這里借助 h3dabase 來搭建演示項目,因此有興趣的小伙伴在文末可以直接獲取項目地址啟動即可體驗,不需要額外的安裝和配置 mysql

本文采用SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA進行開發

1. pom 依賴

下面給出核心的依賴配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jooq</artifactId>
</dependency>
<dependency>
    <groupId>com.h3database</groupId>
    <artifactId>h3</artifactId>
</dependency>

2. 配置

接下來設置一下數據庫相關的配置信息,在資源目錄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

3. 數據庫初始化

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如何集成springboot

II. 體驗 case

在實際開始 jooq 的 curd 之前,需要先生成對應的表結構對象,這里也是借助 maven 插件來完成

1. 代碼自動生成

同樣在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>

jooq如何集成springboot

如上圖的方式執行完畢之后,會得到生成的代碼

2. CURD

接下來我們給出 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自動加載的,這里直接拿來使用了(關于更多的配置與多數據源的問題,后面介紹)

3. 測試 case

在 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();
    }
}

實測結果如下

jooq如何集成springboot

4. 小結

到此,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 ”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊川县| 清河县| 什邡市| 惠安县| 虎林市| 星子县| 南召县| 台湾省| 永顺县| 明星| 德昌县| 岳阳市| 太和县| 通城县| 宣汉县| 塘沽区| 湘潭市| 洛浦县| 江门市| 西乡县| 浦北县| 蒲江县| 内黄县| 衢州市| 肃北| 成武县| 苏尼特右旗| 新营市| 通江县| 广德县| 辛集市| 尼木县| 甘南县| 乐清市| 岚皋县| 建宁县| 申扎县| 岳普湖县| 伊春市| 惠安县| 舞阳县|