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

SpringBootWeb案例-1(day10)

准备工作

需求 & 环境搭建

需求说明

环境搭建

步骤:

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


开发规范

开发规范 - Restful

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

注意事项

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

开发规范-统一响应结果

前后端交互统一响应结果 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);}
}

开发流程

部门管理

查询部门

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

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {//private static Logger log = LoggerFactory.getLogger(DeptController.class);@Autowiredprivate DeptService deptService;/*** 查询部门数据* @return*///@RequestMapping(value = "/depts",method = RequestMethod.GET) //指定请求方式为GET@GetMappingpublic 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 {@Autowiredprivate DeptMapper deptMapper;@Overridepublic List<Dept> list() {return deptMapper.list();}
}    
@Mapper
public interface DeptMapper {/*** 查询全部部门* @return*/@Select("select * from dept")List<Dept> list();
}    

前后端联调

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

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

浏览器可能缓存了旧的页面(比如你以前部署的“上一个项目”),因此你看到的是旧内容,而不是当前项目。尝试以下操作:

  • 清除浏览器缓存。
  • 使用无痕模式打开 localhost:90
  • 或者在浏览器地址栏中添加 ?nocache=1,例如:http://localhost:90/?nocache=1

删除部门

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {//private static Logger log = LoggerFactory.getLogger(DeptController.class);@Autowiredprivate 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 {@Autowiredprivate DeptMapper deptMapper;@Overridepublic 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););
}    

新增部门

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {//private static Logger log = LoggerFactory.getLogger(DeptController.class);@Autowiredprivate DeptService deptService;/*** 新增部门* @return*/@PostMappingpublic Result add(@RequestBody Dept dept){log.info("新增部门: {}" , dept);//调用service新增部门deptService.add(dept);return Result.success();}
}    

@RequestMapping

一个完整的请求路径,应该是
类上的 @RequestMapping
value属性+ 方法上的@RequestMappingvalue属性。

员工管理

分页查询

package com.itheima.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/*** 分页查询结果封装类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {private Long total;//总记录数private List rows;//数据列表
}
public interface EmpMapper {/*** 查询总记录数* @return*///@Select("select count(*) from emp")//public Long count();/*** 分页查询,获取列表数据* @param start* @param pageSize* @return*///@Select("select * from emp limit #{start},#{pageSize}")//public List<Emp> page(Integer start, Integer pageSize);/*** 员工信息查询* @return*///@Select("select * from emp")public List<Emp> list(String name, Short gender,LocalDate begin,LocalDate end);
/*** 员工管理Controller*/
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;@GetMappingpublic Result page(@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("分页查询, 参数: {},{},{},{},{},{}",page,pageSize,name,gender,begin,end);//调用service分页查询PageBean pageBean = empService.page(page,pageSize,name,gender,begin,end);return Result.success(pageBean);}
public interface EmpService {/*** 分页查询* @param page* @param pageSize* @return*/PageBean page(Integer page, Integer pageSize,String name, Short gender,LocalDate begin,LocalDate end);
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic 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;}

@RequestParam 的属性defaultValue可以来设置参数的默认值。 

分页插件PageHelper

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 {@Autowiredprivate EmpMapper empMapper;@Overridepublic 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;}
}

分页查询(带条件)

条件分页查询-思路

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//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>

删除员工

上一节

Mybatis(day09)-CSDN博客

下一节

SpringBootWeb案例-2(day11)-CSDN博客


http://www.mrgr.cn/news/83027.html

相关文章:

  • IP属地是什么?如何关闭或隐藏IP属地
  • 【机器学习】聚类(k-means)
  • 大型模型transformers加载与使用
  • 关于量子神经网络的思考
  • 【论文复现】一种用于数值和工程优化问题的组合社会群体鲸鱼优化算法
  • C语言的正则表达式
  • jenkins入门13--pipeline
  • 2020 年 12 月青少年软编等考 C 语言五级真题解析
  • moviepy 将mp4视频文件提取音频mp3 - python 实现
  • Linux初识——基本指令
  • Requests-数据解析bs4+xpath
  • 【0385】Postgres内核 OS 磁盘上创建 slot ( 3 - 1 )
  • STM32-笔记38-I2C-oled实验
  • STM32-DMA数据转运
  • R语言装环境Gcc报错以及scater包的安装
  • (七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络
  • 用Python实现简单的任务自动化
  • SQL从入门到实战
  • 【WPF】使用BitmapImage给Image的Source赋值,并释放原占用资源,避免删除原文件时导致程序崩溃
  • Vue 组件开发:构建高效可复用的 UI 构建块
  • 数据库语句学习
  • 51c大模型~合集102
  • 121 买入股票的最佳时机
  • 【cuda学习日记】2.1 2D matrix操作
  • Apache Traffic存在SQL注入漏洞(CVE-2024-45387)
  • docker 常用命令实践DEMO