作者:一一哥
MongoDB一词来自于英文单词“Humongous”,中文含义为“庞大”,是由C++语言编写的一个基于分布式文件存储的高性能,开源,无模式的文档型数据库,属于当前NoSql数据库中比较热门的一种,可以应用于各种规模的企业、各个行业以及各类应用程序中。
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,而MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB中的collection对应了关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
MongoDB支持的数据结构非常松散,是类似于json的bjson格式,因此可以存储比较复杂的数据类型。以下是MongoDB的数据机构类型图:

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
我们按照之前的经验,创建一个web程序,并将之改造成Spring Boot项目,具体过程略。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>server:
port: 8080
spring:
application:
name: spirng-boot-mongodb
data:
mongodb:
host: localhost #同127.0.0.1
port: 27017
database: db01 #指定操作的数据库package com.yyg.boot.entity;
import lombok.Data;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.util.Date;
/**
* @Author 一一哥Sun
* @Date Created in 2020/4/9
* @Description Description
*/
@Data
@ToString
@Document(collection = "product")
public class Product {
@Id
private String id;
/**
* 价格
*/
@Field("price")
private Integer price;
/**
* 商品名称
*/
@Field("name")
private String name;
/**
* 商品简介
*/
@Field("info")
private String info;
/**
* 商品发布者
*/
@Field("publisher")
private String publisher;
/**
* 创建时间
*/
@Field("createTime")
private Date createTime;
/**
* 修改时间
*/
@Field("updateTime")
private Date updateTime;
}package com.yyg.boot.service;
import com.yyg.boot.entity.Product;
import java.awt.print.Book;
import java.util.List;
/**
* @Author 一一哥Sun
* @Date Created in 2020/4/9
* @Description Description
*/
public interface ProductService {
String saveProduct(Product product);
/**
* 查询所有
*/
List<Product> findAll();
/***
* 根据id查询
*/
Product getProductById(String id);
/**
* 根据名称查询
*/
Product getProductByName(String name);
/**
* 更新对象
*/
String updateProduct(Product product);
/***
* 删除对象
*/
String deleteProduct(Product product);
/**
* 根据id删除
*/
String deleteProductById(String id);
}package com.yyg.boot.service.impl;
import com.yyg.boot.entity.Product;
import com.yyg.boot.service.ProductService;
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;
/**
* @Author 一一哥Sun
* @Date Created in 2020/4/9
* @Description Description
*/
@Service
public class ProductServiceImpl implements ProductService {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public String saveProduct(Product product) {
product.setCreateTime(new Date());
product.setUpdateTime(new Date());
mongoTemplate.save(product);
return "添加成功";
}
@Override
public List<Product> findAll() {
return mongoTemplate.findAll(Product.class);
}
@Override
public Product getProductById(String id) {
Query query = new Query(Criteria.where("_id").is(id));
return mongoTemplate.findOne(query, Product.class);
}
@Override
public Product getProductByName(String name) {
Query query = new Query(Criteria.where("name").is(name));
return mongoTemplate.findOne(query, Product.class);
}
@Override
public String updateProduct(Product product) {
Query query = new Query(Criteria.where("_id").is(product.getId()));
Update update = new Update().set("publisher", product.getPublisher())
.set("info", product.getInfo())
.set("updateTime", new Date());
return "success";
}
@Override
public String deleteProduct(Product product) {
mongoTemplate.remove(product);
return "success";
}
@Override
public String deleteProductById(String id) {
//findOne
Product product = getProductById(id);
//delete
deleteProduct(product);
return "success";
}
}package com.yyg.boot.web;
import com.yyg.boot.entity.Product;
import com.yyg.boot.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author 一一哥Sun
* @Date Created in 2020/4/9
* @Description Description
*/
@RestController
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@PostMapping("")
public String saveProduct(@RequestBody Product product) {
return productService.saveProduct(product);
}
@GetMapping("")
public List<Product> findAll() {
return productService.findAll();
}
@GetMapping("/id/{id}")
public Product findOne(@PathVariable("id") String id) {
return productService.getProductById(id);
}
@GetMapping("/name/{name}")
public Product findOneByName(@PathVariable("name") String name) {
return productService.getProductByName(name);
}
@PostMapping("/update")
public String update(@RequestBody Product product) {
return productService.updateProduct(product);
}
@DeleteMapping("/delOne")
public String delOne(@RequestBody Product product) {
return productService.deleteProduct(product);
}
@DeleteMapping("/{id}")
public String delById(@PathVariable("id") String id) {
return productService.deleteProductById(id);
}
}package com.yyg.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author 一一哥Sun
* @Date Created in 2020/4/9
* @Description Description
*/
@SpringBootApplication
public class MongoApplication {
public static void main(String[] args) {
SpringApplication.run(MongoApplication.class, args);
}
}完整项目结构:

我们可以在MongoDB中自己手动创建一个空白的数据库db01。

进行添加接口的测试:

再次打开MongoDB,可以看到如下信息:

进行查询测试:

根据id查询:

根据name查询:

其他接口不再一一测试,都可以正常使用。
原文作者:;如有侵权,请联系管理员删除。