重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章给大家分享的是有关 使用MongoDB和Spring Boot怎么创建一个CRUD应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
站在用户的角度思考问题,与客户深入沟通,找到仁布网站设计与仁布网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请、雅安服务器托管、企业邮箱。业务覆盖仁布地区。
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 = localhostspring.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{ 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 ResponseEntitygetAllBooks(@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怎么创建一个CRUD应用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。