SpringBoot案例,通关版

项目目录

  • 此项目为了伙伴们可以快速入手SpringBoot项目,全网最详细的版本,每个伙伴都可以学会,这个项目每一步都会带大家做,学完后可以保证熟悉SpringBoot的开发流程
  • 项目介绍:项目使用springboot +mybatis进行开发
  • 带你一起写小项目
    • 先把初始环境给你们
    • 第一步新建springboot项目
    • 返回结果的封装类 Result
    • SpringBoot的三层架构
    • 数据库,实体类
    • 配置Mybatis
      • mybatis.xml的三个规范
        • 第一个是同包同名
        • 第二个,mapper.xml的namespace要与mapper全类名进行一致
        • 第三个是方法中的 id 要与maper的方法名一致
  • 第一个业务的开发 部门查询
  • 前后端联调
      • 总结
  • 删除部门业务
    • 删除部门的业务
  • 部门管理-新增部门
  • 部门管理-修改部门
  • 分页查询
    • 分页查询-思路
    • 使用分页插件 PageHelper


此项目为了伙伴们可以快速入手SpringBoot项目,全网最详细的版本,每个伙伴都可以学会,这个项目每一步都会带大家做,学完后可以保证熟悉SpringBoot的开发流程

项目介绍:项目使用springboot +mybatis进行开发

带你一起写小项目

先把初始环境给你们

在这里插入图片描述

链接: https://pan.baidu.com/s/1GiFHtS2aTbmKtj0gV0FGJA?pwd=srjq 提取码: srjq 复制这段内容后打开百度网盘手机App,操作更方便哦

下载资料,里面有sql文件,写后
然后根据开发规范的Result类

第一步新建springboot项目

在这里插入图片描述
在这里插入图片描述

springboot是对spring的封装

然后我们点击创建项目

创建完后我们会进入这个页面
在这里插入图片描述

选择两个文件然后删除
在这里插入图片描述

然后根据开发流程
前后端分离开发,后端要根据接口文档进行开发,接口文档在前面分享的资料里面

返回结果的封装类 Result

首先我们要确定开发规范,也就是遵守restful开发风格规范,返回值要result封装为统一的格式

package com.healer.common;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {private Integer code;//响应码,1 代表成功; 0 代表失败private String msg;  //响应信息 描述字符串private Object data; //返回的数据//增删改 成功响应public static Result success() {return new Result(1, "success", null);}//查询 成功响应public static Result success(Object data) {return new Result(1, "success", data);}//失败响应public static Result error(String msg) {return new Result(0, msg, null);}
}

一个result类
里面有 code msg 还有data
在这里插入图片描述

然后result里面有静态方法
在这里插入图片描述有成功的返回方法

SpringBoot的三层架构

开发项目的时候,要进行分层,有controller层 还有service层 还有mapper层, 这三层结构是互相调用的,前段发起请求请求到达controller层,然后controller调用service 最后service调用mapper

数据库,实体类

在资料里面有实体类的创建,可以直接用,

在这里插入图片描述
在这里插入图片描述

然后导入到 idea中 ,实体类要导入到 com.healer.pojo中
在这里插入图片描述
在这里插入图片描述
然后直接使用lombok注解
@Data 这个作用是lombok在编译的时候会给实体类加入get set 方法
然后写入 @NoArgsConstructor @AllArgsConstructor

那么这个实体类就创建完毕了

实体类的作用是与数据库中的表字段进行对应,一个实体类对应一个表

只有这样,才能将数据库中的数据查询出来然后返回给实体类,实体类再进行封装为对象

在这里插入图片描述
现在我们的项目基础的搭建以及完成了

就是丢一个common包下的result
然后是controller包下的在这里插入图片描述
然后是service下面的
在这里插入图片描述
接口与实现类实现类继承接口,然后实现类上面要加入@Service注解,这个作用是告诉spring这是一个service对象,要让spring将这个类加入到ioc容器中,被spring管理,所以我们使用@Autowride拿到的bean对象都是被spring管理的对象,也就是代理对象
在这里插入图片描述
mapper也是,也要加入@Mapper

配置Mybatis

mybatis的起步依赖,数据库的连接依赖
在这里插入图片描述
mybatis的起步依赖配置后,要配置mapper的xml文件

mybatis.xml的三个规范

第一个是同包同名

也就是在这里插入图片描述
xml要与mapper所在相同的级别并且类名要与xml名一致

第二个,mapper.xml的namespace要与mapper全类名进行一致

在这里插入图片描述

第三个是方法中的 id 要与maper的方法名一致

然后xml创建好后,就可以配置properties的配置

#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.healer.pojo
#驼峰映射
mybatis.configuration.map-underscore-to-camel-case=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tails?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

开启mybatis的驼峰映射

第一个业务的开发 部门查询

根据接口文档
在这里插入图片描述
首先是一个部门的查询

那么我们就从DeptController进行开发

package com.healer.controller;import com.healer.common.Result;
import com.healer.pojo.Dept;
import com.healer.service.DeptService;
import lombok.extern.slf4j.Slf4j;
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.RestController;import java.util.List;/*** @author healer* @Description DeptController* @data 2024-05-30 16:31*/
@RestController
@Slf4j
@RequestMapping("/depts")
public class DeptController {@Autowiredprivate DeptService deptService;@GetMappingpublic Result selectDeptList() {List<Dept> deptList = deptService.selectDeptList();return Result.success(deptList);}
}

首先进行@ResultController,表示这个是一个controller层

然后引入service
由于service被spring管理了,所以直接引入就行

然后我们就根据接口文档进行开发

我们查询的是所有的部门所以,要使用list集合去接收数据

    List<Dept> deptList = deptService.selectDeptList();return Result.success(deptList);

然后返回Result.success(deptList);
开发service层
在这里插入图片描述
在这里插入图片描述
然后调用mapper
在这里插入图片描述
使用注解直接查询

进行测试
postman测试

在这里插入图片描述

前后端联调

开发完接口后,进行前后端联调
首先打开前端,使用nginx运行后,访问
在这里插入图片描述
访问后有数据说明前后端联调成功

在这里插入图片描述查看nginx.conf

在这里插入图片描述

nginx端口号90
然后进行代理

总结

开发流程 : 明确需求 接口文档 思路分析 接口开发

在这里插入图片描述

删除部门业务

在这里插入图片描述

删除部门的业务

首先写sql语句测试,测试之后就根据开发文档进行开发

在这里插入图片描述先看请求地址
然后再看请求方式

请求参数是一个id

响应结果是直接返回删除成功

所以不需要service层返回值
在这里插入图片描述
直接在controller层调用service方法后就直接返回成功就行

然后进行测试,测试通过

controller层

    /*** 根据id删除部门* @param id* @return*/@DeleteMapping("/{id}")public Result delectDeptById(@PathVariable("id") Integer id) {deptService.delectDeptById(id);return Result.success();}

service层

    @Overridepublic void delectDeptById(Integer id) {deptMapper.delectDeptById(id);}

mapper层

    @Delete("delete from dept where id=#{id}")void delectDeptById(@Param("id") Integer id);

部门管理-新增部门

开发新增部门
首先查看接口四要素

请求方式为post
请求路径为 /depts

请求参数是一个name

返回值,相应数据
为json数据
在这里插入图片描述

直接返回成功的信息

书写controller层代码

  @PostMappingpublic Result addDept(@RequestBody Dept dept) {log.info("开始新增部门");deptService.addDept(dept);return Result.success();}

写service层

  @Overridepublic void addDept(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.addDept(dept);}

mapper层

    @Insert("insert into  dept ( name, create_time, update_time) values (#{dept.name},#{dept.createTime},#{dept.updateTime})")void addDept(@Param("dept") Dept dept);

书写之后进行测试

在这里插入图片描述
添加成功
使用post请求
发送json数据

{
“name”: “测试部”
}

部门管理-修改部门

两个接口
一个是根据id查询 部门
一个是根据id修改部门

分析接口四要素
请求方式
请求参数
请求路径
返回值

直接返回就行了

controller层

/*** 根据部门id查询部门信息** @param id* @return*/@GetMapping("/{id}")public Result findDeptById(@PathVariable("id") Integer id) {Dept dept = deptService.findDeptById(id);return Result.success(dept);}/*** 根据id修改部门** @param dept* @return*/@PutMappingpublic Result updateDept(@RequestBody Dept dept) {log.info("开始进行部门修改");deptService.updateDept(dept);return Result.success();}

service层

@Overridepublic Dept findDeptById(Integer id) {Dept dept = deptMapper.findDeptById(id);return dept;}@Overridepublic void updateDept(Dept dept) {dept.setUpdateTime(LocalDateTime.now());deptMapper.updateDept(dept);}

mapper层

@Select("select id, name, create_time, update_time from dept where id=#{id}")Dept findDeptById(@Param("id") Integer id);@Update("update dept set  name=#{dept.name} ,update_time=#{dept.updateTime} where id =#{dept.id}")void updateDept(@Param("dept") Dept dept);

然后进行测试

分页查询

不管做什么项目,只要是分页查询,那么前端就给服务器两个参数
一个是pagenum
一个是pagesize

那么服务器端也就返回

List数据
还有total总记录数

返回结果
data
要返回给前端两个参数
项目开发返回的是Result对象
data里面存储的是数据
所以,一次不能返回两个数据,
只能把这个两个数据都封装在一个对象里面,
一个是list 一个是total
将page对象封装进data中
使用pageBean进行两个参数的封装

在这里插入图片描述

package com.healer.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;/*** @author healer* @Description PageBean* @data 2024-05-30 22:41*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {//    总记录数private Long total;private List<Emp> rows;
}

分页查询-思路

分页查询需要两个sql语句
一个用于查询总数
一个用于分页查询

controller层
在这里插入图片描述

当进行分页查询的时候,前端会进行传递两个参数
一个参数是page一个参数是pgesize

controller层接收到请求后 直接调用service
service中要先去获取总记录数
再去获取结果列表
最后再将 总记录数与结构列表封装pagebean,返回给controller

controller层

在这里插入图片描述

service层
在这里插入图片描述
在这里插入图片描述
查询了两个接口

在这里插入图片描述

使用分页插件 PageHelper

在这里插入图片描述

分页的步骤都是重复的,所以可以使用插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于知识图谱分析贸易关系走向

基于知识图谱分析贸易关系走向 前言一、基础数据二、贸易规则三、知识图谱可视化四、完整代码 前言 知识图谱是一种用图模型来描述知识和建模世界万物之间的关联关系的技术方法。在贸易关系的分析中&#xff0c;知识图谱可以将各个国家、地区、商品、贸易政策等作为节点&#…

人脸识别模型与人类视觉识别的对比——评估人脸识别模型存在偏见是否比人类的偏见大?

1. 概述 人脸识别系统是一个几十年来一直备受关注的研究领域。而且在过去的几年中。公司和政府一直在积极引入人脸识别系统&#xff0c;并且我们看到越来越多的机会可以看到人脸识别系统。例如&#xff0c;有的系统可以随便介绍&#xff0c;如搜索特定人的图像&#xff08;图像…

Appium安装及配置(Windows环境)

在做app相关自动化测试&#xff0c;需要使用appium来做中转操作&#xff0c;下面来介绍一下appium的环境安装配置 appium官方文档&#xff1a;欢迎 - Appium Documentation 一、下载appium 下载地址&#xff1a;https://github.com/appium/appium-desktop/releases?page3 通…

网络安全岗秋招面试题及面试经验分享

Hello&#xff0c;各位小伙伴&#xff0c;我作为一名网络安全工程师曾经在秋招中斩获&#x1f51f;个offer&#x1f33c;&#xff0c;并在国内知名互联网公司任职过的职场老油条&#xff0c;希望可以将我的面试的网络安全大厂面试题和好运分享给大家~ 转眼2024年秋招又快到了金…

悬剑武器库5.04版

工具介绍 悬剑5 基于“悬剑网盘”精选工具集悬剑5“飞廉”云武器库制作。 操作系统&#xff1a;Windows 10 专业版 锁屏密码&#xff1a;secquan.org 解压密码: 圈子社区secquan.org 镜像大小&#xff1a;33.1GB 系统占用空间63.0 GB 镜像导入 下载镜像&#xff0c;文末…

TinTinLand Web3 + AI 共学月|五周上手,捕获浪潮碰撞下的无限机遇

近期&#xff0c;斯坦福大学人文x人工智能研究所&#xff08;Stanford HAI&#xff09;发布了《2024 年人工智能指数报告》&#xff08;Artificial Intelligence Index Report 2024&#xff09;&#xff0c;指出当前人工智能的发展已全面改变社会的前沿风向&#xff0c;其中据 …

使用正则表达式分割字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 split()方法用于实现根据正则表达式分割字符串&#xff0c;并以列表的形式返回。其作用同字符串对象的split()方法类似&#xff0c;所不同的就是分割…

ODBC访问达梦数据库Ubuntu18.04 x86-x64(亲测有效)

ODBC访问达梦数据库Ubuntu18.04 x86-x64 第1步&#xff1a;安装unixodbc驱动,使用下面命令。第2步&#xff1a;拷贝已经安装好的达梦数据库驱动程序第3步&#xff1a;配置ODBC必要的参数文件&#xff0c;如下图第4步&#xff1a;设置环境变量第5步&#xff1a;连接测试 说明&am…

如何 使用Cubemax配置串口1.5得停止位

title: Cubemax配置串口1.5得停止位 tags: STM32HalCubemax Cubemax里面没有这个修改停止位为1.5得 我去配置函数里面也没看见 然后我去刨基础库 发现了 1.5倍 发现 原来就是 那个寄存器的值 改成 》 0x3000 后来自己修改几笔 HAL 库里面好像也有 改之 USART_CR2_STOP_Po…

【农村电商1004】 电子商务进农村示范县名单:全面数据集等你探索!

今天给大家分享的发表在国内顶级期刊金融研究的2023年论文《农村发展电子商务能减缓资本与劳动力要素外流吗&#xff1f;——以电子商务进农村综合示范案例为例》使用到的重要数据集电子商务进农村综合示范政策县数据&#xff0c;该论文采用了双重差分法和全国县域面板数据研究…

JDK JRE JVM 三者的关系

总结&#xff1a; 1. jdk 中 的 javac 编译器将 .java 文件编译为 .class 字节码文件 &#xff08;编译&#xff09; 2. jre 执行 .class 字节码文件 &#xff08;运行&#xff09; 3. jre 通过 jvm 运行程序&#xff0c;确保程序能够在不同平台上正确执行&#xff08;实现跨平…

【Spring Cloud】微服务日志收集系统-ELK+Kafka

目录 任务背景本文相关文件资料Elasticsearch特性 LogstashKibanaELKELK的缺点引入消息中间件 ELKKafkaKafka概念 ELKKafka环境搭建1.将安装素材上传至服务器 cd /usr/local/soft2.防止Elasticsearch因虚拟内存问题启动失败3.创建镜像li/centos7-elasticsearch4.创建容器5.验证…

FOC - BLDC六步换相驱动原理

文章目录 1 . 前言2 . 电机旋转原理3 . BLDC特点4 . BLDC反电动势投影位置5 . BLDC换相时刻6 . BLDC换相注意事项7 . 小结 【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 无刷直流电机在这里区分为两种&#xff0c;一是永磁无刷直流电…

MedSAM 学习笔记(续):训练自定义数据集

1、下载官方权重 官方的预训练权重:https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth 下载后保存在:work_dir/SAM/sam_vit_b_01ec64.pth 目录 2、摆放数据集 因为MedSAM 分割模型需要对3D数据集进行切片处理,也就是对nii.gz 数据处理成 npy 格式 …

掌握这三点软文营销秘诀,快速实现品牌用户增长

在信息爆炸的时代&#xff0c;品牌用户如何快速实现增长已成为每个企业发展的必经之虑。而软文营销&#xff0c;作为品牌推广中不可或缺的一环&#xff0c;也正逐渐受到越来越多企业的青睐。它与传统的硬广告相比&#xff0c;不会直接的进行产品销售&#xff0c;软文更注重与读…

iOS ------ 多线程 GCD

一&#xff0c;GCD简介 GCD是Apple开发的一个多线程的较新的解决方案。它主要用于优化应用程序以支持多核处理器以及其他对称处理系统。它是一个在线程池模式的基础上执行的并发任务。 为什么要使用GCD&#xff1f; GCD&#xff01;可用于多核的并行运算GCD会自动利用更多的…

Linux配置java,maven,marshalsec环境

文章目录 一. Linux配置java环境1.下载jdk文件2.解压tar.gz文件3.设置java环境变量4.验证是否成功 二. Linux配置maven环境1.下载压缩包2.解压tar.gz3. 配置环境变量 三. Linux配置marshalsec环境 一. Linux配置java环境 1.下载jdk文件 mkdir /opt/javawget https://repo.hua…

STM32使用ST-LINK下载程序中需要注意的几点

使用keil5的ST-link下载界面 前提是ST-LINK已经连接好&#xff0c;&#xff08;下图中是没有连接ST-link设备&#xff09;&#xff0c;只是为了展示如何查看STlink设备是否连接的方式 下载前一定设置下载完成后自启动 这个虽然不是必须&#xff0c;但对立即看到新程序的现象…

CVE-2020-0688 远程代码执行漏洞

CVE-2020-0688 远程代码执行漏洞 漏洞产生的主要原因就是在Exchange ECP组件中发现&#xff0c;邮件服务在安装的过程中不会随机生成秘钥&#xff0c;也就是说所有默认安装的Exchange服务器中的validationKey和decryptionKey的值都是相同的&#xff0c;攻击者可以利用静态秘钥…

【深度学习基础】使用Pytorch搭建DNN深度神经网络与手写数字识别

目录 写在开头 一、DNN的搭建 问题描述与数据集 神经网络搭建 模型训练 模型评估 模型复用 二、手写数字识别 任务描述 数据集 神经网络搭建 模型训练 模型评估 写在最后 写在开头 本文将介绍如何使用PyTorch框架搭建深度神经网络模型。实现模型的搭建、模…