Spring Boot+MongoDB项目搭建

来源:互联网 发布:人工智能 伏羲觉醒 编辑:程序博客网 时间:2024/04/29 15:10

MongoDB是一个基于文档(Document)的存储型的数据库,使用面向对象的思想,每一条数据记录都是文档的对象。

- 1.Spring对MongoDB的支持

Spring对MongoDB的支持主要是通过Spring Data MongoDB来实现的,Spring Data MongoDB为我们提供了如下功能

(1).Object/Document映射注解支持
JPA提供了一套Object/Relation映射的注解(@Entity,@Id),而Spring Data MongoDB也提供了注解。
@Document:映射领域对象与MongoDB的一个文档
@Id:映射当前属性是ID
@DbRef:当前属性将参考其他的文档
@Field:为文档的属性定义名称
@Version:将当前属性作为版本

(2).MongoTemplate
像JdbcTemplate一样,Spring Data MongoDB也为我们提供了一个MongoTemplate,MongoTemplate为我们提供了数据访问的方法。我们还需要为MongoClient以及MongoDbFactory来配置数据库连接属性。

(3).Repository的支持
类似于Spring Data JPA,Spring Data MongoDB也提供了Repository的支持,使用方式和Spring Data JPA一致。如下:
Public interface PersonRepository extends MongoRepository

2.Spring Boot对MongoDB的支持

Spring Boot对MongoDB的支持位于org.springframework.boot.autoconfigure.mongo
主要配置数据库连接、MongoTemplate。我们可以使用以”spring.data.mongodb”为前缀的属性来配置MongoDB相关的信息。Spring Boot为我们提供了一些默认的属性,如默认MongoDB的端口为27017、默认服务器为localhost、默认数据库为test。

为我们开启了对Repository的支持,即自动为我们配置了@EnableMongoRepositories。
所以我们在Spring Boot下使用MongoDB只需引入spring-boot-starter-data-mongodb依赖即可,无须任何配置。

3.实战

(1).安装MongoDB
非Docker安装:若不使用Docker作为安装方式,则我们可以访问https://www.mongodb.org/downloads来下周适合自己当前操作系统的版本来安装MongoDB。
Docker安装:下载好MongoDB的Docker镜像,然后运行命令
docker run -d -p 27017:27017 mongo,运行好后,记得在VirtualBox做一次端口映射,如图:
这里写图片描述

MongoDB数据库管理软件可使用Robomongo,下载地址:http://robomongo.org,运行软件如下图:

这里写图片描述

(2).搭建Spring Boot项目
搭建Spring Boot项目,依赖为MongoDB(spring-boot-starter-data-mongodb)和Web(spring-boot-starter-web)。

项目结构与配置如下:

这里写图片描述

(3).领域模型
本例的领域模型是人(Person),包含他工作过的地点(Location)。这个虽然和关系型数据库的一对多类似,但是还是不一样,Location的数据只属于某个人。

实体Person源码:
这里写图片描述
省略了getter、setter方法

代码解释:
1.@Document注解映射领域模型和MongoDB的文档
2.@Id注解表明这个属性为文档的Id
3.@Field注解此属性在文档中的名称为locs,locations属性将以数组形式存在当前数据记录中

实体Locations源码:
这里写图片描述
省略了getter、setter方法

数据访问PersonRepository源码如下:
这里写图片描述

代码解释:
1.支持@Query查询,查询参数构造JSON字符串即可

控制器Controller源码如下:

这里写图片描述

(4).测试

访问http://localhost:8085/save 测试保存,页面如下:

这里写图片描述

我们可以在RoboMongo中查看保存后的数据,如图:

这里写图片描述
访问http://localhost:8085/find?name=chris,如图:
这里写图片描述

访问http://localhost:8085/query?age=20,如图:
这里写图片描述

原创粉丝点击