当前位置: 首页 > article >正文

day10-SpringBootWeb案例-1

一、准备工作

1 需求&环境搭建

在这里插入图片描述

步骤:

  1. 准备数据库表(dept、emp)
  2. 创建 springboot 工程,引入对应的起步依赖(web、mybatis、mysql 驱动、lombok)
  3. 配置文件 application.properties 中引入 mybatis 的配置信息,准备对应的实体类
  4. 准备对应的 Mapper、Service(接口、实现类)、Controller 基础结构

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

2 开发规范

2.1 开发规范 - Restful

REST(REpresentational State Transfer),表述性状态转换,它是一种软件架构风格

在这里插入图片描述

  • REST 是风格,是约定方式,约定不是规定,可以打破。
  • 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users、emps、books…

2.2 开发规范-统一响应结果

前后端交互统一响应结果 Result

package com.itheima.pojo;

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);
    }
}

2.3 开发流程

在这里插入图片描述

二、部门管理

1 查询部门

在类上添加 @Slf4j 注解时,会自动生成 Logger 对象,对象名:log

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {

    //private static Logger log = LoggerFactory.getLogger(DeptController.class);
    
    @Autowired
    private DeptService deptService;

    /**
     * 查询部门数据
     * @return
     */
    //@RequestMapping(value = "/depts",method = RequestMethod.GET) //指定请求方式为GET
    @GetMapping
    public Result list(){
        log.info("查询全部部门数据");
        //调用service查询部门数据
        List<Dept> deptList =  deptService.list();
        return Result.success(deptList);
    }
}    
public interface DeptService {
    /**
     * 查询全部部门数据
     * @return
     */
    List<Dept> list();
}    
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> list() {
        return deptMapper.list();
    }
}    
@Mapper
public interface DeptMapper {
    /**
     * 查询全部部门
     * @return
     */
    @Select("select * from dept")
    List<Dept> list();
}    

2 前后端联调

将资料中提供的“前端工程” 文件夹中的压缩包,拷贝到一个没有中文不带空格的目录下,解压。
在这里插入图片描述

启动 nginx,访问测试:http://localhost:90

3 删除部门

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {

    //private static Logger log = LoggerFactory.getLogger(DeptController.class);
    
    @Autowired
    private DeptService deptService;

    /**
     * 删除部门
     * @return
     */
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id){
        log.info("根据id删除部门:{}",id);
        //调用service删除部门
        deptService.delete(id);
        return Result.success();
    }
}    
public interface DeptService {
    /**
     * 删除部门
     * @param id
     */
    void delete(Integer id);
}    
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    @Override
    public void delete(Integer id) {
        deptMapper.deleteById(id);
    }
}    
@Mapper
public interface DeptMapper {
    /**
     * 根据ID删除部门
     * @param id
     */
    @Delete("delete from dept where id = #{id}")
    void deleteById(Integer id););
}    

4 新增部门

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {

    //private static Logger log = LoggerFactory.getLogger(DeptController.class);
    
    @Autowired
    private DeptService deptService;

    /**
     * 新增部门
     * @return
     */
    @PostMapping
    public Result add(@RequestBody Dept dept){
        log.info("新增部门: {}" , dept);
        //调用service新增部门
        deptService.add(dept);
        return Result.success();
    }
}    

三、员工管理

1 分页查询

1.1 基础分页

思路分析
在这里插入图片描述

/**
 * 分页查询结果封装类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {

    private Long total;//总记录数
    private List rows;//数据列表

}
/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {
/**
     * 分页查询,获取列表数据
     * @param start
     * @param pageSize
     * @return
     */
    @Select("select * from emp limit #{start},#{pageSize}")
    public List<Emp> page(Integer start, Integer pageSize);
}
/**
 * 员工管理Controller
 */
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {

    @Autowired
    private EmpService empService;

    @GetMapping
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize){
        log.info("分页查询, 参数: {},{}",page,pageSize);
        //调用service分页查询
        PageBean pageBean = empService.page(page,pageSize);
        return Result.success(pageBean);
    }
}
@Service
public class EmpServiceImpl implements EmpService {

    @Autowired
    private EmpMapper empMapper;

    @Override
    public PageBean page(Integer page, Integer pageSize) {
        //1. 获取总记录数
        Long count = empMapper.count();

        //2. 获取分页查询结果列表
        Integer start = (page - 1) * pageSize;
        List<Emp> empList = empMapper.page(start, pageSize);

        //3. 封装PageBean对象
        PageBean pageBean = new PageBean(count, empList);
        return pageBean;
    }
}

1.2 分页插件

PageHelper 是 Mybatis 的一款功能强大、方便易用的分页插件,支持任何形式的单标、多表的分页查询。

官网:https://pagehelper.github.io/

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

/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {
    /**
     * 员工信息查询
     * @return
     */
    //@Select("select * from emp")
    public List<Emp> list();
}
@Service
public class EmpServiceImpl implements EmpService {

    @Autowired
    private EmpMapper empMapper;

    @Override
    public PageBean page(Integer page, Integer pageSize) {
        //1. 获取总记录数
        Long count = empMapper.count();

        //2. 获取分页查询结果列表
        Integer start = (page - 1) * pageSize;
        List<Emp> empList = empMapper.page(start, pageSize);

        //3. 封装PageBean对象
        PageBean pageBean = new PageBean(count, empList);
        return pageBean;
    }
}

2 分页查询(带条件)

<?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.itheima.mapper.EmpMapper">
    
    <!--条件查询-->
    <select id="list" resultType="com.itheima.pojo.Emp">
        select *
        from emp
        <where>
            <if test="name != null and name != ''">
                name like concat('%',#{name},'%')
            </if>
            <if test="gender != null">
                and gender = #{gender}
            </if>
            <if test="begin != null and end != null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>
        order by update_time desc
    </select>

</mapper>

3 删除员工

思路分析
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/271874.html

相关文章:

  • 牛客周赛 Round 78 A-C
  • 【MFC】C++所有控件随窗口大小全自动等比例缩放源码(控件内字体、列宽等未调整) 20250124
  • 基于SMPL的三维人体重建-深度学习经典方法之VIBE
  • Mono里运行C#脚本35—加载C#语言基类的过程
  • hedfs和hive数据迁移后校验脚本
  • C语言精粹:深入探索字符串函数
  • 代码随想录day40:动态规划part8,背包问题完
  • CVPR2024 | 大核卷积新高度101x101,美团提出PeLK
  • 5.通过组策略如何设置域控统一桌面壁纸?AD域控如何做桌面背景壁纸策略?
  • 车载电子与软件架构
  • Java面试题总结200道(三)
  • 龙芯新世界系统(安同AOCS OS)安装Cinnamon桌面最新版6.0.4
  • UDP数据报套接字编程
  • python类对象
  • HarmonyOS鸿蒙开发常用4种布局详细说明
  • [Java、Android面试]_07_继承与多态、重写与重载
  • django 定时任务的创建
  • js中怎样添加、移出、插入、复制、创建?
  • Python中的变量是什么类型?
  • Java学习笔记(15)
  • 【工具】一键生成动态歌词字幕
  • 国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney
  • 【LeetCode热题100】 94. 二叉树的中序遍历(二叉树)
  • 前端框架vue的样式操作,以及vue提供的属性功能应用实战
  • 介绍一款鼠标无边界软件
  • RUST egui部署到github