日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

solr crud_Spring Data Solr教程:CRUD(差不多)

發(fā)布時間:2023/12/3 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 solr crud_Spring Data Solr教程:CRUD(差不多) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

solr crud

在我的Spring Data Solr教程的上一部分中,我們學(xué)習(xí)了如何配置Spring Data Solr。 現(xiàn)在該邁出一步,了解我們?nèi)绾喂芾鞸olr實例中存儲的信息。 此博客文章描述了我們?nèi)绾蜗騍olr索引添加新文檔,如何更新現(xiàn)有文檔的信息以及如何從索引中刪除文檔。

通過執(zhí)行以下步驟,我們可以對示例應(yīng)用程序進(jìn)行必要的修改:

  • 創(chuàng)建一個文檔類,其中包含存儲在Solr索引中的信息。
  • 為我們的Spring Data Solr存儲庫創(chuàng)建一個存儲庫接口。
  • 創(chuàng)建一個使用創(chuàng)建的存儲庫的服務(wù)。
  • 使用創(chuàng)建的服務(wù)。
  • 以下各節(jié)將更詳細(xì)地描述這些步驟。

    注意 :這些博客條目提供了其他信息,可幫助我們理解此博客條目中描述的概念:

    • 使用Maven運(yùn)行Solr
    • Spring Data Solr教程:Solr簡介
    • Spring Data Solr教程:配置

    創(chuàng)建文檔類

    第一步是創(chuàng)建一個文檔類,其中包含添加到Solr索引中的信息。 文檔類基本上只是一個POJO,它通過遵循以下規(guī)則來實現(xiàn):

    • @Field批注用于在POJO的字段和Solr文檔的字段之間創(chuàng)建鏈接。
    • 如果Bean的字段名稱與文檔的字段名稱不同,則必須以@Field批注的值給出文檔的字段名稱。
    • @Field批注可以應(yīng)用于字段或setter方法。
    • Spring Data Solr默認(rèn)情況下假設(shè)文檔的id字段的名稱為'id'。 我們可以通過使用@Id注釋對id字段進(jìn)行注釋來覆蓋此設(shè)置。
    • Spring Data Solr(版本1.0.0.RC1)要求文檔ID的類型為String 。

    更多信息

    • Solrj @ Solr維基

    讓我們繼續(xù)創(chuàng)建我們的文檔類。

    在我的Spring Data Solr教程的第一部分中,我們了解到必須將每個todo條目的id , 描述和標(biāo)題存儲到Solr索引中。

    因此,我們可以按照以下步驟為待辦事項創(chuàng)建文檔類:

  • 創(chuàng)建一個名為TodoDocument的類。
  • id字段添加到TodoDocument類,并與@Field注解注釋字段。 使用@Id注釋對字段進(jìn)行注釋(由于id字段的名稱為'id',所以這不是必需的,但我想在此處演示其用法)。
  • 說明字段添加到TodoDocument類,并與@Field注解注釋這一領(lǐng)域。
  • 標(biāo)題字段添加到TodoDocument并與@Field注解注釋這一領(lǐng)域。
  • 在TodoDocument類的字段中創(chuàng)建getter方法。
  • 創(chuàng)建一個靜態(tài)內(nèi)部類,該內(nèi)部類用于構(gòu)建新的TodoDocument對象。
  • 將靜態(tài)getBuilder()方法添加到TodoDocument類。 此方法的實現(xiàn)返回一個新的TodoDocument.Builder對象。
  • TodoDocument類的源代碼如下所示:

    import org.apache.solr.client.solrj.beans.Field; import org.springframework.data.annotation.Id;public class TodoDocument {@Id@Fieldprivate String id;@Fieldprivate String description;@Fieldprivate String title;public TodoDocument() {}public static Builder getBuilder(Long id, String title) {return new Builder(id, title);}//Getters are omittedpublic static class Builder {private TodoDocument build;public Builder(Long id, String title) {build = new TodoDocument();build.id = id.toString();build.title = title;}public Builder description(String description) {build.description = description;return this;}public TodoDocument build() {return build;}} }

    創(chuàng)建存儲庫界面

    Spring Data Solr存儲庫的基本接口是SolrCrudRepository <T,ID>接口,每個存儲庫接口都必須擴(kuò)展此接口。

    當(dāng)擴(kuò)展SolrCrudRepository <T,ID>接口時,我們必須提供兩個類型參數(shù),下面將對其進(jìn)行描述:

    • T type參數(shù)表示我們的文檔類的類型。
    • ID類型參數(shù)表示文檔ID的類型。 Spring Data Solr(版本1.0.0.RC1)要求文檔的ID為String 。

    我們可以按照以下步驟創(chuàng)建存儲庫接口:

  • 創(chuàng)建一個名為TodoDocumentRepository的接口。
  • 擴(kuò)展SolrCrudRepository接口,并提供我們的文檔類的類型及其ID作為類型參數(shù)。
  • TodoDocumentRepository接口的源代碼如下所示:

    import org.springframework.data.solr.repository.SolrCrudRepository;public interface TodoDocumentRepository extends SolrCrudRepository<TodoDocument, String> { }

    創(chuàng)建服務(wù)

    下一步是創(chuàng)建使用創(chuàng)建的Solr存儲庫的服務(wù)。 我們可以按照以下步驟創(chuàng)建此服務(wù):

  • 創(chuàng)建服務(wù)接口。
  • 實現(xiàn)創(chuàng)建的接口。
  • 下面將更詳細(xì)地描述這些步驟。

    創(chuàng)建服務(wù)接口

    我們的服務(wù)接口聲明了以下兩種方法:

    • void addToIndex(Todo todoEntry)方法將todo條目添加到索引。
    • void deleteFromIndex(Long id)方法從索引中刪除待辦事項。

    注意:我們可以使用addToIndex()方法將新的待辦事項添加到Solr索引中,并更新現(xiàn)有待辦事項的信息。 如果現(xiàn)有文檔的ID與新文檔的ID相同,則將刪除舊文檔,并將新文檔的信息保存到Solr索引中(有關(guān)更多詳細(xì)信息 ,請參見SchemaXML @ Solr Wiki )。

    TodoIndexService接口的源代碼如下所示:

    public interface TodoIndexService {public void addToIndex(Todo todoEntry);public void deleteFromIndex(Long id); }

    實施創(chuàng)建的接口

    我們通過執(zhí)行以下步驟來實現(xiàn)服務(wù)接口:

  • 創(chuàng)建我們的服務(wù)類的框架實現(xiàn)。
  • 實現(xiàn)用于將文檔添加到Solr索引的方法。
  • 實現(xiàn)用于從Solr索引中刪除文檔的方法。
  • 下面將更詳細(xì)地描述這些步驟。

    創(chuàng)建服務(wù)類的框架實現(xiàn)

    我們可以按照以下步驟創(chuàng)建服務(wù)接口的框架實現(xiàn):

  • 創(chuàng)建一個名為RepositoryTodoIndexService的類,并使用@Service注釋對該類進(jìn)行注釋。 該注釋將該類標(biāo)記為服務(wù),并確保在類路徑掃描期間將檢測到該類。
  • 將TodoDocumentRepository字段添加到RepositoryTodoIndexService類,并使用@Resource注釋對該字段進(jìn)行注釋。 該注釋指示Spring IoC容器將實際的存儲庫實現(xiàn)注入服務(wù)的存儲庫字段。
  • 我們的虛擬服務(wù)實現(xiàn)的源代碼如下所示:

    import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoIndexService implements TodoIndexService {@Resourceprivate TodoDocumentRepository repository;//Add methods here }

    將文檔添加到Solr索引

    我們可以按照以下步驟創(chuàng)建將新文檔添加到Solr索引的方法:

  • 將addToIndex()方法添加到RepositoryTodoIndexService類中,并使用@Transactional注釋對該方法進(jìn)行注釋。 這確保了我們的Spring Data Solr存儲庫將參與Spring托管的事務(wù) 。
  • 通過使用構(gòu)建器模式創(chuàng)建一個新的TodoDocument對象。 設(shè)置創(chuàng)建的文檔的id , 標(biāo)題和描述 。
  • 通過調(diào)用TodoDocumentRepository接口的save()方法將文檔添加到Solr索引中。
  • 創(chuàng)建的方法的源代碼如下所示:

    import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoIndexService implements TodoIndexService {@Resourceprivate TodoDocumentRepository repository;@Transactional@Overridepublic void addToIndex(Todo todoEntry) {TodoDocument document = TodoDocument.getBuilder(todoEntry.getId(), todoEntry.getTitle()).description(todoEntry.getDescription()).build();repository.save(document);}//Add deleteFromIndex() method here }

    從Solr索引中刪除文檔

    我們可以按照以下步驟創(chuàng)建一種從Solr索引中刪除文檔的方法:

  • 將deleteFromIndex()方法添加到RepositoryTodoDocumentService類,并使用@Transactional注釋對該方法進(jìn)行注釋。 這確保了我們的Spring Data Solr存儲庫將參與Spring托管的事務(wù) 。
  • 通過調(diào)用TodoDocumentRepository接口的delete()方法從Solr索引中刪除文檔。
  • 創(chuàng)建的方法的源代碼如下所示:

    import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoIndexService implements TodoIndexService {@Resourceprivate TodoDocumentRepository repository;//Add addToIndex() method here@Transactional@Overridepublic void deleteFromIndex(Long id) {repository.delete(id.toString());} }

    使用創(chuàng)建的服務(wù)

    我們的最后一步是使用我們先前創(chuàng)建的服務(wù)。 我們可以通過對RepositoryTodoService類進(jìn)行以下修改來做到這一點:

  • 將TodoIndexService字段添加到RepositoryTodoService類,并使用@Resource批注對此字段進(jìn)行批注。 該注釋指示Spring IoC容器將創(chuàng)建的RepositoryTodoIndexService對象注入到服務(wù)的indexService字段中。
  • 調(diào)用在RepositoryTodoService類的add()方法的TodoIndexService接口的addToIndex()方法。
  • 調(diào)用在RepositoryTodoService類的deleteById()方法TodoIndexService接口的deleteFromIndex()方法。
  • 調(diào)用在RepositoryTodoService類的update()方法的TodoIndexService接口的addToIndex()方法。
  • RepositoryTodoService的源代碼如下所示:

    import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource; import java.util.List;@Service public class RepositoryTodoService implements TodoService {@Resourceprivate TodoIndexService indexService;@Resourceprivate TodoRepository repository;@PreAuthorize("hasPermission('Todo', 'add')")@Transactional@Overridepublic Todo add(TodoDTO added) {Todo model = Todo.getBuilder(added.getTitle()).description(added.getDescription()).build();Todo persisted = repository.save(model);indexService.addToIndex(persisted);return persisted;}@PreAuthorize("hasPermission('Todo', 'delete')")@Transactional(rollbackFor = {TodoNotFoundException.class})@Overridepublic Todo deleteById(Long id) throws TodoNotFoundException {Todo deleted = findById(id);repository.delete(deleted);indexService.deleteFromIndex(id);return deleted;}@PreAuthorize("hasPermission('Todo', 'update')")@Transactional(rollbackFor = {TodoNotFoundException.class})@Overridepublic Todo update(TodoDTO updated) throws TodoNotFoundException {Todo model = findById(updated.getId());model.update(updated.getDescription(), updated.getTitle());indexService.addToIndex(model);return model;} }

    摘要

    我們已經(jīng)成功創(chuàng)建了一個應(yīng)用程序,該應(yīng)用程序?qū)⑽臋n添加到Solr索引并從中刪除文檔。 這篇博客文章告訴我們以下內(nèi)容:

    • 我們了解了如何創(chuàng)建文檔類。
    • 我們了解到可以通過擴(kuò)展SolrCrudRepository接口來創(chuàng)建Spring Data Solr存儲庫。
    • 我們了解到,Spring Data Solr默認(rèn)情況下假設(shè)文檔的id字段的名稱為'id'。 但是,我們可以通過使用@Id注釋對id字段進(jìn)行注釋來覆蓋此設(shè)置。
    • 我們了解到,目前Spring Data Solr(版本1.0.0.RC1)期望文檔的ID為String 。
    • 我們了解了如何向Solr索引添加文檔以及從中刪除文檔。
    • 我們了解到,Spring Data Solr存儲庫可以參與Spring托管的事務(wù)。

    我的Spring Data Solr教程的下一部分描述了如何使用查詢方法從Solr索引中搜索信息 。

    PS此博客條目的示例應(yīng)用程序可從Github獲得 。

    參考: Spring Data Solr教程: Petri Kainulainen博客上來自我們的JCG合作伙伴 Petri Kainulainen的CRUD(幾乎) 。

    翻譯自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-crud-almost.html

    solr crud

    總結(jié)

    以上是生活随笔為你收集整理的solr crud_Spring Data Solr教程:CRUD(差不多)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。