Spring Boot整合Mongodb
参考博客: https://www.cnblogs.com/ityouknow/p/6828919.html, https://blog.csdn.net/stronglyh/article/details/81024588
MongoDB 简介
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C++语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前 NoSql 数据库中比较热门的一种。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB 对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
MongoDB 中的一条记录就是一个文档,是一个数据结构,由字段和值对组成。MongoDB 文档与 JSON 对象类似。字段的值有可能包括其它文档、数组以及文档数组。MongoDB 支持 OS X、Linux 及 Windows 等操作系统,并提供了 Python,PHP,Ruby,Java及 C++ 语言的驱动程序,社区中也提供了对 Erlang 及 .NET 等平台的驱动程序。
MongoDB 的适合对大量或者无固定格式的数据进行存储,比如:日志、缓存等。对事物支持较弱,不适用复杂的多文档(多表)的级联查询。文中演示 Mongodb 版本为 3.5。
mongodb的安装在这就不累述了,win版本的去官网下载,然后一直下一步即可,安装完之后需要db位置,类似命令如下mkdir db,然后进入到mongodb安装目录MongoDB\Server\4.0\bin,执行命令mongod --dbpath XX路径/db
然后再MongoDB\Server\4.0\bin目录下执行命令mongo.exe,即可进入mongodb语句输入栏
我们在mongo命令栏中输入show databases;看到默认有三个数据库,也可以使用命令 show dbs
Springboot中增加MongoDB
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> </dependencies>
在 application.properties 中添加配置, 其中name是用户名,pass是密码
spring.data.mongodb.uri = mongodb://name:pass@localhost:27017/test
多个 IP 集群可以采用以下配置:
spring.data.mongodb.uri = mongodb://user:pwd@ip1:port1,ip2:port2/database
application.yml内容如下: 由于我是本地安装的mongodb,所以没有用户名和密码; 有用户名和密码的按照上面的格式写.
spring:
data:
mongodb:
uri: mongodb://localhost:27017/test
#uri: mongodb://192.168.1.1:20000,192.168.1.2:20000,192.168.252.12:20000/test
MongoTestC.java
package com.example.smybatis.controller; import com.example.smybatis.dao.MongoTestDao; import com.example.smybatis.model.MongoTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MongoTestC { @Autowired private MongoTestDao mtdao; @GetMapping(value="/test1") public void saveTest() throws Exception { MongoTest mgtest=new MongoTest(); mgtest.setId(11); mgtest.setAge(33); mgtest.setName("ceshi"); mtdao.saveTest(mgtest); } @GetMapping(value="/test2") public MongoTest findTestByName(){ MongoTest mgtest= mtdao.findTestByName("ceshi"); System.out.println("mgtest is "+mgtest); return mgtest; } @GetMapping(value="/test3") public void updateTest(){ MongoTest mgtest=new MongoTest(); mgtest.setId(11); mgtest.setAge(44); mgtest.setName("ceshi2"); mtdao.updateTest(mgtest); } @GetMapping(value="/test4") public void deleteTestById(){ mtdao.deleteTestById(11); } }
MongoTestDao.java
package com.example.smybatis.dao; import com.example.smybatis.model.MongoTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; @Component public class MongoTestDao { @Autowired private MongoTemplate mongoTemplate; /** * 创建对象 */ public void saveTest(MongoTest test) { mongoTemplate.save(test); } /** * 根据用户名查询对象 * @return */ public MongoTest findTestByName(String name) { Query query=new Query(Criteria.where("name").is(name)); MongoTest mgt = mongoTemplate.findOne(query , MongoTest.class); return mgt; } /** * 更新对象 */ public void updateTest(MongoTest test) { Query query=new Query(Criteria.where("id").is(test.getId())); Update update= new Update().set("age", test.getAge()).set("name", test.getName()); //更新查询返回结果集的第一条 mongoTemplate.updateFirst(query,update,MongoTest.class); //更新查询返回结果集的所有 // mongoTemplate.updateMulti(query,update,TestEntity.class); } /** * 删除对象 * @param id */ public void deleteTestById(Integer id) { Query query=new Query(Criteria.where("id").is(id)); mongoTemplate.remove(query,MongoTest.class); } }
MongoTest.java
package com.example.smybatis.model; public class MongoTest { private Integer id; private Integer age; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
下面我们启动程序进行测试
1)新增
我们先在浏览器输入http://localhost:1234/test1
调用了controller中的新增方法,此时数据库应该有值,我们执行相关命令看一下
我们发现,我们使用use test命令创建新库的时候,当库里还没有表的时候,我们使用show dbs是看不到这个库的,
当我们在浏览器敲了回车之后,我们发现可以看到test库了,同时test库中也有了mongoTest表,使用db.mongoTest.find()命令就可以看到数据了,符合要求
2)查询
我们在浏览器输入http://localhost:1234/test2
即可查看到刚才插入的那条数据
3)修改
我们在浏览器输入http://localhost:1234/test3
然后去数据库看一下
果然发生了变化
4)删除
我们在浏览器输入http://localhost:1234/test4
然后去数据库看一下
我们发现,数据没有了,因为已经被删掉了,但是表还是存在的,库也可以看到