Springboot综合练习

Springboot综合练习,使用三层架构,结合Mybatis操作数据库,接收前端发送的请求,并进行对应的逻辑处理,对数据库增删改查。

pojo Dept

java 复制代码
package com.wzb.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer id;
    private String name;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

统一返回对象Result

java 复制代码
package com.wzb.pojo;

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

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code; // 响应码,1是响应成功,2是响应失败
    private String message; // 响应信息,描述响应结果的字符串
    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 fail(String message) {
        return new Result(0, message, null);
    }
}

Controller层

java 复制代码
package com.wzb.controller;

import com.wzb.pojo.Dept;
import com.wzb.pojo.Result;
import com.wzb.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

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


    // @RequestMapping(value = "/depts", method = RequestMethod.GET)
    // 可以使用GetMapping简化@RequestMapping注解,相当于就是将请求的模式(方法)融合到了Mapping中
    @GetMapping
    public Result getLists() {
        System.out.println("查询所有部门的信息");
        List<Dept> deptList = deptService.getDeptList();
        return Result.success(deptList);
    }

    // 可以通过{parameter}在请求路径中请求参数,然后在下面的函数中用@PathVariable注解接收请求的参数
    // 可以通过@DeleteMapping注解限定请求方式是delete,可以用于简化@RequeatMapping的注解
    @DeleteMapping("/{id}")
    public Result deleteDept(@PathVariable Integer id) {
        System.out.println("根据id删除部门");
        deptService.deleteDept(id);
        return Result.success();
    }

    // 要新增的部门的信息是前端页面传来的,不需要后端自己定义
    // 但是需要用@RequestBody注解将前端的json数据填充到实体类中
    @PostMapping
    public Result insertDept(@RequestBody Dept dept) {
        System.out.println("新增一个部门");
        deptService.insertDept(dept);
        return Result.success(dept);
    }

    // 前端请求数据用来更新部门,前端会发送新的部门的名字和要修改的部门的id,需要后端用一个Dept对象接收
    @PutMapping
    public Result updateDept(@RequestBody Dept dept) {
        System.out.println("更新一个部门");
        deptService.updateDept(dept);
        return Result.success(dept);
    }

    // Controller层的优化:以上方法的请求,都有一个共同点:都是以/dept开头------------重复了
    // 在Springboot中为了简化请求路径的定义:可以将公共的请求路径,抽取到类上,在类上加上注解@RequestMapping,
    // 并且指定请求路径"/depts"
}

Service接口

java 复制代码
package com.wzb.service;


import com.wzb.pojo.Dept;

import java.util.List;

public interface DeptService {

    public List<Dept> getDeptList();

    public void deleteDept(Integer id);

    public void insertDept(Dept dept);

    public void updateDept(Dept dept);

}

Service实现类

java 复制代码
package com.wzb.service;

import com.wzb.mapper.DeptMapper;
import com.wzb.pojo.Dept;
import com.wzb.pojo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;


@Service
public class DeptServiceImplement implements DeptService{
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> getDeptList() {
        return deptMapper.getDeptList();
    }

    @Override
    public void deleteDept(Integer id) {
        deptMapper.deleteDept(id);
    }

    @Override
    public void insertDept(Dept dept) {
        // 正常的前端是不可能传递dept的创建时间和dept的修改时间的,
        // 但是数据库中有这两个字段,所以说需要在后端补齐这些前端缺少的数据
        // 注:dept的id是自己生成的,所以说前端无需传递,后端也不需要补全
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.insertDept(dept);
    }

    @Override
    public void updateDept(Dept dept) {
        // 修改一个部门,前端会传递id和姓名到后端,后端只需要为其补齐Update_Time的数据
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.updateDept(dept);
    }
}

Mapper层(Dao层)

java 复制代码
package com.wzb.mapper;

import com.wzb.pojo.Dept;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface DeptMapper {
    @Select("select * from dept")
    public List<Dept> getDeptList();

    @Delete("delete from dept where id=#{id}")
    public void deleteDept(Integer id);

    @Insert("insert into dept (name, create_time, update_time) values(#{name}, #{createTime}, #{updateTime})")
    public void insertDept(Dept dept);

    @Update("update dept set name=#{name}, update_time=#{updateTime} where id=#{id}")
    public void updateDept(Dept dept);
}
相关推荐
無限進步D5 小时前
Java 运行原理
java·开发语言·入门
難釋懷5 小时前
安装Canal
java
是苏浙5 小时前
JDK17新增特性
java·开发语言
不光头强5 小时前
spring cloud知识总结
后端·spring·spring cloud
GetcharZp8 小时前
告别 Python 依赖!用 LangChainGo 打造高性能大模型应用,Go 程序员必看!
后端
阿里加多8 小时前
第 4 章:Go 线程模型——GMP 深度解析
java·开发语言·后端·golang
likerhood8 小时前
java中`==`和`.equals()`区别
java·开发语言·python
小小李程序员9 小时前
Langchain4j工具调用获取不到ThreadLocal
java·后端·ai