SpringBoot-CRUD
SpringBoot-CRUD

SpringBoot-CRUD

以部门管理为例,开发包括:

  • 查询部门列表
  • 删除部门
  • 新增部门
  • 修改部门(包括数据回显)

环境搭建

步骤:

  1. 准备数据库表(dept、emp)
  2. 创建springboot工程,引入对应的起步依赖(web、mybatis、mysql驱动、lombok)
  3. 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类
  4. 准备对应的Mapper、Service(接口、实现类)、Controller基础结构

数据库表:

-- 部门管理
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 '部门表';
-- 部门表测试数据
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());

创建项目工程目录结构:

配置application.properties

#数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=123456

#开启mybatis的日志输出
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#开启数据库表字段 到 实体类属性的驼峰映射
mybatis.configuration.map-underscore-to-camel-case=true

实体类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer id;  //部门id
    private String name;  //部门名称
    private LocalDateTime createTime;  //部门创建时间
    private LocalDateTime updateTime;  //部门信息修改时间
}

接口文档:

注:接口文档中的相应数据样例,只需关注data中数据,来确定对应返回值。

持久层

持久层配合Mybatis提供的注解进行编写。除查询有对应返回值外,增删改均无需返回值。

DeptMapper

@Mapper
public interface DeptMapper {

    // 查询所有部门
    @Select("select * from dept")
    List<Dept> list();

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

    // 添加部门
    @Insert("insert into dept (name, create_time, update_time) VALUES (#{name}, #{createTime}, #{updateTime})")
    void insert(Dept dept);

    // 根据id查询部门,用于数据回显
    @Select("select * from dept where id = #{id}")
    Dept selectById(Integer id);

    // 根据id更新部门
    @Update("update dept set name=#{name}, update_time=#{updateTime} where id=#{id}")
    void update(Dept dept);
}

业务层

为了降低代码耦合性,Service分为接口和实现类。需要注意的是,接口不添加@Service注解,而添加在实现类上。

DeptService

public interface DeptService {
    /**
     * @description 查询所有部门
     * @return List<Dept>
     * @author fangkun
     * @date 2023/10/11 20:43
     **/
    List<Dept> list();

    /**
     * @description 根据id删除部门
     * @param id 入参
     * @return void
     * @author fangkun
     * @date 2023/10/11 21:04
     **/
    void delete(Integer id);

    /**
     * @description 添加部门
     * @param dept 入参
     * @return void
     * @author fangkun
     * @date 2023/10/11 21:10
     **/
    void add(Dept dept);

    /**
     * @description 根据id查询部门
     * @param id 入参
     * @return Dept
     * @author fangkun
     * @date 2023/10/11 21:18
     **/
    Dept selectById(Integer id);

    /**
     * @description 根据id更新部门
     * @param dept 入参
     * @return void
     * @author fangkun
     * @date 2023/10/11 21:26
     **/
    void update(Dept dept);
}

DeptServiceImpl

@Slf4j  //日志,简化代码
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    public DeptMapper deptMapper;

    @Override
    public List<Dept> list() {
        List<Dept> deptList = deptMapper.list();
        return deptList;
    }

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

    @Override
    public void add(Dept dept) {
        // 创建时间和修改时间在业务层修改
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.insert(dept);
    }

    @Override
    public Dept selectById(Integer id) {
        Dept dept = deptMapper.selectById(id);
        return dept;
    }

    @Override
    public void update(Dept dept) {
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.update(dept);
    }
}

控制层

Controller层,我们使用Restful规范来进行编写。

DeptController

@Slf4j
@RestController
@RequestMapping("/depts")
public class DeptController {

    @Autowired
    private DeptService deptService;

    @GetMapping
    public List<Dept> list(){
        log.info("查询部门");
        List<Dept> deptList = deptService.list();
        return deptList;
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable Integer id){
        log.info("根据id删除部门");
        deptService.delete(id);
    }

    @PostMapping
    public void add(@RequestBody Dept dept){
        log.info("添加部门");
        deptService.add(dept);
    }

    @GetMapping("/{id}")
    public Dept selectById(@PathVariable Integer id){
        log.info("根据id查询部门");
        Dept dept = deptService.selectById(id);
        return dept;
    }

    @PutMapping
    public void update(@RequestBody Dept dept){
        log.info("根据id更新部门");
        deptService.update(dept);
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

index