春季数据 MongoDB
Spring Data MongoDB使Spring Boot应用程序与Mongo文档数据库集成成为可能。它提供了一个MongoRepository ,包含用于执行MongoDB CRUD操作的所有方法。
在我们开始之前,我们将需要以下内容。
先决条件
- 在您的计算机上安装[JDK]。
- 你喜欢的IDE。我将使用[Intellij IDEA]社区版。
- 对[Java]和[Spring Boot]有一些了解。
- 在你的电脑上安装[MongoDB]。
MongoDB术语
- 数据库是一个集合的容器,可以被认为是RDBMS数据库,它是一个表的容器。
- 集合相当于RDBMS中的表,但与表不同,它有一个动态模式。一个集合存在于一个数据库中。
- 文档是MongoDB集合中的一条记录。它可以被认为是RDBMS中的一个行。
- 字段这是一个有零个或多个字段的文档。它就像RDBMS的列,有一个键值对。
- 嵌入文档是一种有效和干净的方式来存储相关数据,特别是经常一起访问的数据。
- 主键唯一地识别了一个文档。
创建应用程序
我们将使用[spring initializr]来创建我们的应用程序。
- 在浏览器中打开[Spring initializr]。
- 选择语言为Kotlin。
- 添加
Spring Web,Spring Data MongoDB, dependencies。 - 将其他配置保留为默认,然后点击生成项目。
- 解压下载的项目,并在你喜欢的IDE中打开它。我将使用[Intelij IDEA社区],它是免费提供的。
- 将项目与maven同步,下载所有的依赖项。
领域层
在我们应用程序的根包中,创建一个名为domain 的包。
在我们上面创建的领域包中创建一个名为Todo.kt 的Kotlin文件,并将下面的代码片段添加到该文件中。
import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document
@Document(collection = "todo")
data class Todo(
@Id
val id: String,
var title: String,
var description: String,
var isCompleted: Boolean
)
-
@Document(collection = "todo")注解将 数据类标记为MongoDB文件,该文件将被存储在 集合下。Todotodo -
@Id标记 字段为MongoDB集合中的唯一对象ID。id
控制器层
在我们应用程序的根包中,创建一个名为controllers 的包。
创建一个名为TodoController.kt 的Kotlin文件,并添加以下代码片段。
@RestController
@RequestMapping("/api/v1/todos/")
@CrossOrigin("*")
class TodoController(val todoService: TodoService) {
//Get all todos in the database
@GetMapping("")
fun getAllTodos(): ResponseEntity<List<Todo>> {
return ResponseEntity(todoService.getTodos(), HttpStatus.OK)
}
//Get Todo from the database by id
@GetMapping("/{id}")
fun getTodoById(@PathVariable("id") id: String): ResponseEntity<Todo> {
return ResponseEntity(todoService.getTodoById(id), HttpStatus.OK)
}
//save a todo into the database
@PostMapping("")
fun saveTodo(@RequestBody todo: Todo): ResponseEntity<Any> {
return ResponseEntity(todoService.saveTodo(todo), HttpStatus.CREATED)
}
//update todo
@PutMapping("")
fun updateTodo(@RequestBody todo: Todo): ResponseEntity<Any> {
return ResponseEntity(todoService.updateTodo(todo), HttpStatus.OK)
}
//delete todo
@DeleteMapping("/{id}")
fun deleteTodo(@PathVariable("id") id: String): ResponseEntity<Any> {
return ResponseEntity(todoService.deleteTodo(id), HttpStatus.NO_CONTENT)
}
}
-
@CrossOrigin注释配置了允许的起源。它也被称为 , 允许运行在不同域上的应用程序进行通信。corscors -
@RestController注解定义了一个控制器,并指出方法的返回值应该被绑定到网络响应体。 -
@RequestMapping声明控制器中的所有API的URL将以 开始。/api/v1/todos/
存储库层
在我们应用程序的根包中创建一个名为repository 的包,并在repository 包中创建一个名为TodoRepository.kt 的Kotlin文件,添加以下代码片段。
interface TodoRepository : MongoRepository<Todo, String> {
}
interface TodoRepository扩展 接口,该接口包含所有我们要用来查询MongoDB集合的CRUD函数。MongoRepository
服务层
在根项目包中,创建一个名为service 的包,并添加两个Kotlin文件TodoService.kt,TodoServiceImpl ,代码片段如下。
interface TodoService {
fun saveTodo(todo: Todo)
fun getTodos(): List<Todo>
fun getTodoById(id: String): Todo
fun deleteTodo(id: String)
fun updateTodo(todo: Todo)
}
@Service
class TodoServiceImpl(val todoRepository: TodoRepository) : TodoService {
override fun saveTodo(todo: Todo) {
todoRepository.save(todo)
}
override fun getTodos(): List<Todo> {
return todoRepository.findAll()
}
override fun getTodoById(id: String): Todo {
val todoQueried: Optional<Todo> = todoRepository.findById(id)
if (todoQueried.isPresent) {
return todoQueried.get()
} else {
throw IllegalStateException("Todo with id $id not found")
}
}
override fun deleteTodo(id: String) {
todoRepository.deleteById(id)
}
override fun updateTodo(todo: Todo) {
val todoQueried: Optional<Todo> = todoRepository.findById(todo.id)
if (todoQueried.isPresent) {
val _todo = todoQueried.get()
_todo.description = todo.description
_todo.isCompleted = todo.isCompleted
_todo.title = todo.title
todoRepository.save(_todo)
} else {
throw IllegalStateException("Todo with id ${todo.id} is not found")
}
}
}
配置
在本地连接到MongoDB在资源目录中,在IDE中打开application.properties 文件并添加以下配置。
spring.data.mongodb.database=todo_db
spring.data.mongodb.port=27017
-
spring.data.mongodb.database=todo_db表示我们的数据库名称是 。todo_db -
spring.data.mongodb.port=27017表示我们将通过端口 连接到 mongodb 。27017
连接到Mongo Atlas
-
访问Mongo Atlas并创建一个账户。
-
点击
Database Access边上的菜单,添加一个数据库用户。

- 点击
Cluster边上的菜单并创建一个数据库。

- 在
Cluster边上的菜单上,点击connect,选择连接方法为connect your application。复制连接字符串。

- 在
application.properties文件中添加以下配置。
#spring.data.mongodb.database=todo_db
#spring.data.mongodb.port=27017
spring.data.mongodb.uri=mongodb+srv://<username>:<password>@cluster0.vlohf.mongodb.net/<database>?retryWrites=true&w=majority
- 将
<username>,<password>, 和<database>改为你在Mongo Atlas中创建的凭证。
总结
你现在已经学会了如何在Kotlin和MongoDB中创建一个Spring Boot CRUD API,在Todo 数据类中添加字段dateCreated 和lastModified 。