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语句,将查询出来的数据进行修改

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

相关推荐
敲代码的小王!1 小时前
MD5加密算法和BCrypt密码加密算法
java·算法·安全
魔尔助理顾问2 小时前
一个简洁高效的Flask用户管理示例
后端·python·flask
李长渊哦6 小时前
使用Druid连接池优化Spring Boot应用中的数据库连接
数据库·spring boot·后端
web135085886356 小时前
【Spring Boot】Spring AOP动态代理,以及静态代理
spring boot·后端·spring
罗政6 小时前
冒险岛079 V8 整合版源码搭建教程+IDEA启动
java·ide·intellij-idea
nbsaas-boot7 小时前
Go 自动升级依赖版本
开发语言·后端·golang
架构默片7 小时前
【JAVA工程师从0开始学AI】,第五步:Python类的“七十二变“——当Java的铠甲遇见Python的液态金属
java·开发语言·python
zzyh1234567 小时前
springcloud的组件及作用
后端·spring·spring cloud
不只会拍照的程序猿8 小时前
从插入排序到希尔排序
java·开发语言·数据结构·算法·排序算法
尚学教辅学习资料8 小时前
基于SpringBoot的图书借阅小程序+LW参考示例
spring boot·后端·小程序·java毕设·图书借阅