day01 查增删改功能的实现

环境准备

1.创建spring boot项目,引入4依赖
(lombook、web、springWeb、MyBatisFramework、MySQL Driver)
2.三层架构+实体类
controller、service(serviceImpl实现类和service接口)、mapper、pojo(dept部门类和Result规范类)
3.配置数据库链接

需要注意记住三个点

整体结构
Tlias智能学习辅助系统
后端统一结果类Result

/**
 * 后端统一返回结果
 */
@Data
public class Result {

    private Integer code; //编码:1成功,0为失败
    private String msg; //错误信息
    private Object data; //数据

    public static Result success() {
        Result result = new Result();
        result.code = 1;
        result.msg = "success";
        return result;
    }

    public static Result success(Object object) {
        Result result = new Result();
        result.data = object;
        result.code = 1;
        result.msg = "success";
        return result;
    }

    public static Result error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }
    /**
     * 这段代码通过封装返回结果,提供了一种统一的方式来处理后端与前端之间的数据交互,使得代码更加简洁和易于维护。
     * 使用静态方法可以方便地创建不同状态的返回结果对象。
     */
}

application.yml数据库配置文件(!!!不要写错)

    # 应用服务 WEB 访问端口
server:
  port: 8080

#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis:
  mapper-locations: classpath:mappers/*xml
  type-aliases-package: com.itheima.mybatis.entity #指定Mybatis的实体目录
  #mybatis
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #开启驼峰命名映射开关
    map-underscore-to-camel-case: true

# 配置数据库的链接信息
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/tlias
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 1234

记得获取对象

    //获取业务层对象
    @Autowired //从ioc 容器中找DeptService类型的bean对象
    private DeptService deptService;

功能1:查询所有部门数据

    controller层
        /**
     * 处理请求:
     * @return depts
     */
    @GetMapping
    public Result selectDept() {
        //后端接到前端请求查询所有的部门,后端返回给前端的是装有部门对象的集合 List<Dept>
        //控制层向业务层要返回的对象集合 List<Dept>,然后把对象集合返回给前端
        List<Dept> depts = deptService.selectDept();
        /**
         * 返回的是一个Result类型的对象(设置Result实体类的目的: 就是要规范接口文档中统一的返回格式,方便管理)
         *
         * 当前类中存在一个注解@RestController
         * @RestController 注解中包含了@Controller和@ResponseBody
         * @ResponseBody作用: 将返回的对象或者集合自动转为json数据
         */
        return Result.success(depts);
    }
    //service层
    接口
     /**
     * 业务: 查询所有数据
     * @return 返回List<Dept>对象集合
     */
    List<Dept> selectDept();
    接口实现类
    /**
     * 业务: 查询所有数据
     *
     * @return 返回List<Dept>对象集合
     */
    @Override
    public List<Dept> selectDept() {
        //业务层向持久层要返回的对象集合 List<Dept>,然后把对象集合返回给控制层
        List<Dept> depts = deptMapper.selectDept();
        return depts;
    }
    //mapper层
    /**
     * @Mapper 是 MyBatis 框架中用于标记接口为 MyBatis 映射器的标签
     * 使 Spring 能自动扫描并将该接口注册为 Bean,以便使用其定义的方法进行数据库操作。
     */
    @Mapper
    public interface DeptMapper {
    /**
     * 通过sql语句查询所有部门
     * @return List<Dept>部门集合
     */
    @Select("select * from dept")
    List<Dept> selectDept();

功能2:根据id删除对应部门的数据

    controller层
      /**
     * 删除部门数据请求
     * @param id
     * @return
     */
    @DeleteMapping                    //除了查询有,增删改都没有返回值,返回执行成功的Success信息即可
    public Result deleteDept(Integer id) { //根据id删除对应数据,需要有参数id
        deptService.deleteDept(id);
        return Result.success();
    }

    //service层
    接口
     /**
     * 业务: 根据id删除对应的数据
     * @param id
     */
    void deleteDept(Integer id);
    接口实现类
     /**
     * 业务: 根据id删除对应的数据
     * @param id
     */
    @Override
    public void deleteDept(Integer id) {
        deptMapper.deleteDept(id);
    }

    //mapper层
    /**
     * 通过sql语句根据id删除对应部门
     * @Delete("") 删除注解,
     * 注意:
     * 1. !!!  字段 = #{成员变量}
     * 2.!!! @Param("")
     *      需要向 SQL 映射语句传递多个参数时容易出错,
     *      @Param 注解可以为每个参数指定一个有意义的名称,使 SQL 映射文件中的参数引用更加清晰。
     */
    @Delete("delete from dept where id = #{id}")
    void deleteDept(@Param("id") Integer id);

功能3:增加部门数据

    controller层
    /**
     * 新增部门数据
     * @param dept
     */
    @PostMapping                    //@RestController不是已经包含了@RequestBody吗?为什么加
    public Result insertDept(@RequestBody Dept dept) {
        deptService.insertDept(dept);
        return Result.success();
    }

    //service层
    接口
    /**
     * 业务:  新增部门数据
     * @param dept
     */
    void insertDept(Dept dept);
    接口实现类
     /**
     * 业务:  新增部门数据
     * @param dept
     */
    @Override
    public void insertDept(Dept dept) {
        //给对象补全属性   为什么给对象补全?只有名字吗
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.insertDept(dept);
    }
    //mapper层
     /**
     * 通过sql语句新增部门
     * @param dept
     */
    @Insert("insert into dept (name,create_time,update_time) value(#{name},#{createTime},#{updateTime})")
    void insertDept(Dept dept);

功能4:根据id回显部门,并修改对应的部门

    controller层
     /**
     * 根据id查询部门
     * 数据回显请求
     * @return dept
     */
                    //再看一遍@PathVariable 注解用于将 URL 中的路径变量绑定到控制器方法的参数上,方便从请求 URL 里提取动态数                   @GetMapping("/{id}")            据以进行后续处理。
    public Result selectDeptById(@PathVariable Integer id) {
        Dept dept = deptService.selectDeptById(id);
        return Result.success(dept);
    }
    /**
     * 修改数据
     * @param dept
     * @return
     */
    @PutMapping
    public Result updateDept(@RequestBody Dept dept) {
        deptService.updateDept(dept);
        return Result.success();
    }
    //service层
    接口
     /**
     * 业务:  根据id查询部门(数据回显)业务
     * @param id
     * @return
     */
    Dept selectDeptById(Integer id);
    /**
     * 业务:  根据修改部门业务
     * @param dept
     */
    void updateDept(Dept dept);

    接口实现类
        /**
     * 业务:  根据id查询部门(数据回显)业务
     * @param id
     * @return
     */
    @Override
    public Dept selectDeptById(Integer id) {
        Dept dept = deptMapper.selectDeptById(id);
        return dept;
    }

    /**
     * 业务:  根据修改部门业务
     * @param dept
     */
    @Override
    public void updateDept(Dept dept) {
        //给对象补全属性
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.updateDept(dept);
    }
    //mapper层
     /**
     * 通过sql语句根据ID查询部门回显和修改部门
     * @param id
     * @return
     */
    @Select("select * from dept where id = #{id}")
    Dept selectDeptById(@Param("id") Integer id);
    @Update("update dept set name = #{name},update_time = #{updateTime} where id = #{id}")
    void updateDept(Dept dept);