SpringBoot整合MongoDB

一、创建项目,选择依赖

仅选择Spring Web、Spring Data MongoDB即可





二、引入相关依赖(非必要)

这里只是为了实体类的创建方便而引入lombok

<!-- 引入lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

三、如果是第一次使用MongoDB,首先先创建用户

> use admin
switched to db admin
> db.createUser({user:"zlfeng", pwd:"123456", roles:[{role:"readWriteAnyDatabase", db:"admin"}]});
Successfully added user: {
"user" : "zlfeng",
"roles" : [
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
}
]
}

MongoDB权限介绍

权限 说明
read 允许用户读取指定数据库
readWrite 允许用户读写指定数据库
dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建、删除、查看统计或访问system.profile
userAdmin 允许用户向system.users集合写入,可以在指定数据库中创建、删除和管理用户
clusterAdmin 必须在admin数据库中定义,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase 必须在admin数据库中定义,赋予用户所有数据库的读权限
readWriteAnyDatabase 必须在admin数据库中定义,赋予用户所有数据库的读写权限
userAdminAnyDatabase 必须在admin数据库中定义,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase 必须在admin数据库中定义,赋予用户所有数据库的dbAdmin权限
root 必须在admin数据库中定义,超级账号,超级权限

四、定义核心配置文件

# 登录用户所在的数据库
spring.data.mongodb.authentication-database=admin # 数据库的ip地址
spring.data.mongodb.host=192.168.133.142 # MongoDB端口号
spring.data.mongodb.port=27017 # 用户账号
spring.data.mongodb.username=zlfeng # 用户密码
spring.data.mongodb.password=123456 # 指定使用的数据库
# 不必预先创建,不存在该数据库会自动创建
spring.data.mongodb.database=db_student

五、创建实体类

package cn.byuan.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id; import java.io.Serializable;
import java.util.Date; @NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Data
public class Student implements Serializable {
@Id// 必须指定id列
private String studentId; private String studentName; private Integer studentAge; private Double studentScore; private Date studentBirthday;
}

六、创建dao层,这里的dao层有两种写法

(一)dao层写法一

1. 编码部分

package cn.byuan.dao;

import cn.byuan.entity.Student;
import org.springframework.data.mongodb.repository.MongoRepository; /*
* dao层写法一
* 这里的用法其实和SpringDataJPA相似, 可根据需要来自定义方法
*
* 这种写法不需要写实现类
*
* MongoRepository<行对应的对象类型, 主键列类型>
* */
public interface StudentDaoTypeOne extends MongoRepository<Student, String> { // 可根据需求自己定义方法, 无需对方法进行实现
Student getAllByStudentName(String studentName); }

2.测试部分

在进行测试之前,我们先查询一下数据库,此时不存在db_student的库

开始测试

package cn.byuan;

import cn.byuan.dao.StudentDaoTypeOne;
import cn.byuan.entity.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import java.util.Date;
import java.util.List; @SpringBootTest
class StudentDaoTypeOneTests { @Autowired
private StudentDaoTypeOne studentDaoTypeOne; @Test
void addOneStudent(){
// 插入10行
for (Integer count = 0; count < 10; count++) {
Student student = new Student()
.setStudentId("student_"+count) //如果自己不去设置id则系统会分配给一个id
.setStudentName("Godfery"+count)
.setStudentAge(count)
.setStudentScore(98.5-count)
.setStudentBirthday(new Date());
studentDaoTypeOne.save(student);
}
} @Test
void deleteOneStudentByStudentId(){
// 删除id为student_0的学生
studentDaoTypeOne.deleteById("student_0");
} @Test
void updateOneStudent(){
// 修改姓名为Godfery1的Student年龄为22
Student student = studentDaoTypeOne.getAllByStudentName("Godfery1");
student.setStudentAge(22);
studentDaoTypeOne.save(student); } @Test
void getOneStudentByStudentId(){
System.out.println(studentDaoTypeOne.findById("student_1"));
} @Test
void getAllStudent(){
List<Student> studentList = studentDaoTypeOne.findAll();
studentList.forEach(System.out::println);
} }

我们先来查看一下数据库

进入数据库查看一下数据

(二)dao层写法二

1.编码部分

接口部分

package cn.byuan.dao;

import cn.byuan.entity.Student;

import java.util.List;

/*
* dao层写法二
*
* 写法二需要进行实现
* */
public interface StudentDaoTypeTwo {
// 增加一位学生
void addOneStudent(Student student); // 根据id删除一位学生
void deleteOneStudentByStudentId(String studentId); // 修改一位学生的信息
void updateOneStudent(Student student); // 根据主键id获取一名学生
Student getOneStudentByStudentId(String studentId); // 获取全部学生
List<Student> getAllStudent();
}

实现类

package cn.byuan.dao.imp;

import cn.byuan.dao.StudentDaoTypeTwo;
import cn.byuan.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository; import java.util.List; @Repository
public class StudentDaoTypeTwoImp implements StudentDaoTypeTwo { // 使用MongoTemplate模板类实现数据库操作
@Autowired
private MongoTemplate mongoTemplate; // 增加一位学生
public void addOneStudent(Student student){
mongoTemplate.save(student); } // 根据id删除一位学生
public void deleteOneStudentByStudentId(String studentId){
Student student = mongoTemplate.findById(studentId, Student.class);
if(student != null){
mongoTemplate.remove(student);
} } // 修改一位学生的信息
public void updateOneStudent(Student student){
mongoTemplate.save(student);
} // 根据主键id获取一名学生
public Student getOneStudentByStudentId(String studentId){
return mongoTemplate.findById(studentId, Student.class);
} // 获取全部学生
public List<Student> getAllStudent(){
return mongoTemplate.findAll(Student.class);
}
}

2.测试部分

package cn.byuan;

import cn.byuan.dao.StudentDaoTypeOne;
import cn.byuan.dao.StudentDaoTypeTwo;
import cn.byuan.entity.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import java.util.Date;
import java.util.List; @SpringBootTest
class StudentDaoTypeTwoTests { @Autowired
private StudentDaoTypeTwo studentDaoTypeTwo; @Test
void addOneStudent(){
// 插入10行
for (Integer count = 0; count < 10; count++) {
Student student = new Student()
.setStudentId("study_"+count) //如果自己不去设置id则系统会分配给一个id
.setStudentName("Echo"+count)
.setStudentAge(count)
.setStudentScore(98.5-count)
.setStudentBirthday(new Date());
studentDaoTypeTwo.addOneStudent(student);
}
} @Test
void deleteOneStudentByStudentId(){
// 删除id为study_0的学生
studentDaoTypeTwo.deleteOneStudentByStudentId("study_0");
} @Test
void updateOneStudent(){
// 修改id为study_1的Student年龄为21
Student student = studentDaoTypeTwo.getOneStudentByStudentId("study_1");
student.setStudentAge(21);
studentDaoTypeTwo.updateOneStudent(student); } @Test
void getOneStudentByStudentId(){
System.out.println(studentDaoTypeTwo.getOneStudentByStudentId("study_1"));
} @Test
void getAllStudent(){
List<Student> studentList = studentDaoTypeTwo.getAllStudent();
studentList.forEach(System.out::println);
} }

进入数据库查看一下数据

源码地址:https://github.com/byuan98/springboot-integration/tree/master/test008_springboot_mongodb

8、SpringBoot整合之SpringBoot整合MongoDB的更多相关文章

  1. springboot+jpa+mysql+swagger整合

    Springboot+jpa+MySQL+swagger整合 创建一个springboot web项目 <dependencies> <dependency>      < ...

  2. java框架之SpringBoot(12)-消息及整合RabbitMQ

    前言 概述 大多数应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦的能力. 消息服务中两个重要概念:消息代理(message broker)和目的地(destination).当消息发送者发送 ...

  3. java框架之SpringBoot(13)-检索及整合Elasticsearch

    ElasticSearch介绍 简介 我们的应用经常需要使用检索功能,开源的 Elasticsearch 是目前全文搜索引擎的首选.它可以快速的存储.搜索和分析海量数据.SpringBoot 通过整合 ...

  4. Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...

  5. SpringBoot Druid整合,SpringBoot 集成Druid

    SpringBoot Druid整合,SpringBoot 集成Druid ================================ ©Copyright 蕃薯耀 2018年4月8日 http ...

  6. SpringBoot+SpringMVC+MyBatis快速整合搭建

    作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...

  7. SpringBoot:4.SpringBoot整合Mybatis实现数据库访问

    在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...

  8. SpringBoot与PageHelper的整合示例详解

    SpringBoot与PageHelper的整合示例详解 1.PageHelper简介 PageHelper官网地址: https://pagehelper.github.io/ 摘要: com.gi ...

  9. SpringBoot学习- 4、整合JWT

    SpringBoot学习足迹 1.Json web token(JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于 ...

  10. SpringBoot学习- 3、整合MyBatis

    SpringBoot学习足迹 1.下载安装一个Mysql数据库及管理工具,同类工具很多,随便找一个都可以,我在windows下做测试项目习惯使用的是haosql 它内部集成了MySql-Front管理 ...

随机推荐

  1. 攻防世界(五)Web_php_include

    攻防世界系列:Web_php_include 方法一:大小写绕过 strstr()函数对php我协议进行了过滤,但我们可以尝试大小写绕过 抓包POST传值让其执行我们输入的命令 ?page=Php:/ ...

  2. IT菜鸟之总结(Du teacher)

    初次接触云计算,从以前对计算机的一窍不通,经过这三周的学习,起码是通了一窍了:哈哈,至少是对计算机的组成及系统的安装都有了认识,也初次学习了Linux系统,对其的发展和使用有了认识,也学到了一些基础的 ...

  3. python基础之psutil模块和发邮件(smtplib和yagmail)

    除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用pip安装. 此 ...

  4. 解决Windows路径太长的目录以及文件名超长删除的问题

    因Windows文件夹有长度限制,在路径太深,长度达到600多个字符时,删除文件时出现报错"源文件名长度大于文件系统支持的长度.请尝试将其移动到具有较短路径名称的位置,或者在执行此操作前尝试 ...

  5. 关于RabbitMQ的一些问题总结

    消息中间件在工作中一般都不会采用单机模式的,该篇其实是对mq的高可用等等常见问题做一些归纳. 消息队列的高可用 普通集群与镜像集群模式,此处不做深究,另开一篇专门讲述此处 如何保证消息不被重复消费 保 ...

  6. Linux(CentOS7)下Nginx安装

    记录一下 Linux(CentOS7) 下 Nginx 安装过程 一.准备工作 版本说明: Linux版本:CentOS 7 64位 Nginx版本:nginx-1.20.0 1. 下载安装文件 采用 ...

  7. pytest - 测试函数的传参:fixture,参数化。必须传入实参

    测试函数的参数只有2个来源:fixture返回,参数化(ddt) 传入的参数必须是实参 pytest - 参数化 在测试用例的前面加上: @pytest.mark.parametrize(" ...

  8. 深度学习与TensorFlow

    深度学习与TensorFlow DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感 ...

  9. YOLO、SSD、FPN、Mask-RCNN检测模型对比

    YOLO.SSD.FPN.Mask-RCNN检测模型对比 一.YOLO(you only look once) YOLO 属于回归系列的目标检测方法,与滑窗和后续区域划分的检测方法不同,他把检测任务当 ...

  10. YOLOv4没交棒,但YOLOv5来了!

    YOLOv4没交棒,但YOLOv5来了! 前言 4月24日,YOLOv4来了! 5月30日,"YOLOv5"来了! 这里的 "YOLOv5" 是带有引号的,因为 ...