【SpringBoot】SpringBoot案例 | Web后端开发

news2024/11/17 7:33:38

黑马2023JavaWeb的B站视频,还可以,学的大部分都是有用的东西。没有一上来还JDBC。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pE6UFO7W-1686932095267)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616165459395.png)]

新建项目、更改application.properties配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dn8rFK82-1686932095268)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230617000958974.png)]

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/employee_manager
spring.datasource.username=root
spring.datasource.password=

# the log of mybatis
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

项目结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sh7x3BIj-1686932095268)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616180323808.png)]

1 部门管理

1.1 部门列表查询

GET
路径:/depts
响应数据:
{
    "code": 1,
    "msg": "success",
    "data":[
        {"id":1,"name":"学工部","createTime":"2023-06-16T18:12:36","updateTime":"2023-06-16T18:12:36"},
        {"id":2,"name":"教研部","createTime":"2023-06-16T18:12:36","updateTime":"2023-06-16T18:12:36"},
        {"id":3,"name":"咨询部","createTime":"2023-06-16T18:12:36","updateTime":"2023-06-16T18:12:36"},
        {"id":4,"name":"就业部","createTime":"2023-06-16T18:12:36","updateTime":"2023-06-16T18:12:36"},
        {"id":5,"name":"人事部","createTime":"2023-06-16T18:12:36","updateTime":"2023-06-16T18:12:36"}]
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YbqeUgC8-1686932095268)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616175220090.png)]

依次编写ControllerServiceMapper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-se5ymcxy-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616182136135.png)]

启动前端程序,双击nginx.exe即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FdnRRroS-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616182536108.png)]

端口为90:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n0j5e1Ax-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616182719738.png)]

1.2 删除部门

DELETE
路径:/depts/{id}
根据ID删除部门数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EDsoNDqV-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616192653465.png)]

1.3 新增部门

POST
路径:/depts
参数:json形式
{
    "name": "教研部"
}
添加部门数据

数据库表中已经设置了主键 i d id id是自增的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PyehdBH2-1686932095270)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616194234412.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fgyguwVz-1686932095270)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616194454665.png)]

1.4 根据部门id查询

GET
路径:/depts/{id}
返回结果:
{
    "code": 1,
    "msg": "success",
    "data": [
        {
            "id": 1,
            "name": "计算机学院",
            "createTime": "2022-09-01T23:06:29",
            "updateTime": "2022-01-01T23:06:29"
        }
    ]
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bopsudcW-1686932095270)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616200042375.png)]

1.5 修改部门名称

请求路径:/depts
请求方式:PUT
参数:
{
	"id": 1,
	"name": "教研部"
}
更改编号id的部门名称为name

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YgykJ4pK-1686932095270)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616202030775.png)]

2 员工管理

2.1 员工列表分页查询 PageHelper⭐

请求路径:/emps
请求方式:GET
参数:
【必须】page=1&pageSize=10
【可选】name=&gender=1&begin=2007-09-01&end=2022-09-01
接口描述:该接口用于员工列表数据的条件分页查询,并返回总记录数
【有一说一我觉得这个接口设计得很烂,应该把两个功能拆开的,明明是独立的功能,但为了教学也可以理解】

请求示例

/emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10

返回示例:

{
  "code": 1,
  "msg": "success",
  "data": {
    "total": 2,
    "rows": [
       {
        "id": 1,
        "username": "jinyong",
        "password": "123456",
        "name": "金庸",
        "gender": 1,
        "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg",
        "job": 2,
        "entrydate": "2015-01-01",
        "deptId": 2,
        "createTime": "2022-09-01T23:06:30",
        "updateTime": "2022-09-02T00:29:04"
      },
      {
        "id": 2,
        "username": "zhangwuji",
        "password": "123456",
        "name": "张无忌",
        "gender": 1,
        "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg",
        "job": 2,
        "entrydate": "2015-01-01",
        "deptId": 2,
        "createTime": "2022-09-01T23:06:30",
        "updateTime": "2022-09-02T00:29:04"
      }
    ]
  }
}

分析:

# 从0开始查找5条数据
select * from emp limit 0, 5
# 查找第page页的数据
select * from emp limit (page - 1) * page, pageSize

获取总记录数:

select count(*) from emp

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XscK9Aqo-1686932095271)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616221438197.png)]

调用Mapper的两个函数来实现功能。

【分页查询插件 PageHelper】

maven依赖:

		<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.2</version>
        </dependency>

更改后:

@Service
public class EmpServiceImpl implements EmpService {

    @Autowired
    EmpMapper empMapper;

    @Override
    public PageBean pageList(Integer page, Integer pageSize) {
        // 1、设置分页参数
        PageHelper.startPage(page, pageSize);

        // 2、执行查询,封装为PageHelper中的page
        List<Emp> list = empMapper.selectAll();
        Page<Emp> pageHelper = (Page<Emp>) list;

        // 3、封装PageBean对象
        return new PageBean(pageHelper.getTotal(), pageHelper.getResult());
    }
}
package com.koukou.manager.mapper;

import com.koukou.manager.model.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface EmpMapper {

    /**
     * 查询Emp表的所有记录
     * @return
     */
    @Select("select * from emp")
    public List<Emp> selectAll();
}

2.2 在分页基础上加入查找条件

注意这里的类型,不是LocalDateTime

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3qvdHWa-1686932095271)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616233030632.png)]

@Slf4j
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    /**
     * @param page 页面
     * @param pageSize 页面大小
     * @param name 搜索关键字
     * @param gender 性别
     * @param begin 最早入职时间
     * @param end 最晚入职时间
     * @return Page{记录数, 本页员工列表}
     */
    @GetMapping("/emps")
    public Result pageList(@RequestParam(defaultValue = "1") Integer page,
                           @RequestParam(defaultValue = "10") Integer pageSize,
                           String name, Short gender,
                           @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                           @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        log.info("按要求查询某页员工");
        PageBean data = empService.pageList(page, pageSize, name, gender, begin, end);
        return Result.success(data);
    }
}

Service先进行分页设置,然后按常规进行条件查询,封装为Page<Emp>,返回。

	@Override
    public PageBean pageList(Integer page, Integer pageSize,
                             String name, Short gender,
                             LocalDate begin, LocalDate end) {
        // 1、设置分页参数
        PageHelper.startPage(page, pageSize);

        // 2、执行查询,封装为PageHelper中的page
        List<Emp> list = empMapper.select(name, gender, begin, end);
        Page<Emp> pageHelper = (Page<Emp>) list;

        // 3、封装PageBean对象
        return new PageBean(pageHelper.getTotal(), pageHelper.getResult());
    }

Mapper,xml文件中<需要进行转义,SQL语句末尾没有分号:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.koukou.manager.mapper.EmpMapper">

    <select id="select" resultType="com.koukou.manager.model.Emp">
        select * from emp
        <where>
            <if test="name != null">name like concat('%', #{name}, '%')</if>
            <if test="gender != null">and gender = #{gender}</if>
            <if test="begin != null">and entrydate &gt;=  #{begin}</if>
            <if test="end != null">and entrydate &lt;=  #{end}</if>
        </where>
        order by update_time desc
    </select>

</mapper>

2.3 批量删除员工

DELETE
路径:/emps/{ids},参数为数组
根据ID批量删除员工

例子:/emps/1,2,3

接收数组参数

	@DeleteMapping("/emps/{ids}")
    public Result delete(@PathVariable List<Integer> ids) {
        empService.delete(ids);
        return Result.success();
    }

xml文件中删除,注意是#{id}

    <delete id="delete">
        delete from emp where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhUXOtUu-1686932095271)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230617000752645.png)]

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

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

相关文章

定时任务执行时间设置详解

目录 前提实践举例定时任务执行时间设置详解定时器包含的子表达式和对应子表达式允许的值子表达式中特殊字符含义的解释和相应示例 前提 一般在处理业务过程中&#xff0c;都需要在特定的时间点执行特定的任务&#xff0c;尤其是业务复杂且执行时间很长&#xff0c;业务之间关…

java中的时间

一、JDK7的类 &#xff08;1&#xff09;Date 时间 &#xff08;2&#xff09;SimpleDateFormat 格式化时间 &#xff08;3&#xff09;Calendar 日历 格林尼治时间&#xff08;Greenwich Mean Time&#xff09;&#xff0c;简称GMT。 目前的世界标准时间&#xff08;UTC)以替换…

C++的友元函数、友元类、内部类

目录 1.友元函数 1.定义 2.注意 2.友元类 1.定义 3.内部类&#xff08;Java喜欢用&#xff0c;C不怎么用&#xff09; 1.定义 特性&#xff1a; 1.友元函数 1.定义 1.友元函数可访问类的私有和保护成员&#xff0c;但不是类的成员函数。 2.友元函数不能const修饰 3.…

Rust语言从入门到入坑——(4)Rust语法(上)

文章目录 0 引入1、基础语法1.1、变量1.2、常量1.3、重影 2、数据类型2.1、整形2.2、浮点型2.3、其他2.注释与打印2.1 注释2.2、打印 3、总结 0 引入 在这里我们需要介绍Rust语法&#xff0c;一共分三部分&#xff0c;第一部分是基础语言&#xff0c;和C语言类比&#xff0c;如…

从零构建后端项目-创建SpringBoot项目配置MyBatis

目录 主体介绍 创建SpringBoot项目主要步骤 配置MyBatis 整合高级功能 创建SpringBoot项目 配置Tomcat 配置MySQL数据源 配置Redis数据源 配置MongoDB数据源 运行项目&#xff0c;检测配置 配置MyBatis 创建IDEA数据库连接 生成MyBatis各种文件 配置MyBatis 配…

总结902

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.背诵前21篇短文&#xff0c;默写了10篇文章。…

智能视频无损放大-Topaz Video AI

今天给各位小伙伴们测试了一款可以使视频智能无损放大的软件——Topaz Video AI。 小编在很早之前也有了解过Topaz系列的软件&#xff0c;都是通过人工智能处理的&#xff0c;对小白新手们很适用&#xff0c;由于使用人工智能方面的软件或程序对硬件要求都比较高&#xff0c;因…

离散数学题目收集整理练习(期末过关进度70%)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f31f;博主的其他文章&…

Linux运维监控学习笔记2

Zabbix监控本机&#xff1a; 配置->主机->将Zabbix Server的状态开启。 然后我们还需要在这台机器上安装agent。agent安装在被监控端&#xff0c;收集数据&#xff0c;与监控服务器交互。 # 列出系统上面所有软件名称 rpm -qa |grep zabbix-agent zabbix-agent-3.4.15-…

hello算法笔记之栈与队列

一、栈 遵循先入后出&#xff08;First In, Last Out&#xff09;原则的线性数据结构。 只能在栈顶添加或删除元素 链表实现形式&#xff1a; ①栈以链表形式实现&#xff1a; ②以数组形式实现 二、队列 遵循先入先出&#xff08;First In, First Out&#xff09;规则的线…

使用WinDbg分析Windows dump文件方法

需要使用WinDbg工具来分析windows系统产生的dump文件&#xff0c;此工具属于Windows SDK的一个组件&#xff0c;在微软官方网站可以下载&#xff08;链接&#xff09;。 在安装Windows SDK的过程中&#xff0c;可以选择只安装WinDbg&#xff08;Debugging Tools for Windows&a…

数据结构——图

文章目录 **一 图的基本概念****1 定义** **二 图的存储及基本操作****1 邻接矩阵法****2 邻接表法****3 十字链表****4 邻接多重表****5 图的基本操作** **三 图的遍历****1 广度优先搜索BFS****2 深度优先搜索DFS****3 图的遍历与连通性** **四 图的应用****1 最小生成树****…

源码编译安装LAMP

文章目录 一.Apache1.什么是apache2.apache的主要特点3.apache的软件版本4.编译安装优点 二.LAMP简介与概述1.LAMP平台概述2.构建LAMP平台顺序3.各组件的主要作用 三.LAMPDISCUZ论坛搭建1.部署Apache1.1 下载apache相关安装包放入服务器中1.2 解压apache的安装进行安装1.3 编译…

SF授权系统源码 V3.7全开源无加密版本

&#x1f389; 有需要的朋友记得关赞评&#xff0c;文章底部来交流&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 2023全新SF授权系统源码 V3.7全开源无加密版本。网站搭建很简单&#xff0c;大致看来一下应该域名解析后上传源码解压&#xff0c;访问域名/i…

如何构建LAMP平台:Apache,MySQL,PHP

如何构建LAMP平台&#xff1a;Apache&#xff0c;MySQL&#xff0c;PHP 一、Apache网站服务&#xff1a;1. Apache的起源&#xff08;多系统兼容&#xff09;&#xff1a;2.重要特点&#xff1a;3.软件版本&#xff1a;4.编译安装呢http服务器&#xff1a; 二、LAMP简介与概述&…

家中群晖NAS遇到断电如何自动关机

群晖NAS遇到断电时如何自动关机 前置条件实现功能的想法具体实施的步骤开启群晖Linux的SSH登陆安装Putty或是Xshell远程登陆上群晖创建计划任务 前置条件 需要一台UPS&#xff08;品牌功能不限&#xff0c;只需续航5分钟以上就可以&#xff09; 实现功能的想法 通过监控网卡…

【备战秋招】每日一题:4月8日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第二题-必经之路 在线评测链接:P1167 题目内容 塔子哥的班主任最近组织了一次户外拓展活动&#xff0c;让班里的同学们一起去爬山。在路上&#xff0c;塔子哥看到了一棵漂…

Windows7 环境下的 Python 版本如何选取?

背景 我需要在不连接互联网的 Windows7 办公电脑上为网页版的办公系统开发一个自动化工具&#xff0c;可以将日常琐碎的操作替代掉。 基本确定了通过 PythonSelenium 的方式来实现网页自动化功能。 首先我需要配置开发环境&#xff0c;安装 Python、VS Code、导入Selenium库、…

提高 React 性能的技巧

1.解决重复渲染问题 我们大多数人都知道虚拟 DOM 是如何工作的&#xff0c;但最重要的是检测何时触发树比较。当我们可以跟踪它时&#xff0c;我们可以控制组件的重新渲染&#xff0c;并最终防止意外的性能流。令人惊讶的是&#xff0c;它并不难捕捉。首先&#xff0c;将 Reac…

uniapp APP端在线升级功能实现讲解——强制或可选升级,下载进度显示

文章目录 概要 需求分析 技术实现梳理 1.是否更新判断&#xff1a; 2.升级弹窗的展示 3.根据升级类型限制操作 4.下载APP监听下载进度 5.下载完自动安装 核心API讲解 1.plus.downloader.createDownload(url,options,completedCallback)&#xff08;下载&#xff09; 2.plus.r…