为什么选择MongoDB,而不是其它的数据库。
在SQL和NoSQL之间有一个大的争论。
在SQL中,创建Tables。
在NoSQL中,我们不维持这个结构。
为什么这样重要。
因为SQL在19世纪70年代变得流行的时候,在那时存储是昂贵的。
我们需要确保使用最小的存储,这样我们可以存储最大量的数据。
这是SQL类型表的意义。
在当前的世界,我们有如此多的非结构化的数据,不能够基于它们创建列。
如果你的表被创建,而想要添加一个新列。
这在SQL中是令人头痛的事,我们不希望在这里使用SQL。
第二个情况是,你想要扩展应用。你想要数据库的复制品。
在SQL中是很难做的。
当然,你可以有复制品。但是同步它是很困难的。
NoSQL在这方面胜出。
MongoDB是NoSQL的数据库。没有Tables,而是Collections。
SQL中用行来存储数据。
在NoSOL中是一个Document。
Documents是Collections的一部分。
不需要为MongoDB安装软件,因为会使用云服务,这个技能集合是很重要的。
其次,需要创建一个MongoDB Service。
MongoDB Atlas。
可以选择AWS,Google Cloud或者Azure。
将在本地环境中使用,连接在自己机器上运行的应用。
仅仅允许自己的机器使用数据库。
这样就部署好了数据库。
Cluster被创建了,还没有创建数据库。
可以点击Browse Collection来浏览数据库。
Collection相当于SQL中的Table。
在Collection里面创建数据库名称,和Collection名称。
为了连接应用到MongoDB,必须要指明MongoDB在哪。
首先,你的MongoDB在系统中,还是在云端上。
第二,你的数据库名是什么,用户名和密码是什么。
在resource目录的application.propertiesl里,可以做这些配置。
现在,想要发送请求到服务端。在Spring框架中,我们使用Spring MVC。
首先创建数据实体,一个Pojo(Plain Ordinary Java Object)
映射Java类到Document。
@Document(collection = "name")
建立一个一对多的关系时,
@DocumentReference
导致数据库仅仅存储条目的Id,称为手动索引关系。
也有其它的方法在MongoDB中创建关系。
接下来创建Controller。
@RestController
@RequestMapping("/api/v1/name")
返回值为ResponseEntity。HttpStatus.OK返回值类型是200。
curl -i http://localhost:8080/api/v1/name
任何适当的RestAPI 都应该返回合适的状态码。
接下来,尝试从数据库中拉一些数据。
在Core Java JDBC中需要写很多步骤。
在Spring Data中比较容易。
不需要写任何的方法,任何的实现。
不需要写任何的方法,不需要创建任何的类来实现。
MogoRepository将负责所有的CRUD操作。
需要一个Repository类。
Repository是Interface类型。
extends MongoRepository<DataType, IdType>
@Repository,框架知道这是一个Repository。
一旦我们创建了这个Repository。
创建一个Service类,不需要继承任何类。
@Service
在这个类中,将写数据库访问的代码。
在Service类中,需要一个Repository的引用。
@Autowired意味着Springboot将为你创建一个对象。
findAll方法在MongoRepository中被描述。
可以直接使用MongoRepository中的方法。
再返回到Controller,需要一个Service类的引用。
Controller,返回一个HttpStatus.OK的状态码。它并不知道在Service类中做的是什么事情。
当返回到Service类中,这是大部分业务逻辑的地方。
Service类使用了Repository类,和数据库交互,并且返回到API层。
最后Reoisitory层,也就是数据访问层,实际上和数据库交互,获取到数据回来。
在Controller类中
@PathVariable让框架知道。
findById方法可能不能发现一个Item数据,也许你传递的Id不存咋。
所以在这样的情况下,将要返回Null。
需要让Java知道可能返回Null,通过Optional。
不想暴露Collection实体的ID到公共场合,使用另一个imdbId
尽管Repository有用法Id查询的内置的方法,但是却没有搜索imdbId的内置方法,所以我们需要自己实现。
实现它很容易,因为有自动查询。
find<DocumentName>By<YourId>
仅仅通过命名这个方法,MongoDB数据。
Spring Data MongoDB将会理解我们在尝试做什么,它是如此的智能化。
属性名需要时唯一的。因为如果不是唯一的,
已经学习到了Repository作为和数据库交互的一种方式,另一种方式是使用MongoTemplate。
有时候可能有不能够在Repository中实现的复杂的操作。
或者,尽管你可以再Repository中实现它,也并不适合。
这个时候我们需要Template,我们可以通过Template来形成一个新的动态查询,不使用Repository在数据库中完成工作。
mongoTemplate.update(<ClassName>.class)
.matching(Criteria.where("idName").is(idName))
.apply(new Update().push("keyName").value(valueName))
.first();
使用template来执行一个update调用
复习上面的过程,我们采用了一个mongoTemplate,使用它来更新document中的一项数据。
有时,你必须自己编写一些复杂的业务逻辑。
Controller中创建一个Post请求
public ResponseEntity<Item> createItem(@RequestBody Map<String, String> payload) {
}
在Postman中测试请求,先创建一个Collection。
raw改为Json format。
这样就可以从用户处接收Json数据,key是String类型,value也是String类型。
从这个Map中,可以取得数据。
这就是如何用Springboot来创建一个新的后端API。
接下来进一步可以学习authorization(授权)和anthentication(认证)。文章来源:https://www.toymoban.com/news/detail-731448.html
也可以学习更加复杂的关系。文章来源地址https://www.toymoban.com/news/detail-731448.html
到了这里,关于Spring MongoDB的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!