Spring Boot 快速上手(六)集成MongoDB
来源:互联网 发布:淘宝otc货到付款可信吗 编辑:程序博客网 时间:2024/05/19 02:00
1.MongoDB的下载和启动
①下载MongoDB
MongoDB的官网地址是https://www.mongodb.com,进入官网首页,点击右上角的,进入下载页:这里选择下载红色框中的社区版软件,依然是使用Windows版本做演示,直接点击DOWNLOAD(msi),得到安装文件mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed.msi。
此外,也可以选择从下面地址中下载Windows版本的MongoDB:http://dl.mongodb.org/dl/win32;相应的Linux版本下载地址为:http://dl.mongodb.org/dl/linux;OSX版本下载地址为:http://dl.mongodb.org/dl/osx。
②安装MongoDB
运行下载得到的MongoDB文件mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed.msi,这里选择了自定义安装,安装路径为D:\soft\MongoDB\Server\3.4。安装完成后进入该文件夹,可看到文件夹内结构如下:
在该文件夹内新建文件夹data,然后在data中新建文件夹db,用来存放接下来的数据文件。
③配置环境变量
新增环境变量MONGODB_HOME,变量值为MongoDB的安装路径D:\soft\MongoDB\Server\3.4;在Path变量中追加MongoDB的配置%MONGODB_HOME%\bin。④启动MongoDB
启动命令行窗口,执行如下命令:mongod -dbpath "D:\soft\MongoDB\Server\3.4\data\db",执行结果如下:此时即已开启MongoDB的服务端。
如果不想每次启动MongoDB服务时都要打开命令窗口,也可以创建一个.bat文件,文件名可定为MongoDB-startup.bat,文件内容如下:
@echo 启动MongoDBset dbpath="D:\soft\MongoDB\Server\3.4\data\db"mongod -dbpath %dbpath%@pause使用MongoDB-startup.bat重新启动MongoDB服务,启动效果与上述命令窗口一样。由于已经在环境变量中配置了MongoDB,故此启动文件的存放位置没有硬性要求。
⑤MongoDB客户端
在MongoDB服务启动的情况下,运行D:\soft\MongoDB\Server\3.4\bin下的可执行文件mongo.exe,即可开启MongoDB的客户端,这里输入命令show dbs用以查询MongoDB中的所有数据库,其结果如下:可见此时存在两个数据库:admin以及local。
为了观察方便,也可以使用MongoDB的数据库管理软件,本文使用了robomongo,下载地址为https://robomongo.org/,当前最新版本支持MongoDB3.4,可以下载使用便携式版本robo3t-1.1.1-windows-x86_64-c93c6b0.zip。解压后启动客户端,数据库连接地址配置如下:
进入数据库,查看数据库,结果如下:
可见此时存在两个数据库:admin以及local。
2.MongoDB参数配置
①配置pom.xml
Spring Boot中使用MongoDB,需要在pom.xml中配置如下依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
②配置数据源参数
Spring Boot中MongoDB的配置项源码在org.springframework.boot.autoconfigure.mongo.MongoProperties中,其基本结构如下:@ConfigurationProperties(prefix = "spring.data.mongodb")public class MongoProperties {// Default port used when the configured port is {@code null}.public static final int DEFAULT_PORT = 27017;public static final String DEFAULT_URI = "mongodb://localhost/test";// Mongo server host. Cannot be set with uri.private String host;// Mongo server port. Cannot be set with uri.private Integer port = null;// Mongo database URI. Cannot be set with host, port and credentials.private String uri;// Database name.private String database;// Authentication database name.private String authenticationDatabase;// GridFS database name.private String gridFsDatabase;// Login user of the mongo server. Cannot be set with uri.private String username;// Login password of the mongo server. Cannot be set with uri.private char[] password;// Fully qualified name of the FieldNamingStrategy to use.private Class<?> fieldNamingStrategy;}由以上源码可知,MongoDB配置参数的前缀是spring.data.mongodb;并且,默认host是localhost,默认端口号是27017,默认使用的数据库是test;同时,由字段说明可知,uri参数与host、port、database、username、password是互斥的,配置参数时,二者只能选择其一。常用的配置如下:
## MongoDB# mongodb服务器地址(默认为localhost)#spring.data.mongodb.host=127.0.0.1# mongodb服务器连接端口(默认为27017)#spring.data.mongodb.port=27017# mongodb数据库(默认为test)#spring.data.mongodb.database=student# mongodb用户名#spring.data.mongodb.username=# mongodb密码#spring.data.mongodb.password=# URI,格式:mongodb://username:password@host:port/databasespring.data.mongodb.uri=mongodb://127.0.0.1:27017/student
3.使用MongoDB存储数据
①场景设计
为了方便展示使用MongoDB存储数据,先来设定一个使用场景,如下:现需要添加学生信息,学生的信息包括姓名、年龄,此外还有学生考试的课程名称及该课程的得分情况。②代码实现
首先,创建一个考试的实体类Exam:package net.xxpsw.demo.springboot.data.mongodb.entity;public class Exam {/** 课程 */private String course;/** 得分 */private Integer score;public Exam() {super();}public Exam(String course, Integer score) {super();this.course = course;this.score = score;}public String getCourse() {return course;}public void setCourse(String course) {this.course = course;}public Integer getScore() {return score;}public void setScore(Integer score) {this.score = score;}}其次,创建一个学生的实体类Student:
package net.xxpsw.demo.springboot.data.mongodb.entity;import java.util.Collection;import org.springframework.data.annotation.Id;import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "student_exams")public class Student {@Idprivate String id;private String name;private Integer age;private Collection<Exam> exams;public Student() {super();}public Student(String name, Integer age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Collection<Exam> getExams() {return exams;}public void setExams(Collection<Exam> exams) {this.exams = exams;}}在学生实体类Student中,@Document注解映射了模型和MongoDB的文档,其中collection属性表明了MongoDB中使用的文档名称;而@Id注解表明了该属性为文档的Id。
然后,创建MongoDB的数据操作接口StudentExamRepository:
package net.xxpsw.demo.springboot.data.mongodb.dao;import org.springframework.data.mongodb.repository.MongoRepository;import net.xxpsw.demo.springboot.data.mongodb.entity.Student;public interface StudentExamRepository extends MongoRepository<Student, String> {}最后,创建控制类MongoDBController:
package net.xxpsw.demo.springboot.data.mongodb;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import net.xxpsw.demo.springboot.data.mongodb.dao.StudentExamRepository;@RestController@RequestMapping("mongo")public class MongoDBController {Logger log = LoggerFactory.getLogger(this.getClass());@Autowiredprivate StudentExamRepository studentExamRepository;}
③数据存储
在控制类MongoDBController中添加如下方法:/*** @Description: 使用MongoDB保存数据* @return Student */@RequestMapping("save")public Student save() {Student student = new Student("Jack", 26);Collection<Exam> exams = new LinkedHashSet<Exam>();exams.add(new Exam("高等代数", 90));exams.add(new Exam("线性几何", 88));exams.add(new Exam("大学英语", 95));student.setExams(exams);return studentExamRepository.save(student);}启动Spring Boot,于浏览器中访问http://localhost:8088/demo/mongo/save,页面返回如下数据:
此时使用MongoDB客户端查看,可以看到数据库中已经新增了一个库student,并且该库中存在一个文档student_exams,查看该文档,结构如下:
此时数据即已保存至MongoDB中。除了录入的属性外,student_exams文档中还包含属性_class和_id,其中_class为与MongoDB文档映射的实体类,而_id的生成基于当前时间戳,源码包路径org.bson.types.ObjectId。
4.读取MongoDB中的数据
①使用Example查询
查询MongoDB数据可以使用Example,Example的包路径是org.springframework.data.domain.Example;在控制类MongoDBController中添加如下方法:/*** @Description: 使用Example查询MongoDB数据* @param name 姓名* @param age 年龄* @return Student */@RequestMapping("findByExample")public Student findByExample(String name, Integer age) {Student student = new Student(name, age);return studentExamRepository.findOne(Example.of(student));}在浏览器中访问http://localhost:8088/demo/mongo/findByExample?name=Jack&age=26,页面结果如下:
这里展示的信息即为之前保存在MongoDB中的数据。
②通过属性查询
通过实体类Student中的属性也可以查询MongoDB的数据,在数据访问接口StudentExamRepository中添加如下方法:public List<Student> findByName(String name);在控制类MongoDBController中添加如下方法:
/*** @Description: 通过属性查询MongoDB数据* @param name 姓名* @return List<Student> */@RequestMapping("findByProperty")public List<Student> findByProperty(String name) {return studentExamRepository.findByName(name);}在浏览器中访问http://localhost:8088/demo/mongo/findByProperty?name=Jack,结果如下:
③使用查询语句查询
查询MongoDB的数据还可以使用查询语句,在数据访问接口StudentExamRepository中添加如下方法:@Query("{'age':?0}")public Student withQueryFindByAge(Integer age);在控制类MongoDBController中添加如下方法:
/*** @Description: 使用查询语句查询MongoDB数据* @param age 年龄* @return Student */@RequestMapping("findWithQuery")public Student findWithQuery(Integer age) {return studentExamRepository.withQueryFindByAge(age);}于浏览器中访问http://localhost:8088/demo/mongo/findWithQuery?age=26,得到结果如下:
使用以上方式均可实现对MongoDB数据的查询。
阅读全文
0 0
- Spring Boot 快速上手(六)集成MongoDB
- Spring Boot 快速上手(五)集成Redis
- Spring Boot 快速上手(七)集成ActiveMQ
- Spring Boot 快速上手(八)集成Thymeleaf
- spring-boot集成MongoDB
- spring boot集成mongodb
- spring boot 集成 mongodb
- Spring Boot集成MongoDB
- Spring Boot集成MongoDB
- Spring Boot集成mongoDB(十二)
- Spring Boot 快速上手(一)快速搭建
- (三)spring-boot集成MongoDB
- [转]Spring Boot 揭秘与实战(一) 快速上手
- Spring Boot 快速上手(二)基本配置
- Spring Boot 快速上手(三)数据操作
- Spring Boot 快速上手(四)事务使用
- Spring boot 六 集成 MyBatis
- Spring Boot(六)集成Spring session redis
- 用Verilog HDL语言实现UART通信
- leetcode题解-8. String to Integer (atoi)
- 复归
- Python 字符串操作方法大全
- 阿里云服务器ces
- Spring Boot 快速上手(六)集成MongoDB
- 30 个常用 Maven 命令
- JZOJ 5444. 【NOIP2017提高A组冲刺11.2】救赎
- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- 用php获取本周,上周,本月,上月,本季度日期的代码
- 有一种策略...
- Java基础总结篇--JavaSE你必须要知道的基础
- Monkey自动化测试
- freemarker 循环list 并取值