严重参考:https://blog.csdn.net/stronglyh/article/details/81024588
今天主要讲的是Spring Boot和Mongodb整合
在pom文件引入spring-boot-starter-data-mongodb依赖:
org.springframework.boot
spring-boot-starter-data-mongodb
如果mongodb端口是默认端口,并且没有设置密码,可不配置,sprinboot会开启默认的。
spring.data.mongodb.uri=mongodb://localhost:27017/springboot-db
mongodb设置了密码,这样配置:
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/dbname
然后在MongoDB\Server\4.0\bin目录下执行命令mongo.exe,即可进入mongodb语句输入栏
我们在mongo命令栏中输入show databases;看到默认有三个数据库,也可以使用命令 show dbs
下面我们直接进入代码操作
看下代码结构和涉及到的代码分布从上到下依次是MongoTestC.java,MongoTestDao.java,MongoTest.java,application.yml
分别对应着页面跳转类,操作mongodb数据库的类和实体类以及配置文件(此处只是做个demo,所以没有写service层,相关操作都写到了Controller中去了)
MongoTestC.java
package com.hust.springbootmongodb.controller;
import com.hust.springbootmongodb.dao.MongoTestDao;
import com.hust.springbootmongodb.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.hust.springbootmongodb.dao;
import com.hust.springbootmongodb.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.hust.springbootmongodb.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;
}
}
application.properties
spring.data.mongodb.uri=mongodb://localhost:27017/springboot-db
此处我用的是本地安装的mongodb,所以没有用户名和密码,有用户名和密码的格式是
spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/springboot-db,其中name是用户名,pass是密码
如果要配置多个数据库,则中间用","分割,例如
spring.data.mongodb.uri=mongodb://192.168.1.1:20000,192.168.1.2:20000,192.168.252.12:20000/springboot-db
下面我们启动程序进行测试
1)新增
我们先在浏览器输入http://localhost:8080/test1
调用了controller中的新增方法,此时数据库应该有值,我们执行相关命令看一下
我们发现,我们使用use test命令创建新库的时候,当库里还没有表的时候,我们使用show dbs是看不到这个库的,
当我们在浏览器敲了回车之后,我们发现可以看到test库了,同时test库中也有了mongoTest表,使用db.mongoTest.find()命令就可以看到数据了,符合要求
2)查询
我们在浏览器输入http://localhost:8080/test2
即可查看到刚才插入的那条数据
3)修改
我们在浏览器输入http://localhost:8080/test3
然后去数据库看一下
果然发生了变化
4)删除
我们在浏览器输入http://localhost:8080/test4
然后去数据库看一下
我们发现,数据没有了,因为已经被删掉了,但是表还是存在的,库也可以看到
贴士:有童鞋问我,如果是阿里云如何连接,阿里云分内外网ip,如果本地要连接,同时还受防火墙等影响,建议询问运维同事