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

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

【SpringBoot】SpringBoot案例 | Web后端开发_第1张图片

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

【SpringBoot】SpringBoot案例 | Web后端开发_第2张图片

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

项目结构:

【SpringBoot】SpringBoot案例 | Web后端开发_第3张图片

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"}]
}

【SpringBoot】SpringBoot案例 | Web后端开发_第4张图片

依次编写ControllerServiceMapper

【SpringBoot】SpringBoot案例 | Web后端开发_第5张图片

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

【SpringBoot】SpringBoot案例 | Web后端开发_第6张图片

端口为90:

【SpringBoot】SpringBoot案例 | Web后端开发_第7张图片

1.2 删除部门

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

【SpringBoot】SpringBoot案例 | Web后端开发_第8张图片

1.3 新增部门

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

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

【SpringBoot】SpringBoot案例 | Web后端开发_第9张图片

【SpringBoot】SpringBoot案例 | Web后端开发_第10张图片

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"
        }
    ]
}

【SpringBoot】SpringBoot案例 | Web后端开发_第11张图片

1.5 修改部门名称

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

【SpringBoot】SpringBoot案例 | Web后端开发_第12张图片

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

【SpringBoot】SpringBoot案例 | Web后端开发_第13张图片

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

【分页查询插件 PageHelper】

maven依赖:

		<dependency>
            <groupId>com.github.pagehelpergroupId>
            <artifactId>pagehelper-spring-boot-starterartifactId>
            <version>1.4.2version>
        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

【SpringBoot】SpringBoot案例 | Web后端开发_第14张图片

@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,返回。

	@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语句末尾没有分号:


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 >=  #{begin}if>
            <if test="end != null">and entrydate <=  #{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>

【SpringBoot】SpringBoot案例 | Web后端开发_第15张图片

你可能感兴趣的:(Java,前端,spring,boot,java)