SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用

一、概述

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织

优点:

  • 1、易于维护:都是使用表结构,格式一致;
  • 2、使用方便:SQL语言通用,可用于复杂查询;
  • 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

缺点:

  • 1、读写性能比较差,尤其是海量数据的高效率读写;
  • 2、固定的表结构,灵活度稍欠;
  • 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。

优点:

  • 1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
  • 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
  • 3、高扩展性;
  • 4、成本低:nosql数据库部署简单,基本都是开源软件。

缺点:

  • 1、不提供sql支持,学习和使用成本较高;
  • 2、无事务处理;
  • 3、数据结构相对复杂,复杂查询方面稍欠。

代码可以在SpringBoot组件化构建https://www.pomit.cn/java/spring/springboot.html中的MongoDb组件中查看,并下载。

首发地址:
品茗IT-同步发布

如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以加入我们的java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习中遇到的难题。

二、配置

本文假设你已经引入spring-boot-starter-web。已经是个SpringBoot项目了,如果不会搭建,可以打开这篇文章看一看《SpringBoot入门建站全系列(一)项目建立》。

2.1 Maven依赖

使用mongodb需要引入spring-boot-starter-data-mongodb。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2.2 配置文件

在application.properties 中需要配置mongodb的信息,如:

spring.data.mongodb.uri=mongodb://localhost:27017/pomit

我这里只有一个mongodb的配置:

  • spring.data.mongodb.uri是mongodb的地址和库名称。

三、方式一:MongoRepository操作MongoDb

我们直接新建接口,继承MongoRepository接口, 这样一切都会变的特别简单。类似于Spring-data-jpa的写法。

3.1 数据库DAO

DAO中可以按照Spring-data的常规写法自定义查询方法,也可以直接使用MongoRepository定义好的方法。

UserAddationDao:

package com.cff.springbootwork.mongodb.dao;import org.springframework.data.mongodb.repository.MongoRepository;import com.cff.springbootwork.mongodb.model.User;public interface UserAddationDao extends MongoRepository<User, Long> {User findByName(String name);
}

注意,实体User要用@Id指明id

3.2 业务逻辑层

我们直接调用UserAddationDao来做一些增删改查。

UserAddationService:

package com.cff.springbootwork.mongodb.service;import java.util.Date;
import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.cff.springbootwork.mongodb.dao.UserAddationDao;
import com.cff.springbootwork.mongodb.model.User;/*** 第一种方式* * @author fufei**/
@Service
public class UserAddationService {private static final Logger logger = LoggerFactory.getLogger(UserAddationService.class);@Autowiredprivate UserAddationDao userAddationDao;/*** 保存对象** @param book* @return*/public String save(User user) {logger.info("--------------------->[MongoDB save start]");user.setRegisterTime(new Date());userAddationDao.save(user);return "添加成功";}/*** 查询所有** @return*/public List<User> findAll() {logger.info("--------------------->[MongoDB find start]");return userAddationDao.findAll();}/**** 根据id查询* * @param id* @return*/public User getUserById(Long id) {logger.info("--------------------->[MongoDB find start]");return userAddationDao.findById(id).orElse(null);}/*** 根据名称查询** @param name* @return*/public User getUserByName(String name) {logger.info("--------------------->[MongoDB find start]");return userAddationDao.findByName(name);}/*** 更新对象** @param book* @return*/public String update(User user) {logger.info("--------------------->[MongoDB update start]");userAddationDao.save(user);return "success";}/**** 删除对象* * @param book* @return*/public String deleteUser(User user) {logger.info("--------------------->[MongoDB delete start]");userAddationDao.delete(user);return "success";}
}

3.3 测试

MongodbAddationRest:

package com.cff.springbootwork.mongodb.web;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.cff.springbootwork.mongodb.model.User;
import com.cff.springbootwork.mongodb.service.UserAddationService;@RestController
@RequestMapping("/mongo2")
public class MongodbAddationRest {@AutowiredUserAddationService userService;@PostMapping("/save")public String saveObj(@RequestBody User user) {return userService.save(user);}@GetMapping("/findAll")public List<User> findAll() {return userService.findAll();}@GetMapping("/findOne")public User findOne(@RequestParam Long id) {return userService.getUserById(id);}@GetMapping("/findOneByName")public User findOneByName(@RequestParam String name) {return userService.getUserByName(name);}@PostMapping("/update")public String update(@RequestBody User user) {User existUser = userService.getUserById(user.getId());if (existUser == null) {existUser = user;} else {if (user.getAge() != null) {existUser.setAge(user.getAge());}if (user.getPassword() != null) {existUser.setPassword(user.getPassword());}if (user.getName() != null) {existUser.setName(user.getName());}if (user.getPhone() != null) {existUser.setPhone(user.getPhone());}if (user.getRegisterTime() != null) {existUser.setRegisterTime(user.getRegisterTime());}if (user.getUsername() != null) {existUser.setUsername(user.getUsername());}}return userService.update(existUser);}@PostMapping("/delOne")public String delOne(@RequestBody User user) {return userService.deleteUser(user);}
}

四、方式二:MongoTemplate操作MongoDb

4.1 直接在业务逻辑中调用MongoTemplate

UserService:

package com.cff.springbootwork.mongodb.service;import java.util.Date;
import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 com.cff.springbootwork.mongodb.model.User;/*** 第一种方式* @author fufei**/
@Service
public class UserService {private static final Logger logger = LoggerFactory.getLogger(UserService.class);@Autowiredprivate MongoTemplate mongoTemplate;/*** 保存对象** @param book* @return*/public String save(User user) {logger.info("--------------------->[MongoDB save start]");user.setRegisterTime(new Date());mongoTemplate.save(user);return "添加成功";}/*** 查询所有** @return*/public List<User> findAll() {logger.info("--------------------->[MongoDB find start]");return mongoTemplate.findAll(User.class);}/**** 根据id查询* * @param id* @return*/public User getUserById(Long id) {logger.info("--------------------->[MongoDB find start]");Query query = new Query(Criteria.where("_id").is(id));return mongoTemplate.findOne(query, User.class);}/*** 根据名称查询** @param name* @return*/public User getUserByName(String name) {logger.info("--------------------->[MongoDB find start]");Query query = new Query(Criteria.where("name").is(name));return mongoTemplate.findOne(query, User.class);}/*** 更新对象** @param book* @return*/public String update(User user) {logger.info("--------------------->[MongoDB update start]");Query query = new Query(Criteria.where("_id").is(user.getId()));Update update = new Update().set("password", user.getPassword()).set("age", user.getAge()).set("phone",user.getPhone());// updateFirst 更新查询返回结果集的第一条mongoTemplate.updateFirst(query, update, User.class);return "success";}/**** 删除对象* * @param book* @return*/public String deleteUser(User user) {logger.info("--------------------->[MongoDB delete start]");mongoTemplate.remove(user);return "success";}
}

4.2 测试

MongodbRest:

package com.cff.springbootwork.mongodb.web;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.cff.springbootwork.mongodb.model.User;
import com.cff.springbootwork.mongodb.service.UserService;@RestController
@RequestMapping("/mongo")
public class MongodbRest {@AutowiredUserService userService;@PostMapping("/save")public String saveObj(@RequestBody User user) {return userService.save(user);}@GetMapping("/findAll")public List<User> findAll() {return userService.findAll();}@GetMapping("/findOne")public User findOne(@RequestParam Long id) {return userService.getUserById(id);}@GetMapping("/findOneByName")public User findOneByName(@RequestParam String name) {return userService.getUserByName(name);}@PostMapping("/update")public String update(@RequestBody User user) {return userService.update(user);}@PostMapping("/delOne")public String delOne(@RequestBody User user) {return userService.deleteUser(user);}
}

五、过程中用到的实体

User:


详细完整的代码,可以访问品茗IT-博客《SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用》进行查看

品茗IT-博客专题:https://www.pomit.cn/lecture.html汇总了Spring专题、Springboot专题、SpringCloud专题、web基础配置专题。

快速构建项目

Spring项目快速开发工具:

一键快速构建Spring项目工具

一键快速构建SpringBoot项目工具

一键快速构建SpringCloud项目工具

一站式Springboot项目生成

Mysql一键生成Mybatis注解Mapper

Spring组件化构建

SpringBoot组件化构建

SpringCloud服务化构建

喜欢这篇文章么,喜欢就加入我们一起讨论SpringBoot使用吧!

SpringBoot入门建站全系列(二十六)Mongodb非关系型数据库的使用相关推荐

  1. SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  2. springboot mybatis ehcache_SpringBoot入门建站全系列(十四)集成Redis缓存

    SpringBoot入门建站全系列(十四)集成Redis缓存 一.概述 本地缓存,就是使用应用内使用本地内存将数据暂缓存储,一般数据库的查询如果不怎么改动,可以用本地缓存暂存. 远程缓存,比如redi ...

  3. SpringBoot入门建站全系列(六)Spring-data-jpa进阶使用

    SpringBoot入门建站全系列(六)Spring-data-jpa进阶使用 上一篇介绍了Mybatis的配置和基本用法<SpringBoot入门建站全系列(五)使用Spring-data-j ...

  4. boot spring test 文档_SpringBoot入门建站全系列(五)使用Spring-data-jpa操作数据库

    SpringBoot入门建站全系列(五)使用Spring-data-jpa操作数据库 SpringBoot操作数据库有多种方式,如 JDBC直接操作:太古老了,没人愿意这样玩 Mybatis插件:比较 ...

  5. SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室

    SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 ...

  6. SpringBoot入门建站全系列(九)文件上传功能与下载方式

    SpringBoot入门建站全系列(九)文件上传功能与下载方式 Spring对文件上传做了简单的封装,就是用MultipartFile这个对象去接收文件,当然有很多种写法,下面会一一介绍. 文件的下载 ...

  7. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...

    SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...

  8. kafka maven 依赖_SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  9. spring boot 入门_SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作

    SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作 一.概述 多数据源,就是有多个数据库的配置. 多数据源配置并不麻烦,使用起来和单数据源基本相同,但是,重要的是事务的控制 ...

最新文章

  1. 蜘蛛搜索引擎_各大搜索引擎的蜘蛛特点
  2. ADSL获取的IP地址与网关相同,却能上网的原理
  3. 什么是宇宙安全声明_《三体》三体人是否知道如何向宇宙发表安全声明?
  4. A/B HDU - 1576 (逆元或拓展欧几里得或数学公式)多解法求大数结果
  5. 全国计算机vb考试经典程序设计,全国计算机二级《VB语言程序设计》考试要点...
  6. java excel文件读取的内容_java读取Excel文件指定内容
  7. android studio光标变成黑块,解决Android Studio 代码无提示无颜色区分问题
  8. USB On-The-Go引脚
  9. 烂泥:centos6.4服务器添加新硬盘
  10. html返回顶部函数,网页中返回顶部代码(多种方法)另附注释说明
  11. 下载文件变成php文档,关于文件下载后变成PHP格式的解决办法
  12. 用python做查询系统_用python制作全国身份证号验证及查询系统
  13. STM32 硬件IIC OLED
  14. 大兴机场停车场长期停车怎么收费,大兴机场p3停车场收费标准
  15. 书评精益创业-新创企业的成长思维 (上)
  16. Unity教程2D入门:25 主菜单MainMenu
  17. 基于OneDNS实现上网安全防护和监控
  18. [渝粤教育] 郑州轻工业大学 自动控制原理 参考 资料
  19. 高感性时代--全新思维:决胜未来的6大能力
  20. Ubuntu下用安装包安装MySQL

热门文章

  1. 3D游戏建模和CG游戏原画哪个更适合我?5年,10年,哪个行业更加有前景
  2. GetStringUTFChars和GetStringUTFRegion的使用示例
  3. 快来薅羊毛,轻量、快捷、低使用门槛的PaaS平台在这里
  4. INF421 - Amphi 2 Divide and Conquer
  5. 深入浅出MyBatis:MyBatis的所有配置
  6. 基于sklearn的鸢尾花分类模型
  7. Vue.js solt
  8. php回顶层顶层,都说买了顶层楼房会后悔,听听顶楼业主现身说法
  9. MySQL的启示:Intel Optane P4800X评测(4)
  10. 在CMD中,MySQL怎么清屏