黑马2023JavaWeb的B站视频,还可以,学的大部分都是有用的东西。没有一上来还JDBC。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pE6UFO7W-1686932095267)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616165459395.png)]](https://img-blog.csdnimg.cn/5f500447524b4ebd8b614de0f912f035.png)
新建项目、更改application.properties配置:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dn8rFK82-1686932095268)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230617000958974.png)]](https://img-blog.csdnimg.cn/a5f5663adda347d7ad9346046ebc0cbb.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)]](https://img-blog.csdnimg.cn/a9766815b77547958c3e37a20d2aad87.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)]](https://img-blog.csdnimg.cn/36fed72f466844ba812d9172213d9ed1.png)
依次编写Controller、Service和Mapper。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-se5ymcxy-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616182136135.png)]](https://img-blog.csdnimg.cn/96892c2c416140fdb576ebc167f2cc42.png)
启动前端程序,双击nginx.exe即可。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FdnRRroS-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616182536108.png)]](https://img-blog.csdnimg.cn/1f87ad318b644af492ad6ff3e13538dd.png)
端口为90:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n0j5e1Ax-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616182719738.png)]](https://img-blog.csdnimg.cn/ab4d70b8f2c445a1ad0c72c467a9c9bd.png)
1.2 删除部门
DELETE
路径:/depts/{id}
根据ID删除部门数据
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EDsoNDqV-1686932095269)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616192653465.png)]](https://img-blog.csdnimg.cn/5153e21df7f64da19b0ae76de42c13e4.png)
1.3 新增部门
POST
路径:/depts
参数:json形式
{
"name": "教研部"
}
添加部门数据
数据库表中已经设置了主键 i d id id是自增的。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PyehdBH2-1686932095270)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616194234412.png)]](https://img-blog.csdnimg.cn/59612d694f074415bebc48892a05c07f.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fgyguwVz-1686932095270)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616194454665.png)]](https://img-blog.csdnimg.cn/baf96e3abbe6446faaf1d539cae7b6f1.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)]](https://img-blog.csdnimg.cn/aa4e284c564d48c19450eba379dbbf9a.png)
1.5 修改部门名称
请求路径:/depts
请求方式:PUT
参数:
{
"id": 1,
"name": "教研部"
}
更改编号id的部门名称为name
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YgykJ4pK-1686932095270)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230616202030775.png)]](https://img-blog.csdnimg.cn/0a259715150d40399402ba6bd28f8d8e.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)]](https://img-blog.csdnimg.cn/15380c9d06664b72b2e6789c9148945c.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)]](https://img-blog.csdnimg.cn/c003cf191a864a3babe1e1b18869e9be.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 >= #{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>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhUXOtUu-1686932095271)(【SpringBoot】SpringBoot案例-Web后端开发/image-20230617000752645.png)]](https://img-blog.csdnimg.cn/997e76cd1d6b4df8a631d5a85f9748a2.png)


















