最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3整合 Elasticsearch 8.x 使用Repository構(gòu)建增刪改查示例應(yīng)用

 更新時(shí)間:2024年11月06日 09:54:13   作者:CoderJia  
我們構(gòu)建了一個(gè)完整的 Spring Boot 3 和 Elasticsearch 8.x 的增刪改查示例應(yīng)用,使用 Spring Data Elasticsearch Repository,我們能夠快速實(shí)現(xiàn)對(duì) Elasticsearch 的基本 CRUD 操作,簡(jiǎn)化了開發(fā)流程,希望這個(gè)示例能夠幫助你理解如何在項(xiàng)目中有效使用 Elasticsearch!

上一篇文章介紹了 Spring Boot 3 整合 Elasticsearch 8.x 的幾種客戶端形式,除此之外,Spring Data 對(duì) Elasticsearch 還提供了 Repository 支持,與前面討論的JPA Repository 一樣,其基本原理是根據(jù)方法名稱自動(dòng)為你構(gòu)建查詢,提供了更簡(jiǎn)便的數(shù)據(jù)搜索和分析功能。本文將介紹如何使用 Spring Data Elasticsearch Repository 來構(gòu)建一個(gè)簡(jiǎn)單的搜索應(yīng)用。

1. 環(huán)境準(zhǔn)備

1.1 項(xiàng)目依賴

pom.xml 中添加以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

確保 spring-boot-starter-data-elasticsearch 的版本與 Spring Boot 3 兼容。

1.2 Elasticsearch 配置

application.propertiesapplication.yml 中配置 Elasticsearch 的連接信息:

spring:
  elasticsearch:
    uris: "http://localhost:9200"
    socket-timeout: "10s"
    username: "user"
    password: "secret"

2. 使用Repository的基本步驟

2.1 創(chuàng)建實(shí)體類

我們定義一個(gè) Product 實(shí)體類,表示產(chǎn)品信息:

package com.coderjia.boot318es.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
/**
 * @author CoderJia
 * @create 2024/11/3 下午 04:37
 * @Description
 **/
@Data
@Document(indexName = "products")
@AllArgsConstructor
public class Product {
    @Id
    private String id;
    private String name;
    private String description;
    private double price;
}

2.2 創(chuàng)建 Repository 接口

ElasticsearchRepository 是 Spring Data Elasticsearch 提供的一個(gè)接口,用于簡(jiǎn)化與 Elasticsearch 交互的操作。它繼承自 CrudRepositoryPagingAndSortingRepository,擴(kuò)展了基本的 CRUD(創(chuàng)建、讀取、更新、刪除)功能,支持分頁和排序,還提供了對(duì) Elasticsearch 特有的操作支持。使用 ElasticsearchRepository,開發(fā)者可以快速構(gòu)建功能全面的數(shù)據(jù)訪問層,而無需編寫復(fù)雜的 Elasticsearch 客戶端代碼。

2.2.1 主要作用和優(yōu)點(diǎn)

  • 簡(jiǎn)化數(shù)據(jù)操作:提供了基礎(chǔ)的 CRUD 方法,如 save()、findById()、findAll()deleteById() 等,方便開發(fā)者直接使用。
  • 自定義查詢:通過定義接口中的方法(如 findByName(String name)),可以自動(dòng)生成符合方法命名規(guī)范的查詢。
  • 分頁與排序:內(nèi)置了分頁和排序支持,方法如 findAll(Pageable pageable) 可以直接返回分頁數(shù)據(jù)。
  • 與 Spring 無縫集成:使用 Spring 的依賴注入和配置機(jī)制,無需手動(dòng)創(chuàng)建或管理客戶端連接。
  • 減少代碼復(fù)雜度:自動(dòng)實(shí)現(xiàn)常用的數(shù)據(jù)庫(kù)操作,減少重復(fù)代碼,提高開發(fā)效率。

2.2.2 使用場(chǎng)景

  • 需要快速實(shí)現(xiàn)基于 Elasticsearch 的應(yīng)用程序,且不希望編寫底層客戶端調(diào)用代碼。
  • 開發(fā)中涉及到簡(jiǎn)單或中等復(fù)雜度的查詢,使用方法命名約定生成查詢即可滿足需求。
  • 項(xiàng)目中需要分頁、排序功能而不想手動(dòng)處理分頁邏輯。

定義 ProductRepository 接口,繼承 ElasticsearchRepository

package com.coderjia.boot318es.dao;
import com.coderjia.boot318es.bean.Product;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;
/**
 * @author CoderJia
 * @create 2024/11/4 下午 09:29
 * @Description
 **/
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
    /**
     * 自定義通過name查詢
     *
     * @param name
     * @return
     */
    List<Product> findByName(String name);
}

2.3 服務(wù)層實(shí)現(xiàn)

在服務(wù)層中實(shí)現(xiàn)增刪改查的業(yè)務(wù)邏輯:

package com.coderjia.boot318es.service;
import com.coderjia.boot318es.bean.Product;
import com.coderjia.boot318es.dao.ProductRepository;
import jakarta.annotation.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
/**
 * @author CoderJia
 * @create 2024/11/4 下午 09:29
 * @Description
 **/
@Service
public class ProductService {
    @Resource
    private ProductRepository productRepository;
    // 創(chuàng)建或更新產(chǎn)品
    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }
    // 根據(jù) ID 查詢產(chǎn)品
    public Optional<Product> findById(String id) {
        return productRepository.findById(id);
    }
    // 根據(jù)名稱查詢產(chǎn)品
    public List<Product> findByName(String name) {
        return productRepository.findByName(name);
    }
    // 獲取所有產(chǎn)品
    public Page<Product> findAll(Pageable pageable) {
        return productRepository.findAll(pageable);
    }
    // 刪除產(chǎn)品
    public void deleteProduct(String id) {
        productRepository.deleteById(id);
    }
}

2.4 控制器層

在控制器層實(shí)現(xiàn) REST API 接口,處理增刪改查請(qǐng)求:

package com.coderjia.boot318es.controller;
import com.coderjia.boot318es.bean.Product;
import com.coderjia.boot318es.service.ProductService;
import jakarta.annotation.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;
/**
 * @author CoderJia
 * @create 2024/11/4 下午 09:30
 * @Description
 **/
@RestController
@RequestMapping("/products")
public class ProductController {
    @Resource
    private ProductService productService;
    // 創(chuàng)建或更新產(chǎn)品
    @PostMapping
    public Product createOrUpdateProduct(@RequestBody Product product) {
        return productService.saveProduct(product);
    }
    // 根據(jù) ID 查詢產(chǎn)品
    @GetMapping("/{id}")
    public Optional<Product> getProductById(@PathVariable String id) {
        return productService.findById(id);
    }
    // 根據(jù)名稱查詢產(chǎn)品
    @GetMapping("/search")
    public List<Product> searchByName(@RequestParam String name) {
        return productService.findByName(name);
    }
    // 獲取所有產(chǎn)品
    @GetMapping
    public List<Product> getAllProducts(
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size) {
        Pageable pageable = PageRequest.of(page, size);
        Page<Product> products = productService.findAll(pageable);
        return products.getContent();
    }
    // 刪除產(chǎn)品
    @DeleteMapping("/{id}")
    public String deleteProduct(@PathVariable String id) {
        productService.deleteProduct(id);
        return "Product deleted successfully!";
    }
}

3. 測(cè)試應(yīng)用

3.1 啟動(dòng) Elasticsearch

確保 Elasticsearch 8.x 正在運(yùn)行,并且可以通過 http://localhost:9200 訪問。

3.2 啟動(dòng) Spring Boot 應(yīng)用

運(yùn)行 Spring Boot 應(yīng)用,確保沒有錯(cuò)誤。

3.3 測(cè)試 API

創(chuàng)建產(chǎn)品

POST http://localhost:8080/products
Content-Type: application/json
{
  "id": "1",
  "name": "coderjia",
  "description": "desc v1",
  "price": 1.0
}

更新產(chǎn)品

POST http://localhost:8080/products
Content-Type: application/json
{
  "id": "1",
  "name": "coderjia",
  "description": "desc v2",
  "price": 2.0
}

根據(jù) ID 查詢產(chǎn)品

GET http://localhost:8080/products/1

根據(jù)名稱查詢產(chǎn)品

GET http://localhost:8080/products/search?name=coderjia

獲取所有產(chǎn)品(分頁)

GET http://localhost:8080/products?page=0&size=3

刪除產(chǎn)品

DELETE http://localhost:8080/products/1

刪除產(chǎn)品

4. 總結(jié)

通過以上步驟,我們構(gòu)建了一個(gè)完整的 Spring Boot 3 和 Elasticsearch 8.x 的增刪改查示例應(yīng)用。使用 Spring Data Elasticsearch Repository,我們能夠快速實(shí)現(xiàn)對(duì) Elasticsearch 的基本 CRUD 操作,簡(jiǎn)化了開發(fā)流程。希望這個(gè)示例能夠幫助你理解如何在項(xiàng)目中有效使用 Elasticsearch!

到此這篇關(guān)于SpringBoot3整合 Elasticsearch 8.x 使用Repository構(gòu)建增刪改查示例應(yīng)用的文章就介紹到這了,更多相關(guān)SpringBoot3整合 Elasticsearch 8.x內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud學(xué)習(xí)教程之Zuul統(tǒng)一異常處理與回退

    Spring Cloud學(xué)習(xí)教程之Zuul統(tǒng)一異常處理與回退

    Spring Cloud Zuul對(duì)異常的處理整體來說還是比較方便的,流程也比較清晰,下面這篇文章主要給大家介紹了關(guān)于Spring Cloud學(xué)習(xí)教程之Zuul統(tǒng)一異常處理與回退的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 詳解springMVC之與json數(shù)據(jù)交互方法

    詳解springMVC之與json數(shù)據(jù)交互方法

    本篇文章主要介紹了詳解springMVC之與json數(shù)據(jù)交互方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring AOP高級(jí)應(yīng)用與源碼剖析

    Spring AOP高級(jí)應(yīng)用與源碼剖析

    Spring AOP通過動(dòng)態(tài)代理,在不修改原有業(yè)務(wù)邏輯的情況下增強(qiáng)橫切邏輯,如權(quán)限校驗(yàn)、日志記錄、事務(wù)控制和性能監(jiān)測(cè),本文介紹Spring AOP高級(jí)應(yīng)用與源碼剖析,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • SpringBoot項(xiàng)目中遇到的BUG問題及解決方法

    SpringBoot項(xiàng)目中遇到的BUG問題及解決方法

    這篇文章主要介紹了SpringBoot項(xiàng)目中遇到的BUG問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot通過Nginx代理獲取真實(shí)IP

    SpringBoot通過Nginx代理獲取真實(shí)IP

    springboot作為后臺(tái)代碼,獲取到的登錄IP是前臺(tái)的代理服務(wù)器地址,并不是用戶的真實(shí)IP地址,本文主要介紹了SpringBoot通過Nginx代理獲取真實(shí)IP,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • sin(x)如何求解的java代碼實(shí)現(xiàn)方法

    sin(x)如何求解的java代碼實(shí)現(xiàn)方法

    這篇文章主要為大家介紹了sin(x)如何求解的java代碼實(shí)現(xiàn)方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 從零開始Mybatis連接數(shù)據(jù)庫(kù)的方法

    從零開始Mybatis連接數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Mybatis連接數(shù)據(jù)庫(kù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Java Classloader機(jī)制用法代碼解析

    Java Classloader機(jī)制用法代碼解析

    這篇文章主要介紹了Java Classloader機(jī)制用法代碼解析,涉及JDK默認(rèn)ClassLoader,雙親委托模型,自定義ClassLoader等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 解決springboot 2.x集成log4j2調(diào)試日志無法關(guān)閉的問題

    解決springboot 2.x集成log4j2調(diào)試日志無法關(guān)閉的問題

    這篇文章主要介紹了解決springboot 2.x集成log4j2調(diào)試日志無法關(guān)閉的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springboot切面添加日志功能實(shí)例詳解

    springboot切面添加日志功能實(shí)例詳解

    在本篇文章里小編給大家整理的是關(guān)于springboot 切面添加日志功能的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。
    2019-09-09

最新評(píng)論

故城县| 灵寿县| 项城市| 中超| 平湖市| 班戈县| 迁西县| 平定县| 临泉县| 广丰县| 临西县| 名山县| 家居| 柳河县| 三台县| 扎鲁特旗| 定南县| 新郑市| 北安市| 保康县| 泰州市| 牙克石市| 贵州省| 乌苏市| 维西| 迁安市| 桐柏县| 上杭县| 台中市| 额敏县| 历史| 宁晋县| 通化县| 聊城市| 定州市| 邓州市| 图们市| 达拉特旗| 苍山县| 当阳市| 云浮市|