javascript
solr crud_Spring Data Solr教程:CRUD(差不多)
solr crud
在我的Spring Data Solr教程的上一部分中,我們學(xué)習(xí)了如何配置Spring Data Solr。 現(xiàn)在該邁出一步,了解我們?nèi)绾喂芾鞸olr實(shí)例中存儲(chǔ)的信息。 此博客文章描述了我們?nèi)绾蜗騍olr索引添加新文檔,如何更新現(xiàn)有文檔的信息以及如何從索引中刪除文檔。
通過執(zhí)行以下步驟,我們可以對(duì)示例應(yīng)用程序進(jìn)行必要的修改:
以下各節(jié)將更詳細(xì)地描述這些步驟。
注意 :這些博客條目提供了其他信息,可幫助我們理解此博客條目中描述的概念:
- 使用Maven運(yùn)行Solr
- Spring Data Solr教程:Solr簡(jiǎn)介
- Spring Data Solr教程:配置
創(chuàng)建文檔類
第一步是創(chuàng)建一個(gè)文檔類,其中包含添加到Solr索引中的信息。 文檔類基本上只是一個(gè)POJO,它通過遵循以下規(guī)則來實(shí)現(xiàn):
- @Field批注用于在POJO的字段和Solr文檔的字段之間創(chuàng)建鏈接。
- 如果Bean的字段名稱與文檔的字段名稱不同,則必須以@Field批注的值給出文檔的字段名稱。
- @Field批注可以應(yīng)用于字段或setter方法。
- Spring Data Solr默認(rèn)情況下假設(shè)文檔的id字段的名稱為'id'。 我們可以通過使用@Id注釋對(duì)id字段進(jìn)行注釋來覆蓋此設(shè)置。
- Spring Data Solr(版本1.0.0.RC1)要求文檔ID的類型為String 。
更多信息 :
- Solrj @ Solr維基
讓我們繼續(xù)創(chuàng)建我們的文檔類。
在我的Spring Data Solr教程的第一部分中,我們了解到必須將每個(gè)todo條目的id , 描述和標(biāo)題存儲(chǔ)到Solr索引中。
因此,我們可以按照以下步驟為待辦事項(xiàng)創(chuàng)建文檔類:
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)建存儲(chǔ)庫(kù)界面
Spring Data Solr存儲(chǔ)庫(kù)的基本接口是SolrCrudRepository <T,ID>接口,每個(gè)存儲(chǔ)庫(kù)接口都必須擴(kuò)展此接口。
當(dāng)擴(kuò)展SolrCrudRepository <T,ID>接口時(shí),我們必須提供兩個(gè)類型參數(shù),下面將對(duì)其進(jìn)行描述:
- T type參數(shù)表示我們的文檔類的類型。
- ID類型參數(shù)表示文檔ID的類型。 Spring Data Solr(版本1.0.0.RC1)要求文檔的ID為String 。
我們可以按照以下步驟創(chuàng)建存儲(chǔ)庫(kù)接口:
TodoDocumentRepository接口的源代碼如下所示:
import org.springframework.data.solr.repository.SolrCrudRepository;public interface TodoDocumentRepository extends SolrCrudRepository<TodoDocument, String> { }創(chuàng)建服務(wù)
下一步是創(chuàng)建使用創(chuàng)建的Solr存儲(chǔ)庫(kù)的服務(wù)。 我們可以按照以下步驟創(chuàng)建此服務(wù):
下面將更詳細(xì)地描述這些步驟。
創(chuàng)建服務(wù)接口
我們的服務(wù)接口聲明了以下兩種方法:
- void addToIndex(Todo todoEntry)方法將todo條目添加到索引。
- void deleteFromIndex(Long id)方法從索引中刪除待辦事項(xiàng)。
注意:我們可以使用addToIndex()方法將新的待辦事項(xiàng)添加到Solr索引中,并更新現(xiàn)有待辦事項(xiàng)的信息。 如果現(xiàn)有文檔的ID與新文檔的ID相同,則將刪除舊文檔,并將新文檔的信息保存到Solr索引中(有關(guān)更多詳細(xì)信息 ,請(qǐng)參見SchemaXML @ Solr Wiki )。
TodoIndexService接口的源代碼如下所示:
public interface TodoIndexService {public void addToIndex(Todo todoEntry);public void deleteFromIndex(Long id); }實(shí)施創(chuàng)建的接口
我們通過執(zhí)行以下步驟來實(shí)現(xiàn)服務(wù)接口:
下面將更詳細(xì)地描述這些步驟。
創(chuàng)建服務(wù)類的框架實(shí)現(xiàn)
我們可以按照以下步驟創(chuàng)建服務(wù)接口的框架實(shí)現(xiàn):
我們的虛擬服務(wù)實(shí)現(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索引的方法:
創(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索引中刪除文檔的方法:
創(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ù)。 我們可以通過對(duì)RepositoryTodoService類進(jìn)行以下修改來做到這一點(diǎn):
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)建了一個(gè)應(yīng)用程序,該應(yīng)用程序?qū)⑽臋n添加到Solr索引并從中刪除文檔。 這篇博客文章告訴我們以下內(nèi)容:
- 我們了解了如何創(chuàng)建文檔類。
- 我們了解到可以通過擴(kuò)展SolrCrudRepository接口來創(chuàng)建Spring Data Solr存儲(chǔ)庫(kù)。
- 我們了解到,Spring Data Solr默認(rèn)情況下假設(shè)文檔的id字段的名稱為'id'。 但是,我們可以通過使用@Id注釋對(duì)id字段進(jìn)行注釋來覆蓋此設(shè)置。
- 我們了解到,目前Spring Data Solr(版本1.0.0.RC1)期望文檔的ID為String 。
- 我們了解了如何向Solr索引添加文檔以及從中刪除文檔。
- 我們了解到,Spring Data Solr存儲(chǔ)庫(kù)可以參與Spring托管的事務(wù)。
我的Spring Data Solr教程的下一部分描述了如何使用查詢方法從Solr索引中搜索信息 。
PS此博客條目的示例應(yīng)用程序可從Github獲得 。
翻譯自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-crud-almost.html
solr crud
總結(jié)
以上是生活随笔為你收集整理的solr crud_Spring Data Solr教程:CRUD(差不多)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何0基础入门原画学习如何学电脑从0开始
- 下一篇: 如何找回忘记密码电脑上如何找回qq密码