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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Data Solr教程:将自定义方法添加到单个存储库

發布時間:2023/12/3 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Data Solr教程:将自定义方法添加到单个存储库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我的Spring Data Solr教程的前一部分教我們如何使用查詢方法創建靜態查詢。 自然而然的下一步將是描述如何使用Spring Data Solr創建動態查詢。 但是,在繼續討論該主題之前,我們必須了解如何將自定義方法添加到單個存儲庫。 這篇博客文章將幫助我們了解如何完成。 在此博客條目期間,我們將修改示例應用程序 ,以使用稱為部分更新的技術將todo條目的信息更新為Solr索引。 讓我們從仔細研究Solr的部分更新功能開始。

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

  • 使用Maven運行Solr
  • Spring Data Solr教程:Solr簡介
  • Spring Data Solr教程:配置
  • Spring Data Solr教程CRUD(幾乎)

什么是部分更新?

Solr 4.0中引入了部分更新功能,它使我們可以選擇要更新的字段。 如果索引整個文檔的內容很慢,這將非常有用。

但是,部分更新功能有其局限性。 如果要使用部分更新功能,則必須存儲文檔的所有字段,這會增加Solr索引的大小。 這樣做的原因是不可能對Lucene索引進行部分更新。 Lucene總是在索引新文檔之前刪除舊文檔。 這意味著,如果不存儲未更新的字段,則在對文檔進行部分更新時,這些字段的值會丟失。

決定哪個對我們更重要是我們的工作:速度或索引的大小。

通過查看以下資源,我們可以獲得有關部分更新的更多信息:

  • Solr 4.0:部分文檔更新
  • Solr –文檔的部分更新@ StackOverflow
  • Solr –將新字段更新為現有文檔@ StackOverflow

讓我們繼續學習如何將自定義方法添加到單個Spring Data Solr存儲庫中。

將自定義方法添加到單個存儲庫

我們可以按照以下步驟將自定義方法添加到單個存儲庫中:

  • 創建一個自定義接口,該接口聲明自定義方法。
  • 實現自定義界面。
  • 修改存儲庫接口以擴展定制接口。
  • 在以下小節中將更詳細地描述這些步驟。

    創建自定義界面

    首先,我們必須創建一個接口并在其中聲明自定義方法。 我們可以按照以下步驟進行操作:

  • 創建一個名為PartialUpdateRepository的接口。
  • 聲明自定義方法。
  • 因為我們只需要聲明一個用于更新待辦事項信息的自定義方法,所以PartialUpdateRepository接口的源代碼如下所示:

    public interface PartialUpdateRepository {public void update(Todo todoEntry); }

    實施自定義界面

    其次,我們必須實現PartialUpdateRepository接口。 存儲庫基礎結構嘗試使用以下規則自動檢測實現自定義存儲庫接口的類:

    • 必須從與定制接口相同的包中找到定制存儲庫接口的實現。
    • 必須使用以下公式來創建實現自定義存儲庫接口的類的名稱 : [實際存儲庫接口的名稱] [存儲庫實現后綴] 。

    存儲庫實現后綴的默認值為“ Impl”。 我們可以使用以下方法之一覆蓋默認值:

    • 如果使用Java配置,則可以通過將首選后綴設置為@EnableSolrRepositories批注的repositoryImplementationPostfix屬性的值來配置使用的后綴。
    • 如果使用XML配置,則可以通過將首選postfix設置為repository名稱空間元素的repository-impl-postfix屬性的值來配置使用的postfix。

    此博客條目的示例應用程序使用默認配置。 因此,我們可以按照以下步驟實現PartialUpdateRepository接口:

  • 創建一個名為TodoDocumentRepositoryImpl的類。
  • 用@Repository批注對類進行批注。
  • 將SolrTemplate字段添加到類中,并使用@Resource注釋對該字段進行注釋。
  • 實現update()方法。
  • 讓我們仔細看看update()方法的實現。 我們可以通過執行以下步驟來實現此方法:

  • 創建一個新的PartialUpdate對象。 將文檔的id字段的名稱及其值設置為構造函數參數。
  • 將已更新字段的名稱和值設置為創建的對象。
  • 通過調用SolrTemplate類的saveBean()方法進行部分更新。
  • 通過調用SolrTemplate類的commit()方法來提交更改。
  • TodoRepositoryImpl類的源代碼如下所示:

    import org.springframework.data.solr.core.SolrTemplate; import org.springframework.data.solr.core.query.PartialUpdate; import org.springframework.stereotype.Repository;import javax.annotation.Resource;@Repository public class TodoDocumentRepositoryImpl implements PartialUpdateRepository {@Resourceprivate SolrTemplate solrTemplate;@Overridepublic void update(Todo todoEntry) {PartialUpdate update = new PartialUpdate("id", todoEntry.getId().toString());update.add("description", todoEntry.getDescription());update.add("title", todoEntry.getTitle());solrTemplate.saveBean(update);solrTemplate.commit();} }

    修改存儲庫界面

    通過擴展PartialUpdateRepository接口,我們可以使自定義update()方法對存儲庫的用戶可見。 TodoDocumentRepository接口的源代碼如下所示:

    import org.springframework.data.solr.repository.SolrCrudRepository;public interface TodoDocumentRepository extends PartialUpdateRepository, SolrCrudRepository<TodoDocument, String> {//Query methods are omitted. }

    讓我們繼續前進,了解如何使用我們的新存儲庫方法。

    使用自定義方法

    我們可以通過對示例應用程序進行以下更改來使用自定義update()方法:

  • 將update()方法添加到TodoIndexService接口。
  • 實現update()方法。
  • 修改RepositoryTodoService類的update()方法以使用新方法。
  • 在以下小節中將更詳細地描述這些步驟。

    向TodoIndexService接口添加新方法

    我們記得, TodoIndexRepository接口聲明了一些方法,這些方法用于向Solr索引添加信息,從Solr索引中搜索信息并從索引中刪除文檔。

    我們必須向該接口添加新方法。 此方法稱為update() ,它將更新的Todo對象作為方法參數。 TodoIndexRepository接口的源代碼如下所示:

    public interface TodoIndexService {//Other methods are omitted.public void update(Todo todoEntry); }

    實施添加的方法

    通過執行以下步驟,我們可以實現TodoIndexService接口的update()方法:

  • 將update()方法添加到RepositoryIndexService類,并使用@Transactional注釋對方法進行注釋。 這確保了我們的Spring Data Solr存儲庫將參與Spring托管的事務 。
  • 調用update()存儲庫方法,并將更新的Todo對象作為方法參數傳遞。
  • RepositoryTodoIndexService類的源代碼如下所示:

    import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoIndexService implements TodoIndexService {@Resourceprivate TodoDocumentRepository repository;//Other fields and methods are omitted.@Transactional@Overridepublic void update(Todo todoEntry) {repository.update(todoEntry);} }

    修改RepositoryTodoService類

    我們的最后一步是修改RepositoryTodoService類的update()方法,以使用在TodoIndexService接口中聲明的新update()方法。 RepositoryTodoService類的相關部分如下所示:

    import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;@Service public class RepositoryTodoService implements TodoService {@Resourceprivate TodoIndexService indexService;@Resourceprivate TodoRepository repository;//Other methods are omitted.@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.update(model);return model;} }

    摘要

    現在,我們已經向單個Spring Data Solr存儲庫添加了一個自定義方法,并實現了使用Solr的部分更新功能的更新功能。 本教程教了我們兩件事:

    • 我們知道如何將自定義方法添加到單個Spring Data Solr存儲庫。
    • 我們知道,只有存儲了文檔的所有字段( 存儲屬性的值為true),我們才可以使用部分更新。

    我的Spring Data Solr教程的下一部分描述了如何利用從該博客文章中學到的技能來使用Spring Data Solr創建動態查詢 。

    PS此博客條目的示例應用程序可從Github獲得 。

    參考: Spring Data Solr教程:在Petri Kainulainen博客上,從我們的JCG合作伙伴 Petri Kainulainen 向單個存儲庫添加自定義方法 。

    翻譯自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-adding-custom-methods-to-a-single-repository.html

    總結

    以上是生活随笔為你收集整理的Spring Data Solr教程:将自定义方法添加到单个存储库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。