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. 好好好重要常用必备linux命令

    查看当前目录下文件个数: $find ./ | wc -l 以上这个命令用到的频率如此之高,以至于我们需要为它建立一个快捷命令方式: 在.bashrc 中设置命令别名: alias lsl='ls - ...

  2. 删除rpc01

    vim /opt/ltp/runtest/stress.part3 修改/opt/ltp/runtest/stress.part3 删除rpc01: 142 systemctl status gdm ...

  3. Docker Swarm(六)Label 节点标签与服务约束

    前言 多节点 Swarm 集群下,可能节点的配置不同(比如 CPU.内存等),部署着不同类型的服务(比如 Web服务.Job服务等),当这些服务以 Service 或者 Stack 的形式部署到集群, ...

  4. 『言善信』Fiddler工具 — 1、Fiddler介绍与安装

    目录 1.Fiddler简介 2.Fiddler功能 3.Fiddler工作原理 (1)先来了解一下B/S架构 (2)Fiddler工作原理 (3)Fiddler工作原理进阶说明 (4)以Google ...

  5. Element-ui Popconfirm气泡确认框的确认及取消事件不生效

    Element-ui 官方文档对 Popconfirm气泡确认框的一些属性及事件的描述不够详细,导致第一次使用时会遇到各种各样的问题 对确定事件及取消事件描述如下: 但是如果给组件绑定@confirm ...

  6. GO语言面向对象02---继承

    package main import ( "fmt" ) type Dog struct { Name string Age int } func (d *Dog)bite() ...

  7. Python+Selenium学习笔记11 - python官网的tutorial - 定义函数

    1 def f(a, L=[]): 2 L.append(a) 3 return L 4 5 print f(5) 6 print f(2) 输出 1 def f(a, L=None): 2 if L ...

  8. CUDA 8的混合精度编程

    CUDA 8的混合精度编程 Volta和Turing GPU包含 Tensor Cores,可加速某些类型的FP16矩阵数学运算.这样可以在流行的AI框架内更快,更轻松地进行混合精度计算.要使用Ten ...

  9. 使用PCAST检测散度以比较GPU和CPU结果

    使用PCAST检测散度以比较GPU和CPU结果 并行编译器辅助软件测试(PCAST)是英伟达HPC FORTRAN.C++和C编译器中的一个特性.PCAST有两个用例.一个新的处理器或新的编译程序的部 ...

  10. 数据、人工智能和传感器按COVID-19新冠流感排列

    数据.人工智能和传感器按COVID-19新冠流感排列 Data, AI and sensors arrayed against COVID-19 各国政府.卫生保健专业人士和工业界争先恐后地应对Cov ...