SpringBoot案例,通关版

项目目录


此项目为了伙伴们可以快速入手SpringBoot项目,全网最详细的版本,每个伙伴都可以学会,这个项目每一步都会带大家做,学完后可以保证熟悉SpringBoot的开发流程

项目介绍:项目使用springboot +mybatis进行开发

带你一起写小项目

先把初始环境给你们

链接: https://pan.baidu.com/s/1At81Y_CQZlKFOPqzyY4vXw?pwd=tvhs 提取码: tvhs 复制这段内容后打开百度网盘手机App,操作更方便哦

下载资料,里面有sql文件,写后

然后根据开发规范的Result类

第一步新建springboot项目


springboot是对spring的封装

然后我们点击创建项目

创建完后我们会进入这个页面

选择两个文件然后删除

然后根据开发流程

前后端分离开发,后端要根据接口文档进行开发,接口文档在前面分享的资料里面

返回结果的封装类 Result

首先我们要确定开发规范,也就是遵守restful开发风格规范,返回值要result封装为统一的格式

java 复制代码
package com.healer.common;

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);
    }
}

一个result类

里面有 code msg 还有data

然后result里面有静态方法
有成功的返回方法

SpringBoot的三层架构

开发项目的时候,要进行分层,有controller层 还有service层 还有mapper层, 这三层结构是互相调用的,前段发起请求请求到达controller层,然后controller调用service 最后service调用mapper

数据库,实体类

在资料里面有实体类的创建,可以直接用,


然后导入到 idea中 ,实体类要导入到 com.healer.pojo中

然后直接使用lombok注解

@Data 这个作用是lombok在编译的时候会给实体类加入get set 方法

然后写入 @NoArgsConstructor @AllArgsConstructor

那么这个实体类就创建完毕了

实体类的作用是与数据库中的表字段进行对应,一个实体类对应一个表

只有这样,才能将数据库中的数据查询出来然后返回给实体类,实体类再进行封装为对象

现在我们的项目基础的搭建以及完成了

就是丢一个common包下的result

然后是controller包下的

然后是service下面的

接口与实现类实现类继承接口,然后实现类上面要加入@Service注解,这个作用是告诉spring这是一个service对象,要让spring将这个类加入到ioc容器中,被spring管理,所以我们使用@Autowride拿到的bean对象都是被spring管理的对象,也就是代理对象

mapper也是,也要加入@Mapper

配置Mybatis

mybatis的起步依赖,数据库的连接依赖

mybatis的起步依赖配置后,要配置mapper的xml文件

mybatis.xml的三个规范

第一个是同包同名

也就是

xml要与mapper所在相同的级别并且类名要与xml名一致

第二个,mapper.xml的namespace要与mapper全类名进行一致
第三个是方法中的 id 要与maper的方法名一致

然后xml创建好后,就可以配置properties的配置

yaml 复制代码
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.healer.pojo
#驼峰映射
mybatis.configuration.map-underscore-to-camel-case=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tails?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

开启mybatis的驼峰映射

第一个业务的开发 部门查询

根据接口文档

首先是一个部门的查询

那么我们就从DeptController进行开发

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

import com.healer.common.Result;
import com.healer.pojo.Dept;
import com.healer.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.util.List;

/**
 * @author healer
 * @Description DeptController
 * @data 2024-05-30 16:31
 */
@RestController
@Slf4j
@RequestMapping("/depts")
public class DeptController {

    @Autowired
    private DeptService deptService;

    @GetMapping
    public Result selectDeptList() {
        List<Dept> deptList = deptService.selectDeptList();
        return Result.success(deptList);
    }
}

首先进行@ResultController,表示这个是一个controller层

然后引入service

由于service被spring管理了,所以直接引入就行

然后我们就根据接口文档进行开发

我们查询的是所有的部门所以,要使用list集合去接收数据

    List<Dept> deptList = deptService.selectDeptList();
            return Result.success(deptList);

然后返回Result.success(deptList);

开发service层

然后调用mapper

使用注解直接查询

进行测试

postman测试

前后端联调

开发完接口后,进行前后端联调

首先打开前端,使用nginx运行后,访问

访问后有数据说明前后端联调成功

查看nginx.conf

nginx端口号90

然后进行代理

总结

开发流程 : 明确需求 接口文档 思路分析 接口开发

删除部门业务

删除部门的业务

首先写sql语句测试,测试之后就根据开发文档进行开发

先看请求地址

然后再看请求方式

请求参数是一个id

响应结果是直接返回删除成功

所以不需要service层返回值

直接在controller层调用service方法后就直接返回成功就行

然后进行测试,测试通过

controller层

java 复制代码
    /**
     * 根据id删除部门
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Result delectDeptById(@PathVariable("id") Integer id) {
        deptService.delectDeptById(id);
        return Result.success();

    }

service层

java 复制代码
    @Override
    public void delectDeptById(Integer id) {
        deptMapper.delectDeptById(id);
    }

mapper层

java 复制代码
    @Delete("delete from dept where id=#{id}")
    void delectDeptById(@Param("id") Integer id);

部门管理-新增部门

开发新增部门

首先查看接口四要素

请求方式为post

请求路径为 /depts

请求参数是一个name

返回值,相应数据

为json数据

直接返回成功的信息

书写controller层代码

java 复制代码
  @PostMapping
    public Result addDept(@RequestBody Dept dept) {
        log.info("开始新增部门");
        deptService.addDept(dept);
        return Result.success();
    }

写service层

java 复制代码
  @Override
    public void addDept(Dept dept) {

        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.addDept(dept);
    }

mapper层

java 复制代码
    @Insert("insert into  dept ( name, create_time, update_time) values (#{dept.name},#{dept.createTime},#{dept.updateTime})")
    void addDept(@Param("dept") Dept dept);

书写之后进行测试

添加成功

使用post请求

发送json数据

{

"name": "测试部"

}

部门管理-修改部门

两个接口

一个是根据id查询 部门

一个是根据id修改部门

分析接口四要素

请求方式

请求参数

请求路径

返回值

直接返回就行了

controller层

java 复制代码
    /**
     * 根据部门id查询部门信息
     *
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result findDeptById(@PathVariable("id") Integer id) {
        Dept dept = deptService.findDeptById(id);
        return Result.success(dept);

    }

    /**
     * 根据id修改部门
     *
     * @param dept
     * @return
     */
    @PutMapping
    public Result updateDept(@RequestBody Dept dept) {

        log.info("开始进行部门修改");
        deptService.updateDept(dept);
        return Result.success();

    }

service层

java 复制代码
    @Override
    public Dept findDeptById(Integer id) {
        Dept dept = deptMapper.findDeptById(id);
        return dept;
    }

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

mapper层

java 复制代码
    @Select("select id, name, create_time, update_time from dept where id=#{id}")
    Dept findDeptById(@Param("id") Integer id);

    @Update("update dept set  name=#{dept.name} ,update_time=#{dept.updateTime} where id =#{dept.id}")
    void updateDept(@Param("dept") Dept dept);

然后进行测试

分页查询

不管做什么项目,只要是分页查询,那么前端就给服务器两个参数

一个是pagenum

一个是pagesize

那么服务器端也就返回

List数据

还有total总记录数

返回结果

data

要返回给前端两个参数

项目开发返回的是Result对象

data里面存储的是数据

所以,一次不能返回两个数据,

只能把这个两个数据都封装在一个对象里面,

一个是list 一个是total

将page对象封装进data中

使用pageBean进行两个参数的封装

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

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

import java.util.List;

/**
 * @author healer
 * @Description PageBean
 * @data 2024-05-30 22:41
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {

    //    总记录数
    private Long total;
    private List<Emp> rows;
}

分页查询-思路

分页查询需要两个sql语句

一个用于查询总数

一个用于分页查询

controller层

当进行分页查询的时候,前端会进行传递两个参数

一个参数是page一个参数是pgesize

controller层接收到请求后 直接调用service

service中要先去获取总记录数

再去获取结果列表

最后再将 总记录数与结构列表封装pagebean,返回给controller

controller层

service层

查询了两个接口

使用分页插件 PageHelper

分页的步骤都是重复的,所以可以使用插件

文件上传

文件上传前端怎么做

前端页面

所有的文件上传都使用post

文件上传

使用表单

xml 复制代码
使用表单提交数据
需要在表单上面加入 enctype="multipart/form-data"
<form action="/upload" method="post"  enctype="multipart/form-data">
    姓名:<input type="text" name="username">
    <br>
    年龄:<input type="text" name="age">
    <br>
    图像:<input type="file" name="image">
    <br>
    <input type="submit" value="提交">
</form>

后端接受请求

使用参数接受

下面是详细讲解

首先前端三个要素

第一个使用post提交

action 使用 /upload

然后上传的文件使用 file

type =file

在controller中书写

java 复制代码
  @PostMapping("/upload")
    public Result uploadFile(String username, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传.....{} {}", username, age);
        image.transferTo(new File("D:\\images\\1.md"));

        return Result.success();
    }

文件上传接入云服务 阿里云OSS

这个功能单独提取出来进行详解,可以直接进入,详细教程

链接: link

也可以使用腾讯云,下面介绍多种云的使用

修改员工-查询回显

首先修改员工的话,第一步就是继续页面的回显,回显就是根据id查询员工

当点击编辑的时候

页面会进行回显

# 更新员工

直接调用mapper进行书写更新接口

配置文件-参数配置化

容易变动的参数都放置在配置文件

参数配置化是将参数动态的配置在参数文件当中

然后使用只需要加载就可以 使用@Value()


配置文件-@ConfigurationProperties

先定义一个实体类

需要使用@ConfigurationProperties(prefix="aliyun.oss")

原则怎么是简单怎么来

@Value

与@ConfigurationProperties

员工性别统计

是根据性别分组

首先是使用if语句,将查询出来的数据进行修改

然后再起别名 讲字段名字进行修改

相关推荐
0zxm3 分钟前
06 - Django 视图view
网络·后端·python·django
m0_748257183 分钟前
Spring Boot FileUpLoad and Interceptor(文件上传和拦截器,Web入门知识)
前端·spring boot·后端
Yan.love37 分钟前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶40 分钟前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥40 分钟前
java提高正则处理效率
java·开发语言
小_太_阳1 小时前
Scala_【1】概述
开发语言·后端·scala·intellij-idea
智慧老师1 小时前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm1 小时前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
V+zmm101342 小时前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
Oneforlove_twoforjob2 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存