javascript
Spring Data Solr教程:CRUD(差不多)
在我的Spring Data Solr教程的上一部分中,我們學習了如何配置Spring Data Solr。 現在該邁出一步,了解我們如何管理Solr實例中存儲的信息。 此博客文章描述了我們如何向Solr索引添加新文檔,如何更新現有文檔的信息以及如何從索引中刪除文檔。
通過執行以下步驟,我們可以對示例應用程序進行必要的修改:
以下各節將更詳細地描述這些步驟。
注意 :這些博客條目提供了其他信息,可幫助我們理解此博客條目中描述的概念:
- 使用Maven運行Solr
- Spring Data Solr教程:Solr簡介
- Spring Data Solr教程:配置
創建文檔類
第一步是創建一個文檔類,其中包含添加到Solr索引中的信息。 文檔類基本上只是一個POJO,它通過遵循以下規則來實現:
- @Field批注用于在POJO的字段和Solr文檔的字段之間創建鏈接。
- 如果Bean的字段名稱與文檔的字段名稱不同,則必須以@Field批注的值給出文檔的字段名稱。
- @Field批注可以應用于字段或setter方法。
- Spring Data Solr默認情況下假設文檔的id字段的名稱為'id'。 我們可以通過使用@Id注釋對id字段進行注釋來覆蓋此設置。
- Spring Data Solr(版本1.0.0.RC1)要求文檔ID的類型為String 。
更多信息 :
- Solrj @ Solr維基
讓我們繼續創建我們的文檔類。
在我的Spring Data Solr教程的第一部分中,我們了解到必須將每個todo條目的id , 描述和標題存儲到Solr索引中。
因此,我們可以按照以下步驟為待辦事項創建文檔類:
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;}} }創建存儲庫界面
Spring Data Solr存儲庫的基本接口是SolrCrudRepository <T,ID>接口,每個存儲庫接口都必須擴展此接口。
當擴展SolrCrudRepository <T,ID>接口時,我們必須提供兩個類型參數,下面將對其進行描述:
- T type參數表示我們的文檔類的類型。
- ID類型參數表示文檔ID的類型。 Spring Data Solr(版本1.0.0.RC1)要求文檔的ID為String 。
我們可以按照以下步驟創建存儲庫接口:
TodoDocumentRepository接口的源代碼如下所示:
import org.springframework.data.solr.repository.SolrCrudRepository;public interface TodoDocumentRepository extends SolrCrudRepository<TodoDocument, String> { }創建服務
下一步是創建使用已創建的Solr存儲庫的服務。 我們可以按照以下步驟創建此服務:
下面將更詳細地描述這些步驟。
創建服務接口
我們的服務接口聲明了以下兩種方法:
- void addToIndex(Todo todoEntry)方法將todo條目添加到索引。
- void deleteFromIndex(Long id)方法從索引中刪除待辦事項。
注意:我們可以使用addToIndex()方法將新的待辦事項添加到Solr索引中,并更新現有待辦事項的信息。 如果現有文檔的ID與新文檔的ID相同,則將刪除舊文檔,并將新文檔的信息保存到Solr索引(有關更多詳細信息 ,請參見SchemaXML @ Solr Wiki )。
TodoIndexService接口的源代碼如下所示:
public interface TodoIndexService {public void addToIndex(Todo todoEntry);public void deleteFromIndex(Long id); }實施創建的接口
通過執行以下步驟,我們可以實現服務接口:
下面將更詳細地描述這些步驟。
創建服務類的框架實現
通過執行以下步驟,我們可以創建服務接口的框架實現:
我們的虛擬服務實現的源代碼如下所示:
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索引
我們可以按照以下步驟創建將新文檔添加到Solr索引的方法:
創建的方法的源代碼如下所示:
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索引中刪除文檔
我們可以按照以下步驟創建一種從Solr索引中刪除文檔的方法:
創建的方法的源代碼如下所示:
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());} }使用創建的服務
我們的最后一步是使用我們先前創建的服務。 我們可以通過對RepositoryTodoService類進行以下修改來做到這一點:
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;} }摘要
我們已經成功創建了一個將文檔添加到Solr索引并從中刪除文檔的應用程序。 這篇博客文章告訴我們以下內容:
- 我們了解了如何創建文檔類。
- 我們了解到,可以通過擴展SolrCrudRepository接口來創建Spring Data Solr存儲庫。
- 我們了解到,Spring Data Solr默認情況下假設文檔的id字段的名稱為'id'。 但是,我們可以通過使用@Id注釋對id字段進行注釋來覆蓋此設置。
- 我們了解到,目前Spring Data Solr(版本1.0.0.RC1)期望文檔的ID為String 。
- 我們了解了如何將文檔添加到Solr索引并從中刪除文檔。
- 我們了解到,Spring Data Solr存儲庫可以參與Spring托管的事務。
我的Spring Data Solr教程的下一部分描述了如何使用查詢方法從Solr索引中搜索信息 。
PS此博客條目的示例應用程序可從Github獲得 。
翻譯自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-crud-almost.html
總結
以上是生活随笔為你收集整理的Spring Data Solr教程:CRUD(差不多)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux编程pdf百度网盘(linux
- 下一篇: Spring JpaRepository