SprintBoot案例-增删改查

黑马程序员JavaWeb开发教程

文章目录

  • 一、准备工作
    • 1. 准备数据库表
      • 1.1 新建数据库mytlias
      • 1.2 新建部门表dept
      • 1.3 新建员工表emp
    • 2. 准备一个Springboot工程
      • 2.1 新建一个项目
    • 3. 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类
      • 3.1 引入mybatis的配置信息
      • 3.2 准备对应的实体类
    • 4. 准备对应的mapper、service、controller基础结构
      • 4.1 创建结构
      • 4.2 controller
      • 4.3 service
      • 4.4 Mapper
    • 5. 统一响应结果
  • 二、部门管理-查询
    • 1. 需求说明
    • 2. 接口文档
    • 3. 代码实现
      • 3.1 controller层
      • 3.2 service层
      • 3.3 mapper层
    • 4. postman测试
  • 三、部门管理-删除
    • 1. 需求说明
    • 2. 接口文档
    • 3. 代码实现
      • 3.1 controller层
      • 3.2 service层
      • 3.3 mapper层
    • 4. postman测试
  • 四、部门管理-新增
    • 1. 需求说明
    • 2. 接口文档
    • 3. 代码实现
      • 3.1 controller层
      • 3.2 service层
      • 3.3 mapper层
    • 4. postman测试
  • 五、员工管理-分页查询
    • 1. 需求说明
    • 2. 接口文档
    • 3. 代码实现
      • 3.1 controller层
      • 3.2 service层
      • 3.3 mapper层
    • 4. postman测试
  • 六、员工管理-删除员工
    • 1. 需求说明
    • 2. 接口文档
    • 3. 代码实现
      • 3.1 controller层
      • 3.2 service层
      • 3.3 mapper层
    • 4. postman测试
  • 七、员工管理-新增员工
    • 1. 需求说明
    • 2. 接口文档
    • 3. 代码实现
      • 3.1 controller层
      • 3.2 service层
      • 3.3 mapper层
    • 4. postman测试
  • 八、员工管理-修改
    • 1. 根据id 查询员工
      • 1.1 需求说明
      • 1.2 接口文档
      • 1.3 代码实现
        • 1.3.1 controller层
        • 1.3.2 service层
        • 1.3.3 mapper层
      • 1.4 postman测试
    • 2. 修改员工数据
      • 1.1 需求说明
      • 1.2 接口文档
      • 1.3 代码实现
        • 1.3.1 controller层
        • 1.3.2 service层
        • 1.3.3 mapper层
      • 1.4 postman测试

在这里插入图片描述

一、准备工作

1. 准备数据库表

1.1 新建数据库mytlias

# 新建数据库 mytlias
create database mytlias;
# 使用数据库 mytlias
use mytlias;

1.2 新建部门表dept

  1. 新建部门表
-- 部门管理
create table dept(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(10) not null unique comment '部门名称',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
) comment '部门表';
  1. 向部门表中插入数据
insert into dept (id, name, create_time, update_time)
values(1,'学工部',now(),now()),
      (2,'教研部',now(),now()),
      (3,'咨询部',now(),now()),
      (4,'就业部',now(),now()),
      (5,'人事部',now(),now());

1.3 新建员工表emp

  1. 新建员工表
-- 员工管理(带约束)
create table emp (
     id int unsigned primary key auto_increment comment 'ID',
     username varchar(20) not null unique comment '用户名',
     password varchar(32) default '123456' comment '密码',
     name varchar(10) not null comment '姓名',
     gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
     image varchar(300) comment '图像',
     job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',
     entrydate date comment '入职时间',
     dept_id int unsigned comment '部门ID',
     create_time datetime not null comment '创建时间',
     update_time datetime not null comment '修改时间',
    foreign key (dept_id) references dept(id) # 部门表的主键id 是员工表的一个外键
) comment '员工表';
  1. 向员工表中插入数据
INSERT INTO emp
(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time)
VALUES  (1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),
        (2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),
        (3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),
        (4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),
        (5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),
        (6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),
        (7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),
        (8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),
        (9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),
        (10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),
        (11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),
        (12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),
        (13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),
        (14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),
        (15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),
        (16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2007-01-01',2,now(),now()),
        (17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());

2. 准备一个Springboot工程

2.1 新建一个项目

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

  • 引入对应的起步依赖(web、mybatis、mysql驱动、lombok)

在这里插入图片描述

3. 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类

3.1 引入mybatis的配置信息

  • 在application.properties中添加以下代码
    在这里插入图片描述
# MyBatis配置信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 改成你自己要连接的数据库的名字(mytlias)
spring.datasource.url=jdbc:mysql://localhost:3306/mytlias
# 自己数据库用户名(root)
spring.datasource.username=root
# 自己数据库密码(123456)
spring.datasource.password=123456

#开启驼峰命名
mybatis.configuration.map-underscore-to-camel-case=true 

3.2 准备对应的实体类

  • 创建一个文件夹pojo,并在其下创建两个类Dept、Emp
    在这里插入图片描述
  1. 实体类Dept
package com.itheima.mytlias.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data//生成getter、setter、tostring等
@AllArgsConstructor//全参构造函数
@NoArgsConstructor//无参构造函数
public class Dept {
    private Integer id; // 部门id
    private String name; // 部门名称
    private LocalDateTime createTime; // 创建时间
    private LocalDateTime updateTime; // 更新时间

}

  1. 实体类Emp
package com.itheima.mytlias.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp {
    private Integer id;//用户id
    private String username;//用户名
    private String password;//用户密码
    private String name;//用户姓名
    private Short gender;//用户新别
    private String image;//图像地址
    private Short job;//职位
    private LocalDate entrydate;//日志日期
    private Integer deptId;//部门id
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}

4. 准备对应的mapper、service、controller基础结构

4.1 创建结构

在这里插入图片描述

4.2 controller

  1. DeptController
package com.itheima.mytlias.controller;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class DeptController {
}

  1. EmpController
package com.itheima.mytlias.controller;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmpController {
}

4.3 service

  1. deptService
package com.itheima.mytlias.service;


public interface DeptService {
}

  1. EmpService
package com.itheima.mytlias.service;

public interface EmpService {
}

  1. DeptServiceImpl
package com.itheima.mytlias.service.impl;

import com.itheima.mytlias.service.DeptService;
import org.springframework.stereotype.Service;

@Service
public class DeptServiceImpl implements DeptService {
}

  1. EmpServiceImpl
package com.itheima.mytlias.service.impl;

import com.itheima.mytlias.service.EmpService;
import org.springframework.stereotype.Service;

@Service
public class EmpServiceImpl implements EmpService {
}

4.4 Mapper

  1. DeptMapper
package com.itheima.mytlias.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interfaceDeptMapper {
}

  1. EmpMapper
package com.itheima.mytlias.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interfaceEmpMapper {
}

5. 统一响应结果

  • 为了统一响应结果,需要在pojo包下创建Result类
package com.itheima.mytlias.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);
    }
}

二、部门管理-查询

1. 需求说明

在这里插入图片描述

2. 接口文档

在这里插入图片描述

3. 代码实现

3.1 controller层

package com.itheima.mytlias.controller;

import com.itheima.mytlias.pojo.Dept;
import com.itheima.mytlias.pojo.Result;
import com.itheima.mytlias.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.awt.*;
import java.util.List;


@Slf4j//打印日志使用
@RestController
@RequestMapping("/depts")//本例下所有的请求都会以/dept开头,所以可以使用这个注解,提取出来
public class DeptController {

    //注入
    @Autowired
    private DeptService deptService;
    /**
     * 查询所有部门数据
     * 请求方式为 Get
     * 请求路径为/dept
     * 无参数
     * 返回统一响应结果
     * @return
     */
    @GetMapping
    public Result list(){
       //打印日志
        log.info("查询所有部门数据");
       //调用service,查询所有部门数据
        List<Dept> deptList = deptService.list();
        //返回结果
        return Result.success(deptList);
    }
}

3.2 service层

  1. service
package com.itheima.mytlias.service;


import com.itheima.mytlias.pojo.Dept;

import java.util.List;

public interface DeptService {
    /**
     * 查询部门所有数据
     * @return
     */
    List<Dept> list();
}

  1. impl
package com.itheima.mytlias.service.impl;

import com.itheima.mytlias.mapper.DeptMapper;
import com.itheima.mytlias.pojo.Dept;
import com.itheima.mytlias.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DeptServiceImpl implements DeptService {
    //注入
    @Autowired
    private DeptMapper deptMapper;

    /**
     * 查询所有部门数据
     * @return
     */
    @Override
    public List<Dept> list() {
        //调用mapper查询所有部门数据
        List<Dept> deptList=deptMapper.list();
        return deptList;
    }
}

3.3 mapper层

package com.itheima.mytlias.mapper;

import com.itheima.mytlias.pojo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface DeptMapper {


    /**
     * 查询部门全部数据
     * @return
     */
    @Select("select * from dept")
    public List<Dept> list();
}

4. postman测试

在这里插入图片描述

三、部门管理-删除

1. 需求说明

在这里插入图片描述

  • 也就是根据部门id删除部门

2. 接口文档

在这里插入图片描述

3. 代码实现

3.1 controller层

  • 从这里向后,只给出新增的代码
 /**
     * 根据部门id删除部门
     * 请求方式为 Delete
     * 请求路径为/depts/{id}
     * 参数为部门id,路径参数,需要加上注解 @PathVariable
     * 返回统一响应结果
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable Integer id){
        //打印日志
        log.info("根据部门id删除部门");
        //调用service,根据部门id删除部门
        deptService.deleteById(id);
        //返回结果
        return Result.success();
    }

3.2 service层

  1. service
 /**
     * 根据部门id删除部门
     * @param id
     */
    void deleteById(Integer id);
  1. impl
/**
     * 根据部门id删除部门
     * @param id
     */
    @Override
    public void deleteById(Integer id) {
        //调用mapper,根据部门id删除部门
        deptMapper.deleteById(id);
    }

3.3 mapper层

 /**
     * 根据部门id删除部门
     * @param id
     */
    @Delete("delete from dept where id=#{id}")
    void deleteById(Integer id);

4. postman测试

在这里插入图片描述

四、部门管理-新增

1. 需求说明

在这里插入图片描述

  • 根据部门名称新增部门

2. 接口文档

在这里插入图片描述

3. 代码实现

3.1 controller层

/**
     * 根据部门名称添加部门
     * 请求方式为 POST
     * 请求路径为/depts
     * 参数为JSON格式数据,因此需要加上注解 @RequestBody
     * 返回统一响应结果
     * @param dept
     * @return
     */
    @PostMapping
    public Result insertByName(@RequestBody Dept dept){
        //打印日志
        log.info("根据部门名称添加部门");
        //调用service,根据部门名称添加部门
        deptService.insertByName(dept);
        //返回结果
        return Result.success();

    }

3.2 service层

  1. service
/**
     * 根据部门名称添加部门
     * @param dept
     */
    void insertByName(Dept dept);
  1. impl
/**
     * 根据部门名称添加部门
     * @param dept
     */
    @Override
    public void insertByName(Dept dept) {
        //修改基础信息
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        //调用mapper,根据部门名称添加部门
        deptMapper.insertByName(dept);
    }

3.3 mapper层

/**
     * 根据部门名称添加部门
     * @param dept
     */
    @Insert("insert into dept (id, name, create_time, update_time) values (#{id},#{name},#{createTime},#{updateTime})")
    void insertByName(Dept dept);

4. postman测试

在这里插入图片描述

{
    "name":"人事部"
}

五、员工管理-分页查询

  • PageHelper和xml映射文件的使用参考分页查询PageHelper插件&分页条件查询(xml映射文件,动态SQL)

1. 需求说明

在这里插入图片描述

2. 接口文档

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

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

3. 代码实现

3.1 controller层

package com.itheima.mytlias.controller;

import com.itheima.mytlias.pojo.PageBean;
import com.itheima.mytlias.pojo.Result;
import com.itheima.mytlias.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;

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

    @GetMapping
    //@RequestParam:为了给形参指定默认值
    //@DateTimeFormat:日期时间类型的参数,需要使用该注解指定格式
    public Result page(String name, Short gender,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
                       @RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "2") Integer pageSize) {
        //打印日志
        log.info("参数 {},{},{},{},{},{}", name, gender, begin, end, page, pageSize);
        //调用service
        PageBean pageBean = empService.page(name, gender, begin, end, page, pageSize);
        //返回结果
        return Result.success(pageBean);

    }
}

3.2 service层

  1. service
package com.itheima.mytlias.service;

import com.itheima.mytlias.pojo.PageBean;

import java.time.LocalDate;

public interface EmpService {
    /**
     * 分页查询
     *
     * @return
     */
    PageBean page(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize);
}

  1. impl
package com.itheima.mytlias.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.mytlias.mapper.EmpMapper;
import com.itheima.mytlias.pojo.Emp;
import com.itheima.mytlias.pojo.PageBean;
import com.itheima.mytlias.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    /**
     * 分页查询
     *
     * @return
     */
    @Override
    public PageBean page(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {

        //使用pagehelper指定查询页码,和每页查询数据
        PageHelper.startPage(page, pageSize);
        //执行查询
        List<Emp> empList = empMapper.list(name, gender, begin, end);
        Page<Emp> p = (Page<Emp>) empList;//强制转换成Page类型
        Long count = p.getTotal();
        List<Emp> result = p.getResult();
        //封装为 PageBean
        PageBean pageBean = new PageBean(count, result);
        return pageBean;
    }
}

3.3 mapper层

  1. mapper
package com.itheima.mytlias.mapper;

import com.itheima.mytlias.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.web.bind.annotation.PathVariable;

import java.time.LocalDate;
import java.util.List;

@Mapper
public interface EmpMapper {
    /**
     * 使用pageHelper的话,只需要定义一个简单的查询就可以
     *
     * @return
     */
    public List<Emp> list(@Param("name") String name, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);
}

  1. 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">
<!--        namespace:EmpMapper的全类名-->
<mapper namespace="com.itheima.mytlias.mapper.EmpMapper">

    <!--    带条件的分页查询-动态查询-->
    <!--    id:与方法名一致
            resultType:返回单条记录的全类名-->
    <select id="list" resultType="com.itheima.mytlias.pojo.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 end!=null">and entrydate between #{begin} and #{end}</if>
        </where>
        order by update_time desc
    </select>
</mapper>

4. postman测试

在这里插入图片描述

http://localhost:8080/emps?name=张&gender=1&begin=2000-01-01&end=2010-01-01

六、员工管理-删除员工

1. 需求说明

在这里插入图片描述

2. 接口文档

在这里插入图片描述

3. 代码实现

3.1 controller层

/**
     * 根据员工id,删除员工
     * 请求方式为 DELETE
     * 请求路径为/emps
     * 返回统一响应结果
     * 参数:
     * @param ids  @PathVariable 路径参数需要加这个注解
     * @return
     */
    @DeleteMapping("/{ids}")
    public Result DeleteById(@PathVariable List<Integer> ids){
        //打印日志
        log.info("参数:{}",ids);
        //调用service
        empService.deleteById(ids);
        //返回结果
        return Result.success();
    }

3.2 service层

  1. service
 /**
     * 根据员工 id删除员工
     * @param ids
     */
    void deleteById(List<Integer> ids);
  1. impl
 /**
     * 根据员工 id删除员工
     * @param ids
     */
    @Override
    public void deleteById(List<Integer> ids) {
        //调用mapper 删除员工
        empMapper.deleteById(ids);

    }

3.3 mapper层

  1. EmpMapper
/**
     * 根据id删除员工
     * @param ids
     */
    void deleteById(@Param("ids") List<Integer> ids);
  1. EmpMApper.xml
<!--    根据员工删除id-->
    <!--    collection:要遍历的数组
            close:结束之后的SQL片段
            open:遍历之前的左侧
            separator:以什么为分割
            item遍历后得到的单个元素-->
    <delete id="deleteById">
        delete from emp where id in
        <foreach collection="ids" close=")" open="(" separator="," item="id">
            #{id}
        </foreach>
    </delete>

4. postman测试

在这里插入图片描述

七、员工管理-新增员工

1. 需求说明

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

2. 接口文档

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

在这里插入图片描述

3. 代码实现

3.1 controller层

/**
     * 新增员工
     * 请求方式为 POST
     * 请求路径为/emps
     * 返回统一响应结果
     * 参数:
     * @param emp @RequestBody 如果参数是JSON格式的数据,需要加这个注解
     * @return
     */
    @PostMapping
    public Result insert(@RequestBody Emp emp){
        //打印日志
        log.info("新增员工");
        //调用servicce
        empService.insert(emp);
        //返回结果
        return Result.success();
    }

3.2 service层

  1. service
/**
     * 新增员工
     */
    void insert(Emp emp);
  1. impl
/**
     * 新增员工
     */
    @Override
    public void insert(Emp emp) {
        //处理基本数据
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        //调用mapper
        empMapper.insert(emp);
    }

3.3 mapper层

 /**
     * 新增员工
     */
    @Insert("insert into emp(id,username,password,name,gender,image,dept_id,entrydate,job,create_time,update_time) values(null,#{username},#{password},#{name},#{gender},#{image},#{deptId},#{entrydate},#{job},#{createTime},#{updateTime})")
    void insert(Emp emp);

4. postman测试

在这里插入图片描述

八、员工管理-修改

– 修改可以分为两个步骤:根据id查询员工;修改员工信息

1. 根据id 查询员工

1.1 需求说明

在这里插入图片描述

1.2 接口文档

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

1.3 代码实现

1.3.1 controller层
/**
     * 该接口用于根据主键ID查询员工的信息
     * 请求方式为 GET
     * 请求路径为/emps/{id}
     * 返回统一响应结果-Emp
     * 参数:
     *
     * @param id @PathVariable 路径参数,添加此注解
     * @return
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        //打印日志
        log.info("参数 {}", id);
        //调用service,根据主键ID查询员工的信息
        Emp emp = empService.getById(id);
        //返回结果
        return Result.success(emp);
    }
1.3.2 service层
  1. service
/**
     * 根据主键ID查询员工的信息
     * @param id
     * @return
     */
    Emp getById(Integer id);
  1. impl
 /**
     * 根据主键ID查询员工的信息
     * @param id
     * @return
     */
    @Override
    public Emp getById(Integer id) {
        //调用mapper,根据主键ID查询员工的信息
        Emp emp=empMapper.getById(id);
        return emp;
    }
1.3.3 mapper层
/**
     * 根据主键ID查询员工的信息
     * @return
     */
    @Select("select * from emp where id=#{id}")
    Emp getById(@Param("id") Integer id);

1.4 postman测试

在这里插入图片描述

2. 修改员工数据

1.1 需求说明

  • 同上

1.2 接口文档

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

1.3 代码实现

1.3.1 controller层
/**
     * 该接口用于修改员工的数据信息
     * 请求方式为 PUT
     * 请求路径为/emps
     * 返回统一响应结果
     * 参数:
     * @param emp  @RequestBody 若参数是JSON格式的数据的话,需要加上该注解
     * @return
     */
    @PutMapping
    public Result update(@RequestBody Emp emp){
        //打印日志
        log.info("修改员工的数据信息");
        //调用service
        empService.update(emp);
        //返回结果
        return Result.success();
    }
1.3.2 service层
  1. service
/**
     * 修改员工的数据信息
     * @param emp
     */
    void update(Emp emp);
  1. impl
/**
     * 修改员工的数据信息
     * @param emp
     */
    @Override
    public void update(Emp emp) {
        //设置基本值
        emp.setUpdateTime(LocalDateTime.now());
        //调用mapper,修改员工的数据信息
        empMapper.update(emp);
    }
1.3.3 mapper层
  1. EmpMapper
 /**
     * 修改员工的数据信息
     */
    void update(Emp emp);
  1. EmpMapper.xml
<!--    修改员工的数据信息-->
    <update id="update">
        update emp
        <set>
            <if test="username !=null and username!=' '">username =#{username},</if>
            <if test="name !=null and name!=' '">name=#{name},</if>
            <if test="gender !=null and gender!=' '">gender=#{gender},</if>
            <if test="image !=null and image!=' '">image=#{image},</if>
            <if test="deptId !=null and deptId!=' '">dept_id=#{deptId},</if>
            <if test="entrydate !=null and entrydate!=' '">entrydate=#{entrydate},</if>
            <if test="job !=null and job!=' '">job=#{job}</if>
        </set>
        where id=#{id}
    </update>

1.4 postman测试

在这里插入图片描述

{
    "id":1,
    "username":"jinyongnew",
    "name":"金庸",
    "gender":1,
    "image":"1.jpg",
    "job":4,
    "entrydate":"2000-01-01",
    "deptId":2
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工单系统有哪些?

市面上的工单系统真的非常多&#xff0c;一个个列举肯定说不完&#xff0c;我大致给它们按照不同的依据&#xff0c;进行了一下分类&#xff1a; 1、按部署方式分类&#xff1a; 本地化部署工单系统&#xff1a;适用于对数据安全性要求较高的企业&#xff0c;需要企业在本地服…

论文阅读:基于改进 YOLOv5算法的密集动态目标检测方法

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;基于改进YOLOv5算法的密集动态目标检测方法 - 中国知网 (cnki.net) 概要 目的&#xff1a;提出一种基于 YOLOv5改进的检测算法&#xff0c;解决密集动态目标检测精度低及易漏检的问题。 方法&…

MQTT_服务器的安装_1.3

此例子是以Windows系统安装开源版本的EMQX 下载 EMQX 下载并解压 解压如图 进入bin 文件夹在文件目录中输入cmd回车 启动服务器 然后在cmd中输入下面的代码&#xff08;会弹出一个访问网络的选项&#xff0c;确认可以访问网络&#xff09; emqx start 结果如图&#xff08;…

Linux安装及管理程序!!!

目录 应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包封装类型 1.RPM软件包 2.DEB软件包 3.源代码软件包 4.附带安装程序的软件包 RPM软件包操作管理 1.RPM软件包管理器Red-Hat Package Manager 2.RPM软件包 rpm软件操作 1.先查询光盘连接情况 2.连…

使用websocket和服务建立链接慢的原因分析

1、java 项目使用websocketHandler创建websocket服务&#xff0c;在拦截器HttpSessionHandshakeInterceptor中&#xff0c;beforeHandshake日志到的很快&#xff0c;afterHandshake很慢 建立链接一直在连接中 2、原因分析&#xff1a; 找到服务器上的进程名 jps -l 3、使用…

【数组的度】leetcode,python

一种很菜的做法&#xff08;暴力&#xff09;&#xff0c;for循环&#xff08;样例能过一大半呢&#xff0c;复杂度的话。。。&#xff09; class Solution:def findShortestSubArray(self, nums: List[int]) -> int:nlen(nums)if n1:return nmx1#出现次数最多的计算for i …

iOS 主要语言切换问题

前言 上架时需要把主要语言切换成英文&#xff0c;存储时一直提示“因为您必须先为使用这种语言的每个版本提供所有必需的截屏”错误。 错误截图 解决方案&#xff1a; 1、增加英文的截图去审核&#xff0c;审核过了再切换主要语言 官方文档出处 END.

【前沿探索】|大模型在二进制安全领域中的应用

引言 随着“软件定义万物”的时代到来&#xff0c;软件在我们生活中扮演着不可或缺的角色。然而&#xff0c;不严格的软件设计、开发人员的能力限制&#xff0c;以及编程语言本身的不安全性&#xff0c;都可能导致软件出现缓冲区溢出、整型溢出、格式化字符串攻击等缺陷。这些…

家庭主妇,宝妈在家能做什么副业有收入?

作为家庭主妇和宝妈&#xff0c;您可以考虑以下副业来增加收入 1. 在家兼职 您可以在家里做一些兼职工作&#xff0c;如数据输入、文案撰写、翻译、客服等。可以通过在线平台或社交媒体寻找这些机会。 2. 做任务 目前网上最流行的就是做任务&#xff0c;因为简单无门槛&…

自定义 Gradle 插件进行统一的静态代码分析

静态代码分析是一项了不起的技术, 它能让代码库更易于维护. 但是, 如果你在不同的版本库中拥有多个服务(可能由不同的团队开发), 如何才能让每个人都遵循既定的代码风格呢? 一个好办法是将所有规则封装在一个插件中, 该插件会在每个项目构建时自动执行所需的验证. 因此, 在本…

2024年第十届中西部外语翻译大赛(1)

2024年第十届中西部外语翻译大赛 竞赛信息 “由中西部翻译协会共同体指导发起&#xff0c;各省市译协共建学术指导委员会&#xff0c;2024年第十届中西部外语翻译大赛由中西部翻译协会共同体秘书处&#xff08;武汉公仪网络科技有限公司&#xff09;承办。” - 获奖证书样图 -…

怎么3d立面有些模型不能删除是什么原因怎么解决?---模大狮模型网

在进行3D建模和设计过程中&#xff0c;有时会遇到一些模型无法删除的情况&#xff0c;这可能会导致设计流程受阻&#xff0c;影响工作效率。本文将介绍在3D立面中遇到无法删除模型的原因以及解决方法&#xff0c;帮助您顺利解决这一问题&#xff0c;提高设计效率。 一、模型未正…

能自动化视频剪辑的开源工具来了 剪辑师、自媒体作者狂喜

项目简介 Funclip 是阿里巴巴通义实验室开源的一款视频剪辑工具&#xff0c;专门用于精准、便捷的视频切片。 它能够自动识别视频中的中文语音并允许用户根据语音内容来裁剪视频。该工具使用了阿里巴巴语音识别模型FunASR Paraformer-Large确保了剪辑的精准性。 你可以根据识…

七人拼团策略:深度解析奖励体系与互助合作机制

在七人拼团策略中&#xff0c;其精心设计的奖励体系是吸引众多参与者的核心动力。接下来&#xff0c;我们将详细解析这一模式中三种关键的奖励类型&#xff1a;直推奖、滑落奖和团队奖&#xff0c;并探讨它们背后的互助合作机制。 奖励体系解析 在七人拼团中&#xff0c;每一件…

内网环境ubuntu设置静态ip、DNS、路由,不影响网络访问

内网环境通常是有线的&#xff0c;通过服务器的ip、mac、dns地址访问网络才生效的&#xff0c;如果ip地址变了&#xff0c;就不能访问网络了。 如果你的ip地址变了&#xff0c;或者要防止ip变更影响网络访问&#xff0c;就要设置 1、依次点击右上角的电源-设置&#xff0c;在打…

【深度学习】SDXL中的Offset Noise,Diffusion with Offset Noise,带偏移噪声的扩散

https://www.crosslabs.org//blog/diffusion-with-offset-noise 带有偏移噪声的扩散 针对修改后的噪声进行微调&#xff0c;使得稳定扩散能够轻松生成非常暗或非常亮的图像。 作者&#xff1a;尼古拉斯古藤伯格 | 2023年1月30日 马里奥兄弟使用稳定扩散挖掘隧道。左图显示了未…

EasyExcel进阶教程

EasyExcel进阶教程 EasyExcel进阶教程概述一、关于表头1.1 多级表头1.2 ExcelProperties注解的index字段和order字段的第一个区别1.3 ExcelProperties注解的index字段和order字段的第二个区别1.4 表头单元格的合并二、动态表头三、样式设置3.1 表头样式设置3.2 数据样式设置Eas…

OpenAI DALL·E 3

本文翻译整理自&#xff1a;https://openai.com/index/dall-e-3/ 文章目录 一、关于 DALLE 3二、注重安全防止有害生成内部测试 三、创意掌控 一、关于 DALLE 3 1、DALLE 3 比我们以前的系统了解更多的细微差别和细节&#xff0c;使您可以轻松地将您的想法转化为极其准确的图像…

ubuntu quota配置磁盘配额

安装quota工具:sudo apt-get install quota这条命令会安装quota工具&#xff0c;它用于在Linux系统中管理和强制执行磁盘配额。编辑用户quota:sudo edquota -u <username> /data这条命令会打开默认的文本编辑器&#xff0c;允许你为用户liushenshen在/data文件系统上设置…

SDL系列(三)—— SDL2.0 扩展库:SDL_image与SDL_mixer

SDL_image SDL 默认支持的&#xff0c;只能打开 BMP 格式的图片 。 然而我们常见的是 Png jpg 格式的图片&#xff0c;于是我们这节完成 SDL 借用 自带的三方库 &#xff0c;来 完成加载渲染 png 等其他图片格式。 SDL_image 简介 使用 SDL_image &#xff0c;您…