怎么在Spring Boot中使用MongoDB数据库

54次阅读
没有评论

共计 4759 个字符,预计需要花费 12 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章给大家介绍怎么在 Spring Boot 中使用 MongoDB 数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

MongoDB 简介

MongoDB 是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键 / 值存储方式(提供了高性能和高度伸缩性)和传统的 RDBMS 系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。

MongoDB 支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型,也因为他的存储格式也使得它所存储的数据在 Nodejs 程序应用中使用非常流畅。

既然称为 NoSQL 数据库,Mongo 的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

但是,MongoDB 也不是万能的,同 MySQL 等关系型数据库相比,它们在针对不同的数据类型和事务要求上都存在自己独特的优势。在数据存储的选择中,坚持多样化原则,选择更好更经济的方式,而不是自上而下的统一化。

较常见的,我们可以直接用 MongoDB 来存储键值对类型的数据,如:验证码、Session 等;由于 MongoDB 的横向扩展能力,也可以用来存储数据规模会在未来变的非常巨大的数据,如:日志、评论等;由于 MongoDB 存储数据的弱类型,也可以用来存储一些多变 json 数据,如:与外系统交互时经常变化的 JSON 报文。而对于一些对数据有复杂的高事务性要求的操作,如:账户交易等就不适合使用 MongoDB 来存储。

MongoDB 官网

访问 MongoDB

在 Spring Boot 中,对如此受欢迎的 MongoDB,同样提供了自配置功能。

引入依赖

Spring Boot 中可以通过在 pom.xml 中加入 spring-boot-starter-data-mongodb 引入对 mongodb 的访问支持依赖。它的实现依赖 spring-data-mongodb。是的,您没有看错,又是 spring-data 的子项目,之前介绍过 spring-data-jpa、spring-data-redis,对于 mongodb 的访问,spring-data 也提供了强大的支持,下面就开始动手试试吧。

compile org.springframework.boot:spring-boot-starter-data-mongodb:$spring_boot_version

完整 build.gradle

group  name.quanke.kotlin 
version  1.0-SNAPSHOT 
buildscript {
 ext.kotlin_version =  1.2.10 
 ext.spring_boot_version =  1.5.4.RELEASE 
 ext.springfox_swagger2_version =  2.7.0 
 ext.mysql_version =  5.1.21 
 repositories { mavenCentral()
 }
 dependencies {
 classpath  org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version 
 classpath(org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version)
// Kotlin 整合 SpringBoot 的默认无参构造函数,默认把所有的类设置 open 类插件
 classpath(org.jetbrains.kotlin:kotlin-noarg:$kotlin_version)
 classpath(org.jetbrains.kotlin:kotlin-allopen:$kotlin_version)
 }
apply plugin:  kotlin 
apply plugin:  kotlin-spring  // See https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin
apply plugin:  org.springframework.boot 
apply plugin:  kotlin-jpa  //https://stackoverflow.com/questions/32038177/kotlin-with-jpa-default-constructor-hell
jar {
 baseName =  chapter11-6-4-service 
 version =  0.1.0 
repositories { mavenCentral()
dependencies {
 compile  org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version 
 compile(org.jetbrains.kotlin:kotlin-reflect:${kotlin_version} )
 compile  org.springframework.boot:spring-boot-starter-web:$spring_boot_version 
// compile  org.springframework.boot:spring-boot-starter-data-jpa:$spring_boot_version 
 compile  org.springframework.boot:spring-boot-starter-data-mongodb:$spring_boot_version 
 testCompile  org.springframework.boot:spring-boot-starter-test:$spring_boot_version 
 testCompile  org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version 
compileKotlin {
 kotlinOptions.jvmTarget =  1.8 
compileTestKotlin { kotlinOptions.jvmTarget =  1.8}

快速开始使用 Spring-data-mongodb

若 MongoDB 的安装配置采用默认端口,那么在自动配置的情况下,我们不需要做任何参数配置,就能马上连接上本地的 MongoDB。下面直接使用 spring-data-mongodb 来尝试对 mongodb 的存取操作。(记得 mongod 启动您的 mongodb)

创建要存储的 User 实体,包含属性:id、username、age

import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document
@Document
data class User(@Id var id: Long? = -1, var username: String =  , val age: Int? = 0)

实现 User 的数据访问对象:UserRepository

import name.quanke.kotlin.chaper11_6_4.entity.User
import org.springframework.data.mongodb.repository.MongoRepository
import org.springframework.stereotype.Repository
 * Created by http://quanke.name on 2018/1/11.
 */
@Repository
interface UserRepository : MongoRepository User, Long  { fun findByUsername(username: String): User
}

通过上面的例子,我们可以轻而易举的对 MongoDB 进行访问,但是实战中,应用服务器与 MongoDB 通常不会部署于同一台设备之上,这样就无法使用自动化的本地配置来进行使用。这个时候,我们也可以方便的配置来完成支持,只需要在 application.properties 中加入 mongodb 服务端的相关配置,具体示例如下:

参数配置

在 application.yml 文件中增加

spring:
 data:
 mongodb:
 uri: mongodb://192.168.2.53:27017/test

在尝试此配置时,记得在 mongo 中对 test 库创建具备读写权限的用户(用户名为 name,密码为 pass),不同版本的用户创建语句不同,注意查看文档做好准备工作

若使用 mongodb 2.x,也可以通过如下参数配置,该方式不支持 mongodb 3.x。

spring:
 data:
 mongodb:
 host: mongodb:localhost spring.data.mongodb.port=27017

单元测试

import name.quanke.kotlin.chaper11_6_4.entity.User
import name.quanke.kotlin.chaper11_6_4.repository.UserRepository
import org.apache.commons.logging.LogFactory
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
 * Created by http://quanke.name on 2018/1/9.
 */
@RunWith(SpringRunner::class)
@SpringBootTest
class ApplicationTests { val log = LogFactory.getLog(ApplicationTests::class.java)!!
 @Autowired
 lateinit var userRepository: UserRepository
 @Test
 fun `redis string test `() { userRepository.save(User(1L,  quanke , 30))
 userRepository.save(User(2L,  quanke.name , 40))
 log.info(数据总条数:${userRepository.count()} )
 log.info(用户名字为  quanke : ${userRepository.findByUsername( quanke)} )
 }
}

关于怎么在 Spring Boot 中使用 MongoDB 数据库就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计4759字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)