暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用MongoDB和Spring Boot创建 CRUD应用示例

码农译站 2021-03-02
303


介绍

在这篇文章中,我将展示如何使用Spring Boot和MongoDB构建一个简单的CRUD REST应用程序示例。我知道你的第一个问题是MongoDB是什么?

MongoDB是什么?

MongoDB是一个NoSQL文档数据库。在这个数据库中,记录是document,其行为很像JSON对象。所以它主要是键值对。

使用MongoDB作为数据库的主要优点是:

  • MongoDB是一种无模式文档数据库。一个集合包含不同的文档。
  • 单个对象的结构是清晰的。
  • 没有复杂的连接。
  • 深查询能力。
  • 易于扩展。

以下是在企业应用中使用MongoDB或类似的NoSQL数据库的几个原因:

  • 更快的JSON数据检索。
  • 很容易在属性上添加索引。
  • 用于分片——分片是跨多台机器存储数据记录的过程。在跨多台机器存储数据时,通常会根据某些标准对数据进行分区。
  • 更新快。
  • 容易查询。

先决条件

要创建这个示例应用程序,你需要:

  • Spring Boot(版本2.4.1)
  • MongoDB
  • Gradle
  • Java

Spring Boot CRUD应用程序

作为本文的一部分,我将构建一个REST CRUD应用程序。这包括

  • 一个图书馆-我们将在MongoDB数据库中创建一个图书馆集合。

  • 我们将按作者来存放这些书。

  • 用户可以调用REST API按作者检索图书。

  • 用户可以调用REST API来检索图书馆中的所有图书。

  • POST - /v1/mongodbapp/books -添加一本书。

  • GET - /v1/mongodbapp/books——从库中检索所有的图书。

  • GET - /v1/mongodbapp/books/id -检索特定的图书。

  • DELETE—/v1/mongodbapp/books/id—从库中删除一本书。

如何使用MongoDB和Spring Boot CRUD

为了开始创建这个应用程序,我们将使用gradle来处理我们的依赖并构建应用程序。在Spring Boot应用程序中添加以下依赖项:

implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' 
implementation 'org.springframework.boot:spring-boot-starter-web'

一旦我们有了这些依赖,我们将能够连接到mongodb数据库。但是我们仍然需要添加数据库的位置。我们将在application.properties中添加所需的属性。如下:

spring.data.mongodb.host = localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=library

这将允许我们连接到运行在主机localhost上的端口27017上的MongoDB数据库,并且数据库是library。

定义数据模型

作为图书馆的一部分,我们将需要书籍。我们的主要数据对象是Book。这个数据模型将包括书名、作者和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注释覆盖了集合书籍。

添加Repository接口

我们需要一个Repository库接口来获取、保存或删除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);
}

这个Repository库有两个方法:可以通过标题或作者姓名获取图书。

添加Spring REST API控制器

现在,为了使我们的应用程序REST CRUD,我们将添加一个REST控制器。这个控制器将包含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控制器类。它包括

  • @RestController -将其标记为REST控制器。
  • @CrossOrigin -这个注释允许跨源资源共享(CORS)。这将在REST响应中添加CORS访问控制头。这些头是必需的,因为它允许服务器不仅指定谁可以访问资源,而且指定如何访问资源。
  • 我们添加了不同的方法——addabooktolilibrary将书籍添加到数据库,getAllBooks从数据库中检索书籍。



完整的演示

现在我们已经添加了REST控制器、Repository库方法,我们将构建并运行这个应用程序。作为演示的一部分,我将使用POSTMAN来访问API。

可以从命令行或正在使用的代码编辑器构建应用程序。我更喜欢命令行,所以我已经构建了应用程序。一旦编译完成,你就可以像下面这样运行程序:

java -jar mongodbapp-0.0.1-SNAPSHOT.jar

让我们用POSTMAN给我们的图书馆添加书籍。

如上所示,我们添加了一本书,响应将在数据库中显示已添加的书。

下面的API是一个GET API,用于从数据库中获取所有书籍。

现在,为了显示从库中删除图书,我们将使用delete API。

结论

在这篇文章中,我展示了如何在使用MongoDB数据库时使用Spring Boot创建REST API。我们使用的方法与使用常规SQL数据库时的方法非常相似。在使用NoSQL数据库时,我们必须添加一些更改。



文章转载自码农译站,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论