本文来说下SpringBoot整合MongoDB的几个问题
文章目录
MongoDB概述
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
MySql | MongoDB |
---|---|
数据库 | 数据库 |
表 | 集合 |
行 | 文档 |
记录 | 字段 |
程序实例
开发环境
IDEA、Maven、SpringBoot2.0.4、Jdk1.8、MongoDB4.0、MongoDB Compass Community、Swagger
Maven相关配置
在pox.xml文件中添加spring-boot-starter-data-mongodb引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
资源文件yml配置
这里使用yml配置方式
server:
port: 8031
spring:
application:
name: spirng-boot-mongodb
data:
mongodb:
host: localhost #同127.0.0.1
port: 27017
database: test #指定操作的数据库
创建实体类
创建实体类
package cn.yiyiyun.oral.app.hohandle.mongodb;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
private Long id;
//价格
private Integer price;
//书名
private String name;
//简介
private String info;
//出版社
private String publish;
//创建时间
private Date createTime;
//修改时间
private Date updateTime;
}
创建service接口
创建service接口
package cn.yiyiyun.oral.app.hohandle.service;
import cn.yiyiyun.oral.app.hohandle.mongodb.Book;
import java.util.List;
public interface IMongoDBService {
String saveObj();
List<Book> findAll();
Book getBookById(String id);
Book getBookByName(String name);
String deleteBookById(String id);
String updateBook();
}
创建service实现类
创建service实现类
package cn.yiyiyun.oral.app.hohandle.service.impl;
import cn.yiyiyun.oral.app.hohandle.mongodb.Book;
import cn.yiyiyun.oral.app.hohandle.service.IMongoDBService;
import com.mongodb.client.result.DeleteResult;
import lombok.extern.slf4j.Slf4j;
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.Service;
import java.util.Date;
import java.util.List;
@Service
@Slf4j
public class MongoDBServiceImpl implements IMongoDBService {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 保存对象
* @return
*/
@Override
public String saveObj() {
Book book = new Book();
book.setId(200L);
book.setPrice(200);
book.setName("Java核心技术");
book.setInfo("Java核心技术是一本很好的学习Java的书籍");
book.setPublish("人民邮电出版社");
book.setCreateTime(new Date());
book.setUpdateTime(new Date());
log.info("--------------------->[MongoDB save start]");
mongoTemplate.save(book);
log.info("--------------------->[MongoDB save end]");
return "添加成功";
}
/***
* 查询所有
* @return
*/
@Override
public List<Book> findAll() {
log.info("--------------------->[MongoDB find start]");
return mongoTemplate.findAll(Book.class);
}
/***
* 根据ID
* 来查询
* @param id
* @return
*/
@Override
public Book getBookById(String id) {
log.info("--------------------->[MongoDB find start]");
Query query = new Query(Criteria.where("_id").is(Long.parseLong(id)));
return mongoTemplate.findOne(query, Book.class);
}
/***
* 根据名称
* 来查询
* @param name
* @return
*/
@Override
public Book getBookByName(String name) {
log.info("--------------------->[MongoDB find start]");
Query query = new Query(Criteria.where("name").is(name));
return mongoTemplate.findOne(query, Book.class);
}
/***
* 删除对象
* @param id
* @return
*/
@Override
public String deleteBookById(String id) {
log.info("--------------------->[MongoDB delete start]");
Book book = this.getBookById(id);
DeleteResult dr = mongoTemplate.remove(book);
//表示删除的条数
log.info("--------------------->" + dr.getDeletedCount());
log.info("--------------------->[MongoDB delete end]");
return "success";
}
/***
* 更新对象
* @return
*/
@Override
public String updateBook() {
//构造一个book对象
Book book = new Book();
book.setId(10L);
book.setPrice(70);
book.setName("PYTHON从入门到精通");
book.setInfo("PYTHON从入门到精通是一本很好的学习书籍");
book.setPublish("人民邮电出版社");
book.setCreateTime(new Date());
book.setUpdateTime(new Date());
log.info("--------------------->[MongoDB update start]");
Query query = new Query(Criteria.where("_id").is(book.getId()));
Update update = new Update().set("publish", book.getPublish())
.set("info", book.getInfo())
.set("updateTime", new Date());
//updateFirst-->更新查询返回结果集的第一条
mongoTemplate.updateFirst(query, update, Book.class);
log.info("--------------------->[MongoDB update end]");
return "success";
}
}
创建controller层
创建controller层
package cn.yiyiyun.oral.app.hohandle.controller;
import cn.yiyiyun.oral.app.handle.response.ResponseBean;
import cn.yiyiyun.oral.app.hohandle.mongodb.Book;
import cn.yiyiyun.oral.app.hohandle.service.IMongoDBService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/mongodb")
@Api(tags = "mongodb数据库开发测试")
public class MongoDBController {
@Autowired
private IMongoDBService iMongoDBService;
@GetMapping("/saveObj")
@ApiOperation(value = "saveObj")
public ResponseBean<?> saveObj(){
String str = iMongoDBService.saveObj();
if(str == null){
return new ResponseBean<>(200, "fail", str);
}
return new ResponseBean<>(200, "success", str);
}
@GetMapping("/findAll")
@ApiOperation(value = "findAll")
public ResponseBean<?> findAll(){
List<Book> data = iMongoDBService.findAll();
if(data == null){
return new ResponseBean<>(200, "fail", data);
}
return new ResponseBean<>(200, "success", data);
}
@GetMapping("/getBookById")
@ApiOperation(value = "getBookById")
public ResponseBean<?> getBookById(@RequestParam("id") @ApiParam(value="id",required = true) String id){
Book data = iMongoDBService.getBookById(id);
if(data == null){
return new ResponseBean<>(200, "fail", data);
}
return new ResponseBean<>(200, "success", data);
}
@GetMapping("/getBookByName")
@ApiOperation(value = "getBookByName")
public ResponseBean<?> getBookByName(@RequestParam("name") @ApiParam(value="name",required = true) String name){
Book data = iMongoDBService.getBookByName(name);
if(data == null){
return new ResponseBean<>(200, "fail", data);
}
return new ResponseBean<>(200, "success", data);
}
@GetMapping("/deleteBookById")
@ApiOperation(value = "deleteBookById")
public ResponseBean<?> deleteBookById(@RequestParam("id") @ApiParam(value="id",required = true) String id){
String data = iMongoDBService.deleteBookById(id);
if(data == null){
return new ResponseBean<>(200, "fail", data);
}
return new ResponseBean<>(200, "success", data);
}
@GetMapping("/updateBook")
@ApiOperation(value = "updateBook")
public ResponseBean<?> updateBook(){
String data = iMongoDBService.updateBook();
if(data == null){
return new ResponseBean<>(200, "fail", data);
}
return new ResponseBean<>(200, "success", data);
}
}
返回响应码
Controller层返回的响应码
package cn.yiyiyun.oral.app.handle.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author
* 返回值类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseBean<T> {
private Integer code;
private String msg;
private T data;
}
Swagger接口测试
Swagger接口测试,接口都是调试可以通过的
本文小结
本文介绍了SpringBoot整合MongoDB来保存一些常见的实体类,在没有事务的时候,其实和mysql使用上差别不大,还更加具有灵活性。后续会继续介绍SpringBoot整合MongoDB来保存图片,文本,PDF,Word,excel等。