JavaWeb 课堂笔记 —— 18 SpringBootWeb案例 员工管理

本文是JavaWeb学习笔记,基于黑马程序员的教程,主要讲解分页查询和条件分页查询的实现。文章首先介绍SQL分页语法和参数计算方法,然后详细说明后端开发流程:通过PageBean封装分页数据,使用MyBatis注解编写Mapper层查询,在Service层实现分页逻辑,并在Controller接收参数。特别介绍了分页插件PageHelper的简化用法,最后扩展实现带条件的动态分页查询,包括时间参数处理等注意事项。所有代码示例均配有详细注释,并展示了Postman测试和前后端联调过程。

本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)》,章节分布参考视频教程,为同样学习JavaWeb系列课程的同学们提供参考。

01 引子

  • 分页查询
  • 条件分页查询
  • 删除员工

02 分页查询

① 需求

在这里插入图片描述

分页查询语法

参数1:起始索引 = (页码 - 1)* 每页展示记录数

参数2:查询返回记录数 = 每页展示记录数

select * from emp limit 0, 5; #第一页
select * from emp limit 5, 5; #第二页
select * from emp limit 10, 5; #第三页

② 分析

在这里插入图片描述

③ 思路
在这里插入图片描述

PageBean.java:分页查询结果的封装类,声明两个属性,分别为总记录数和数据列表,和接口文档中响应数据的格式严格一致。

@Data:提供get、set方法

@NoArgsConstructor:提供无参构造

@AllArgsConstructor:提供全参构造

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

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

}

④ 开发

EmpMapper.java接口

/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {
    
    /**
 	 * 查询总记录数
 	 * @return
     */
    @Select("select count(*) from emp")
    public Long count(); //返回总记录数(long类型)
    
    /**
     * 分页查询,获取列表数据
     * @param start
     * @param pageSize
     * @return
     */
    @Select("select * from emp limit #{start}, #{pageSize}")
    public List<Emp> page(Integer start, Integer pageSize); 
    //返回数据列表(List集合类型)
    //泛型为封装的Emp类型
    //参数列表为动态的当前页码和每页展示记录数
}

EmpController.java

@RestController
public class EmpController {
    
    //注入Service对象
    @Autowired
    private EmpService empService;
    
    //@RequestParam传递默认值
    @GetMapping("/emps")
    public Result page(@RequestParam(defaultValue = "1") Integer page, 
                       @RequestParam(defaultValue = "10") Integer pageSize) {
        //输出日志log
        log.info("分页查询,参数:{},{}", page, pageSize);
        
        //调用Service分页查询
        PageBean pageBean = empService.page(page, pageSize);
        return Result.success(pageBean); //封装、返回
    }
}

EmpService.java接口

/**
 * 分页查询
 * @param page
 * @param pageSize
 * @return
 */
PageBean page(Integer page, Integer pageSize);

EmpServiceImpl.java实现类

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

Postman测试

在这里插入图片描述

⑥ 前后端联调测试

在这里插入图片描述

注:在进行分页查询时,注意请求参数和响应结果,前者包括页码和每页展示记录数,后者包括总记录数和结果列表,其中,注解@RequestParam(defaultValue="1")作用为设置请求参数默认值。

03 分页插件 PageHelper

在这里插入图片描述

在这里插入图片描述

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

        //2. 执行查询
        List<Emp> empList = empMapper.list();
        Page<Emp> p = (Page<Emp>) empList;

        //3. 封装PageBean对象
        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
        return pageBean;
    }

在这里插入图片描述

04 条件分页查询

① 需求

在这里插入图片描述

② 思路

在这里插入图片描述

③ 开发

EmpController.java

@RestController
public class EmpController {
    
    @Autowired
    private EmpService empService;
    
    @GetMapping("/emps")
    public 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") LoalDate end) {
 
        log.info("分页查询,参数:{},{},{},{},{},{}", page, pageSize, name, gender, begin, end);
        
        PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);
        return Result.success(pageBean); 
    }
}

EmpService.java接口

PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LoalDate end);

EmpServiceImpl.java实现类

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

        //2. 执行查询
        List<Emp> empList = empMapper.list(name, gender, begin, end);
        Page<Emp> p = (Page<Emp>) empList;

        //3. 封装PageBean对象
        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
        return pageBean;
}

EmpMapper.java接口

/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {
    
    @Select("select * from emp")
    public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
}

Postman测试

在这里插入图片描述

在这里插入图片描述

⑤ 前后端联调测试

在这里插入图片描述

在这里插入图片描述

05 EmpMapper.xml 文件

在这里插入图片描述

<?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>

在这里插入图片描述

06 删除员工

① 需求

在这里插入图片描述

② 思路

-- 批量删除员工
delete from emp where id in (1, 2, 3);

在这里插入图片描述

在这里插入图片描述

③ 开发

EmpController.java

@DeleteMapping("/emps/{ids}")
public Result delete(@PathVariable List<Integer> ids){
	log.info("批量删除操作, ids:{}", ids);
    empService.delete(ids);
    return Result.success();
}

EmpService.java

void delete(List<Integer> ids);

EmpServiceImpl.java

@Override
public void delete(List<Integer> ids){
	empMapper.delete(ids);
}

EmpMapper.java

void delete(List<Integer> ids);

EmpMapper.xml

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

Postman测试

在这里插入图片描述

在这里插入图片描述

⑤ 前后端联调测试

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值