1.准备工作

1.1、需求 & 环境搭建

  • 需求
    • 管理部门
      • 查询部门列表
      • 删除部门
      • 新增部门
      • 修改部门
    • 员工管理
      • 查询员工列表(分页、条件)
      • 删除员工
      • 新增员工
      • 修改员工
  • 环境搭建
    • 准备数据库(dept、emp)
    • 创建springboot工程,引入对应起步依赖(web、mybatis、mysql驱动、lombok)
    • 配置文件application.properties
    • 三层结构的创建

image-20230810234041269.png

image-20230810234052780.png

1.2、开发规范

  • Rest路径风格
    • 表述性状态转换,是一种软件架构分割
  • 传统

image-20230810234058835.png

  • Rest风格

image-20230810234103073.png

  • 注意事项

    • Rest是风格,是约定方式,约定不是规范,可以打破
    • 描述模块的功能通常使用复数,加s,表示此类资源,而非单个资源
  • 统一响应结构

    • Result
    @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);
        }
    }
    
  • 开发流程

image-20230810234110942.png

2.部门管理

2.1、查询部门

  • 需求

image-20230810234116013.png

  • DeptController
@Slf4j
@RestController()
@RequestMapping("/depts")
public class DeptController {
    @Autowired
    private DeptService deptService;

    @GetMapping
    public Result deptList(){
        List<Dept> list = deptService.list();
        log.info("查询部门数据",list.toString());
        return Result.success(list);
    }
}
  • DeptService
public interface DeptService {
    List<Dept> list();
}
  • DeptServiceImpl
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> list() {
        return deptMapper.list();
    }
}
  • DeptMapper
@Mapper
public interface DeptMapper {
    @Select("select id, name, create_time, update_time from dept")
    List<Dept> list();
}
  • postman测试

image-20230810234128205.png

2.2、前后端联调

  • 将资料提供的ngix-1.22.-=tilas.zip解压 启动nginx

image-20230810234136041.png

  • @Slf4j(Controller层上面)
    • 日志输出,省去创建Log代码

2.3、删除部门

image-20230810234141488.png

  • DeptController
@GetMapping
public Result deptList(){
    List<Dept> list = deptService.list();
    log.info("查询部门数据",list.toString());
    return Result.success(list);
}
  • DepetService
void deleteDept(Integer id);
  • DeptServiceImpl
@Override
public void deleteDept(Integer id) {
    deptMapper.deleteDept(id);
}
  • DaoMapper
@Delete("delete from dept where id = #{id}")
void deleteDept(Integer id);

2.4、新增部门

image-20230810234147965.png

  • DeptController
@PostMapping
public Result addDept(@RequestBody Dept dept){
    deptService.addDept(dept);
    return Result.success();
}
  • DeptService
void addDept(Dept dept);
  • DeptServiceImpl
@Override
public void addDept(Dept dept) {
    deptMapper.addDept(dept);
}

2.5、修改部门

image-20230810234153123.png

  • DeptController
@PutMapping
public Result updateDept(@RequestBody Dept dept){
    deptService.updateDempt(dept);
    return Result.success();
}

@GetMapping("/{id}")
public Result selectById(@PathVariable Integer id){
    Dept dept = deptService.getDeptById(id);
    return Result.success(dept);
}
  • DeptService
void updateDempt(Dept dept);

Dept getDeptById(Integer id);
  • DeptServiceImpl
@Override
public void updateDempt(Dept dept) {
    dept.setUpdateTime(LocalDateTime.now());
    deptMapper.updateDept(dept);
}

@Override
public Dept getDeptById(Integer id) {
    return deptMapper.getDeptById(id);
}
  • DeptDao
@Update("update dept set name = #{name},update_time = #{updateTime} where id = #{id}")
void updateDept(Dept dept);
@Select("select id, name, create_time, update_time from dept where id = #{id}")
Dept getDeptById(Integer id);

3.员工管理

3.1、分页查询

image-20230810234200626.png

后台要的数据只是一个,而后台需要传输总条数和当前查询出来的对象集合——封装为一个对象,响应前端

  • EmpController
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
    @Autowired
    private EmpService empService;

    @GetMapping
    public Result getEmps(@RequestParam(defaultValue = "1") Integer page,
                          @RequestParam(defaultValue = "5")Integer pageSize) {
        PageModel pageModel = empService.getEmpsPage(page,pageSize);
        log.info("总条数",pageModel.getTotal().toString());
        return Result.success(pageModel);
    }
}

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

  • EmpService
public interface EmpService {
    PageModel getEmpsPage(Integer page, Integer pageSize);
}
  • EmpServiceImpl
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    @Override
    public PageModel getEmpsPage(Integer page, Integer pageSize) {
        Integer count = empMapper.count();
        page = (page-1)*pageSize;
        List<Emp> empList = empMapper.getEmpsPage(page,pageSize);
        PageModel pageModel = new PageModel(count,empList);
        return pageModel;
    }

}
  • EmpDao
@Mapper
public interface EmpMapper {
    @Select("select count(*) from emp")
    Integer getCount();
    @Select("select * from emp limit #{page},#{pageSize}")
    List<Emp> getEmpsPage(Integer page,Integer pageSize);
}

3.2、分页插件PageHelper

  • 依赖

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.1</version>
    </dependency>
    
  • EmpController不变,同上

  • EmpService不变,同上

  • EmpServiceImpl

@Override
public PageModel getEmpsPage(Integer page, Integer pageSize) {
    //1.设置分页参数
    PageHelper.startPage(page,pageSize);
    //2.执行查询
    List<Emp> emps = empMapper.getEmpsPage();
    Page<Emp> p = (Page<Emp>) emps;
    //3.封装
    PageModel pageModel = new PageModel(p.getTotal(),p.getResult());
    return pageModel;
}
  • EmpMapper
@Select("select * from emp")
List<Emp> getEmpsPage();

3.3、分页查询(带条件)

image-20230810234210719.png

  • EmpController
@GetMapping
public Result getEmps(@RequestParam(value = "name",required = false) String name,
                      @RequestParam(value = "gender",required = false) Short gender,
                      @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                      @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
                      @RequestParam(defaultValue = "1") Integer page,
                      @RequestParam(defaultValue = "5")Integer pageSize) {
    PageModel pageModel = empService.getEmpsPage(name,gender,begin,end,page,pageSize);
    log.info("总条数",pageModel.getTotal().toString());
    return Result.success(pageModel);
}
  • EmpService
PageModel getEmpsPage(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize);
  • EmpServiceImpl
@Override
public PageModel getEmpsPage(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {
    //1.设置分页参数
    PageHelper.startPage(page,pageSize);
    //2.执行查询
    List<Emp> emps = empMapper.getEmpsPage(name,gender,begin,end);
    Page<Emp> p = (Page<Emp>) emps;
    //3.封装
    PageModel pageModel = new PageModel(p.getTotal(),p.getResult());
    return pageModel;
}
  • EmpMapper
List<Emp> getEmpsPage(String name, Short gender, LocalDate begin, LocalDate end);
  • EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhn.mapper.EmpMapper">
    <select id="getEmpsPage" resultType="com.mhn.pojo.Emp">
        select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time
        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.4、删除员工

image-20230810234218242.png

  • EmpController
@DeleteMapping("/{ids}")
public Result deleteEmpByIds(@PathVariable List<Integer> ids){
    empService.deleteEmpByIds(ids);
    return Result.success();
}
  • EmpService
void deleteEmpByIds(List<Integer> ids);
  • EmpServiceImpl
@Override
public void deleteEmpByIds(List<Integer> ids) {
    empMapper.deleteEmpByIds(ids);
}
  • EmpMapper
void deleteEmpByIds(List<Integer> ids);
  • EmpMapper.xml
<delete id="deleteEmpByIds">
    delete from emp where id in
    <foreach collection="ids" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</delete>

results matching ""

    No results matching ""