- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- 使用MongoDB和Spring Boot怎么創(chuàng )建一個(gè)CRUD應用
本篇文章給大家分享的是有關(guān) 使用和Spring Boot怎么創(chuàng )建一個(gè)CRUD應用,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習,希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著(zhù)小編一起來(lái)看看吧。
MongoDB是什么?
MongoDB是一個(gè)文檔數據庫。在這個(gè)數據庫中,記錄是document,其行為很像JSON對象。所以它主要是鍵值對。
使用MongoDB作為數據庫的主要優(yōu)點(diǎn)是:
MongoDB是一種無(wú)模式文檔數據庫。一個(gè)集合包含不同的文檔。
單個(gè)對象的結構是清晰的。
沒(méi)有復雜的連接。
深查詢(xún)能力。
易于擴展。
以下是在企業(yè)應用中使用MongoDB或類(lèi)似的的幾個(gè)原因:
更快的JSON數據檢索。
很容易在屬性上添加索引。
用于分片——分片是跨多臺機器存儲數據記錄的過(guò)程。在跨多臺機器存儲數據時(shí),通常會(huì )根據某些標準對數據進(jìn)行分區。
更新快。
容易查詢(xún)。
先決條件
要創(chuàng )建這個(gè)示例應用程序,你需要:
Spring Boot(版本2.4.1)
MongoDB
Gradle
Java
Spring Boot CRUD應用程序
作為本文的一部分,我將構建一個(gè)REST CRUD應用程序。這包括
一個(gè)圖書(shū)館-我們將在MongoDB數據庫中創(chuàng )建一個(gè)圖書(shū)館集合。
我們將按作者來(lái)存放這些書(shū)。
用戶(hù)可以調用REST API按作者檢索圖書(shū)。
用戶(hù)可以調用REST API來(lái)檢索圖書(shū)館中的所有圖書(shū)。
POST - /v1/mongodbapp/books -添加一本書(shū)。
GET - /v1/mongodbapp/books——從庫中檢索所有的圖書(shū)。
GET - /v1/mongodbapp/books/id -檢索特定的圖書(shū)。
DELETE—/v1/mongodbapp/books/id—從庫中刪除一本書(shū)。
如何使用MongoDB和Spring Boot CRUD
為了開(kāi)始創(chuàng )建這個(gè)應用程序,我們將使用gradle來(lái)處理我們的依賴(lài)并構建應用程序。在Spring Boot應用程序中添加以下依賴(lài)項:
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-starter-web'
一旦我們有了這些依賴(lài),我們將能夠連接到mongodb數據庫。但是我們仍然需要添加數據庫的位置。我們將在application.properties中添加所需的屬性。如下:
spring.data.mongodb.host = localhostspring.data.mongodb.port=27017 spring.data.mongodb.database=library
這將允許我們連接到運行在主機localhost上的端口27017上的MongoDB數據庫,并且數據庫是library。
定義數據模型
作為圖書(shū)館的一部分,我們將需要書(shū)籍。我們的主要數據對象是Book。這個(gè)數據模型將包括書(shū)名、作者和ISBN。具體內容如下:
package com.betterjavacode.mongodbdemo.mongodbapp.models;import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "books")public class Book{ @Id private String id; private String title; private String author; private String isbn; public Book() { } public Book(String title, String author, String isbn) { this.title = title; this.author = author; this.isbn = isbn; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; }}
因為我們使用的是MongoDB,所以@Document注釋覆蓋了集合書(shū)籍。
添加Repository接口
我們需要一個(gè)Repository庫接口來(lái)獲取、保存或刪除book對象。在repositories包中,我們將添加BookRepository接口:
package com.betterjavacode.mongodbdemo.mongodbapp.repositories;import com.betterjavacode.mongodbdemo.mongodbapp.models.Book;import org.springframework.data.mongodb.repository.MongoRepository;import java.util.List;public interface BookRepository extends MongoRepository<Book, String>{ List findByTitleContaining(String title); List findByAuthor(String name);}
這個(gè)Repository庫有兩個(gè)方法:可以通過(guò)標題或作者姓名獲取圖書(shū)。
添加Spring REST API控制器
現在,為了使我們的應用程序REST CRUD,我們將添加一個(gè)REST控制器。這個(gè)控制器將包含POST、PUT、GET和DELETE API。
package com.betterjavacode.mongodbdemo.mongodbapp.controller;import com.betterjavacode.mongodbdemo.mongodbapp.models.Book;import com.betterjavacode.mongodbdemo.mongodbapp.repositories.BookRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.*;import java.util.ArrayList;import java.util.List;import java.util.Optional;@CrossOrigin("http://localhost:8080")@RestController@RequestMapping("/v1/mongodbapp")public class BookController{ @Autowired BookRepository bookRepository; @GetMapping("/books") public ResponseEntity<List> getAllBooks(@RequestParam(required = false) String bookTitle) { try { List listOfBooks = new ArrayList<>(); if(bookTitle == null || bookTitle.isEmpty()) { bookRepository.findAll().forEach(listOfBooks::add);} else { bookRepository.findByTitleContaining(bookTitle).forEach(listOfBooks::add); } if (listOfBooks.isEmpty()) { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } return new ResponseEntity<>(listOfBooks, HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } } @GetMapping("/books/{id}") public ResponseEntity getBookById(@PathVariable("id") String id) { try { Optional bookOptional = bookRepository.findById(id); return new ResponseEntity<>(bookOptional.get(), HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } } @PostMapping("/books") public ResponseEntity addABookToLibrary(@RequestBody Book book) { try { Book createdBook = bookRepository.save(new Book(book.getTitle(), book.getAuthor(), book.getIsbn())); return new ResponseEntity<>(createdBook, HttpStatus.CREATED); } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } } @PutMapping("/books/{id}") public ResponseEntity updateABook(@PathVariable("id") String id, @RequestBody Book book) { Optional bookOptional = bookRepository.findById(id); if (bookOptional.isPresent()) { Book updatedBook = bookOptional.get(); updatedBook.setTitle(book.getTitle()); updatedBook.setAuthor(book.getAuthor()); updatedBook.setIsbn(book.getIsbn()); return new ResponseEntity<>(bookRepository.save(updatedBook), HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } @DeleteMapping("/books/{id}") public ResponseEntity deleteABook(@PathVariable("id") String id) { try { bookRepository.deleteById(id); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } catch (Exception e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } }}
BookController 是我們的REST控制器類(lèi)。它包括
@RestController -將其標記為REST控制器。
@CrossOrigin -這個(gè)注釋允許跨源資源共享(CORS)。這將在REST響應中添加CORS訪(fǎng)問(wèn)控制頭。這些頭是必需的,因為它允許不僅指定誰(shuí)可以訪(fǎng)問(wèn)資源,而且指定如何訪(fǎng)問(wèn)資源。
我們添加了不同的方法——addabooktolilibrary將書(shū)籍添加到數據庫,getAllBooks從數據庫中檢索書(shū)籍。
完整的演示
現在我們已經(jīng)添加了REST控制器、Repository庫方法,我們將構建并運行這個(gè)應用程序。作為演示的一部分,我將使用POSTMAN來(lái)訪(fǎng)問(wèn)API。
可以從命令行或正在使用的代碼編輯器構建應用程序。我更喜歡命令行,所以我已經(jīng)構建了應用程序。一旦編譯完成,你就可以像下面這樣運行程序:
java -jar mongodbapp-0.0.1-SNAPSHOT.jar
讓我們用POSTMAN給我們的圖書(shū)館添加書(shū)籍。
如上所示,我們添加了一本書(shū),響應將在數據庫中顯示已添加的書(shū)。
下面的API是一個(gè)GET API,用于從數據庫中獲取所有書(shū)籍。
現在,為了顯示從庫中刪除圖書(shū),我們將使用delete API。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站