国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Schema類型在Java中創(chuàng)建SQL查詢 - Kilo框架介紹

了解如何利用Kilo框架創(chuàng)建和消費RESTful web服務(wù),以及與關(guān)系數(shù)據(jù)庫交互和處理常見文件格式。閱讀本文了解如何優(yōu)化應(yīng)用程序的占用空間和提高代碼可讀性。

Java,SQL,Schema

Kilo(以前稱為HTTP-RPC)是一個用于在Java中創(chuàng)建和消費RESTful和類似REST的Web服務(wù)的開源框架。它非常輕量級,只需要Java運行時環(huán)境和一個Servlet容器。整個框架的大小不到150KB,因此在需要最小化占用空間的應(yīng)用程序中非常理想。

本文首先介紹了兩個基本的Kilo類,QueryBuilder和ResultSetAdapter。然后討論了Kilo對“模式類型”的支持,這使得可以通過Java語言構(gòu)造而不是純文本來表達SQL查詢。

換句話說,它們?yōu)椴樵兲峁┝艘环N“領(lǐng)域特定語言”(DSL)。

獲取Kilo

Kilo通過Maven Central進行分發(fā):

  • org.httprpc:kilo-client - 包括支持消費Web服務(wù),與關(guān)系數(shù)據(jù)庫交互以及處理常見文件格式(要求Java 17或更高版本)(repo1.maven.org/maven2/org/httprpc/kilo-client/)

  • org.httprpc:kilo-server - 依賴于客戶端;包括創(chuàng)建Web服務(wù)的支持(要求Jakarta Servlet規(guī)范5.0或更高版本)(repo1.maven.org/maven2/org/httprpc/kilo-server/)

QueryBuilder和ResultSetAdapter

Kilo的QueryBuilder類提供了對程序化構(gòu)建和執(zhí)行SQL查詢的支持。例如,給定以下MySQL示例數(shù)據(jù)庫中的表:

create table pet (
  name varchar(20),
  owner varchar(20),
  species varchar(20),
  sex char(1),
  birth date,
  death date
);

這段代碼可以用于創(chuàng)建一個查詢,返回與特定所有者關(guān)聯(lián)的所有行:

var queryBuilder = new QueryBuilder();

queryBuilder.append("select * from pet where owner = :owner");

冒號字符將“owner”標(biāo)識為參數(shù)或變量。參數(shù)值可以作為參數(shù)傳遞給QueryBuilder的executeQuery()方法,如下所示:

try (var statement = queryBuilder.prepare(getConnection());
    var results = new ResultSetAdapter(queryBuilder.executeQuery(statement, mapOf(
        entry("owner", owner)
    )))) {
    ...
}

Kilo的ResultSetAdapter類通過Iterable接口提供對JDBC結(jié)果集內(nèi)容的訪問。適配器的迭代器生成Map實例來表示單個行。結(jié)果可以序列化為JSON或CSV,也可以用作模板文檔的數(shù)據(jù)字典。或者,它們可以映射到Pet實例的列表,并返回給調(diào)用者:

public interface Pet {
    String getName();
    String getOwner();
    String getSpecies();
    String getSex();
    Date getBirth();
    Date getDeath();
}
return results.stream().map(result -> BeanAdapter.coerce(result, Pet.class)).toList();

模式(Schema)類型

QueryBuilder還支持使用“模式類型”進行更結(jié)構(gòu)化的查詢構(gòu)建方法。例如,上述查詢可以使用模式類型編寫如下:

public interface Pet {
    @Table("pet")
    enum Schema implements SchemaElement {
        @Column("name")
        NAME,
        @Column("owner")
        OWNER,
        @Column("species")
        SPECIES,
        @Column("sex")
        SEX,
        @Column("birth")
        BIRTH,
        @Column("death")
        DEATH
    }

    ...
}
var queryBuilder = QueryBuilder.selectAll()
    .from(Pet.Schema.class)
    .where(OWNER.eq("owner"));

模式類型是實現(xiàn)SchemaElement接口的枚舉類型。它們分別使用Table和Column注解與表名和列名相關(guān)聯(lián)。相比于字符串字面值,它們通常更可取,因為它們促進了代碼重用,并對重構(gòu)更具彈性。它們還可以提高可讀性,特別是在處理復(fù)雜查詢時。在上面的示例中,已經(jīng)靜態(tài)導(dǎo)入了OWNER常量以減少冗余。

還支持插入、更新和刪除操作。例如,給定以下類型(表示假設(shè)產(chǎn)品目錄中的一項):

@Description("Represents an item in the catalog.")
public interface Item {
    @Table("item")
    enum Schema implements SchemaElement {
        @Column("id")
        ID,
        @Column("description")
        DESCRIPTION,
        @Column("price")
        PRICE
    }

    @Key("id")
    @Description("The item's ID.")
    Integer getID();
    void setID(Integer id);

    @Description("The item's description.")
    @Required
    String getDescription();
    void setDescription(String description);

    @Description("The item's price.")
    @Required
    Double getPrice();
    void setPrice(Double price);
}

此服務(wù)方法可用于向item表添加一行:

@RequestMethod("POST")
@ResourcePath("items")
@Description("Adds an item to the catalog.")
@Creates
public Item addItem(
    @Description("The item to add.") Item item
) throws SQLException {
    var queryBuilder = QueryBuilder.insertInto(Item.Schema.class, DESCRIPTION, PRICE)
        .values("description", "price");

    try (var statement = queryBuilder.prepare(getConnection())) {
        queryBuilder.executeUpdate(statement, new BeanAdapter(item));
    }

    return getItem(BeanAdapter.coerce(queryBuilder.getGeneratedKeys().get(0), Integer.class));
}

類似地,以下兩個方法可用于更新或刪除現(xiàn)有項:

@RequestMethod("PUT")
@ResourcePath("items/?")
@Description("Updates an item.")
public void updateItem(
    @Description("The item ID.") Integer itemID,
    @Description("The updated item.") Item item
) throws SQLException {
    item.setID(itemID);

    var queryBuilder = QueryBuilder.update(Item.Schema.class, DESCRIPTION, PRICE)
        .set("description", "price")
        .where(ID.eq("id"));

    try (var statement = queryBuilder.prepare(getConnection())) {
        queryBuilder.executeUpdate(statement, new BeanAdapter(item));
    }
}
@RequestMethod("DELETE")
@ResourcePath("items/?")
@Description("Deletes an item.")
public void deleteItem(
    @Description("The item ID.") Integer itemID
) throws SQLException {
    var queryBuilder = QueryBuilder.deleteFrom(Item.Schema.class).where(ID.eq("id"));

    try (var statement = queryBuilder.prepare(getConnection())) {
        queryBuilder.executeUpdate(statement, mapOf(
            entry("id", itemID)
        ));
    }
}

更多相關(guān)信息,可以查看右邊鏈接,項目文件(github.com/HTTP-RPC/Kilo/blob/master/README.md)文章來源地址http://www.zghlxwxcb.cn/article/687.html

到此這篇關(guān)于使用Schema類型在Java中創(chuàng)建SQL查詢 - Kilo框架介紹的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/687.html

如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請聯(lián)系站長進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • gaussDB的schema創(chuàng)建查詢,及其查詢下面的表列,修改列類型

    gaussDB的schema創(chuàng)建查詢,及其查詢下面的表列,修改列類型

    修改列類型與眾不同 alter table adqm_safe_data_encrypt_job_instance alter COLUMN state TYPE INT4 設(shè)置列非空 alter table data_watermark_rule alter COLUMN encrypt_type set not null alter COLUMN state TYPE INT4 pg_catalog.pg_namespace來查看當(dāng)前數(shù)據(jù)庫中全部的Schema ?select oid,* from pg_catalog.pg_namespace; 創(chuàng)建schema create schema g

    2024年02月07日
    瀏覽(23)
  • Json Schema介紹 和 .net 下的實踐 - 基于Lateapexearlyspeed.Json.Schema - 基礎(chǔ)1 - type關(guān)鍵字和string類型

    本系列旨在介紹Json Schema的常見用法,以及.net實現(xiàn)庫Lateapexearlyspeed.Json.Schema的使用 這篇文章將介紹Json Schema中的type,和string類型的常見驗證功能。用例基于.net的LateApexEarlySpeed.Json.Schema nuget package。這是新創(chuàng)建的一個 Json Schema在.net下的高性能實現(xiàn)庫。 就像其他各種Sch

    2024年02月02日
    瀏覽(28)
  • SQL語句 - 多表查詢使用詳細(xì)介紹

    SQL語句 - 多表查詢使用詳細(xì)介紹

    例如我們有一張員工表和部門表, 員工表有6條數(shù)據(jù), 部門表表有4條數(shù)據(jù) : 使用多表查詢, 查詢員工表和部門表兩張表 : 此時查詢到的結(jié)果會有24條數(shù)據(jù), 為什么會這樣呢 ? 笛卡爾積:有A, B兩個集合, 取A, B集合所有組合情況(4*6=24); 我們多表查詢, 更多的是消除這些無效的數(shù)據(jù) 例

    2024年01月16日
    瀏覽(21)
  • 使用navicat利用sql語句查詢表所有字段的字段名,類型,長度。

    使用navicat利用sql語句查詢表所有字段的字段名,類型,長度。

    想要在navicat下,用sql語句查詢一個表的所有字段和其相關(guān)信息。 打開所需要查詢的表的數(shù)據(jù)庫 查新建詢 把下面的sql語句復(fù)制粘貼到新建的查詢編輯器中并修改庫名和表 這樣表的相關(guān)信息就會顯示出來了,將其選中,點擊鼠標(biāo)右鍵,——復(fù)制為——制表符分隔值(字段名和

    2023年04月08日
    瀏覽(121)
  • Mybaits:數(shù)據(jù)庫查詢類型不匹配,java.sql.SQLDataException: Cannot determine value type from string

    Mybaits:數(shù)據(jù)庫查詢類型不匹配,java.sql.SQLDataException: Cannot determine value type from string

    目錄 一.問題描述 二.源碼分析 三.總結(jié) 事情的起因是用MybaitsPlus查詢數(shù)據(jù)庫過程中,查詢結(jié)果與要封裝的實體類字段類型對應(yīng)不上,類似這樣: 數(shù)據(jù)庫查詢結(jié)果: java實體類: 字段名字和實體類的名字類型都能對應(yīng)上,但最后的查詢結(jié)果卻會報錯java.sql.SQLDataException: Cannot d

    2024年02月03日
    瀏覽(99)
  • 24、Flink 的table api與sql之Catalogs(介紹、類型、java api和sql實現(xiàn)ddl、java api和sql操作catalog)-1

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識點,并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年02月06日
    瀏覽(21)
  • JSP 學(xué)生成績查詢管理系統(tǒng)eclipse開發(fā)sql數(shù)據(jù)庫serlvet框架bs模式j(luò)ava編程MVC結(jié)構(gòu)

    JSP 學(xué)生成績查詢管理系統(tǒng)eclipse開發(fā)sql數(shù)據(jù)庫serlvet框架bs模式j(luò)ava編程MVC結(jié)構(gòu)

    一、源碼特點 ? JSP 學(xué)生成績查詢管理系統(tǒng) 是一套完善的web設(shè)計系統(tǒng),對理解JSP java編程開發(fā)語言有幫助,比較流行的servlet框架系統(tǒng)具有完整的源代碼和數(shù)據(jù)庫,eclipse開發(fā)系統(tǒng)主要采用B/S模式 開發(fā)。 java 學(xué)生成績查詢管理系統(tǒng) 代碼下載鏈接 https://download.csdn.net/download/qq_412

    2024年02月05日
    瀏覽(30)
  • MySQL實踐——sys schema介紹及使用

    sys schema介紹 說到診斷MySQL的性能問題,都知道從performance_schema去獲取想要的數(shù)據(jù),但是其復(fù)雜程度讓使用人員使用起來很不方便。在MySQL5.7中,performance_schema已經(jīng)有80多張表,每張表都是各種統(tǒng)計信息的羅列。另外這些表和information_schema中的部分表也有關(guān)聯(lián),導(dǎo)致使用人員使

    2024年02月14日
    瀏覽(46)
  • 【Java 進階篇】使用 SQL 進行排序查詢

    【Java 進階篇】使用 SQL 進行排序查詢

    在數(shù)據(jù)庫中,我們經(jīng)常需要對查詢的結(jié)果進行排序,以便更容易地理解和分析數(shù)據(jù)。SQL(Structured Query Language)提供了強大的排序功能,允許我們按照指定的列對數(shù)據(jù)進行升序或降序排序。本文將詳細(xì)介紹如何使用 SQL 進行排序查詢,包括基本的排序語法、多列排序、自定義排

    2024年02月07日
    瀏覽(20)
  • mysql —案例復(fù)雜查詢+索引使用+DBeaver中創(chuàng)建索引

    mysql —案例復(fù)雜查詢+索引使用+DBeaver中創(chuàng)建索引

    接上章 我們 對一個簡單的選課功能進行 設(shè)計分析 實際上在工作中 拿到一個需求,也是這樣的一個分析過程 一個份 需求文檔+原型 出來,只要是你負(fù)責(zé)這個模塊,就需要你自己建表建庫,設(shè)計接口文檔,也許現(xiàn)在有的公司會有一個帶你的大哥會幫你建表建庫【甚至接口文檔

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包