首页 > 其他分享 >SpringBoot案例,通关版

SpringBoot案例,通关版

时间:2024-05-31 18:59:21浏览次数:13  
标签:SpringBoot service dept public 案例 Result import id 通关

项目目录


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

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

带你一起写小项目

先把初始环境给你们

在这里插入图片描述

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

下载资料,里面有sql文件,写后
然后根据开发规范的Result类

第一步新建springboot项目

在这里插入图片描述
在这里插入图片描述

springboot是对spring的封装

然后我们点击创建项目

创建完后我们会进入这个页面
在这里插入图片描述

选择两个文件然后删除
在这里插入图片描述

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

返回结果的封装类 Result

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

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的配置

#下面这些内容是为了让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进行开发

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层

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

    }

service层

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

mapper层

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

部门管理-新增部门

开发新增部门
首先查看接口四要素

请求方式为post
请求路径为 /depts

请求参数是一个name

返回值,相应数据
为json数据
在这里插入图片描述

直接返回成功的信息

书写controller层代码

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

写service层

  @Override
    public void addDept(Dept dept) {

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

mapper层

    @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层


    /**
     * 根据部门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层


    @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层


    @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进行两个参数的封装

在这里插入图片描述

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

在这里插入图片描述

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

标签:SpringBoot,service,dept,public,案例,Result,import,id,通关
From: https://blog.csdn.net/weixin_55639995/article/details/139307654

相关文章

  • kaggle竞赛系列基于图像对水稻分类代码案例
    目录依赖环境代码导入依赖包定义数据集路径:创建训练集、验证集和测试集的文件夹:代码的作用:设置新的数据集路径与类别名称代码的作用:定义数据预处理和增强变换:代码的作用:定义数据集评估划分与batch大小代码的作用:可视化代码的作用: 评估可视化代码的作用:网络结......
  • 采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端
    采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端全套源码)家政管理平台系统是运用现代计算机和网络技术,集信息网、服务网为一体,对社区家政需求信息汇集整理、综合处理,发挥信息介绍、组织服务、资源共享的作用,向社区居民提供优质服务的网络......
  • springboot aop 通过参数名称来修改 get请求值
    引入aopimplementation'org.springframework.boot:spring-boot-starter-aop'代码实现`packagecom.photo.photoking.interceptor;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Asp......
  • springboot+seata+nacos+dubbo搭建分布式事务
    一、环境springboot:2.3.1.RELEASEdubbo:2.7.13seata:1.8nacos:zookeeper:3.7.1java11mysql8依赖:以下版本经测试无依赖冲突#父工程springboot版本<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent......
  • springboot关键注解
    目录标记容器类注解1.@Controller 2.@Service3.@Repository4.@Component 依赖注入注解1.@Autowired2.@Resource@Autowired与@Resource的区别 web相关注解@RequestMapping属性介绍用法示例注意事项@GetMapping和@PostMapping @RestController......
  • springboot基本使用十一(自定义全局异常处理器)
    例如:我们都知道在java中被除数不能为0,为0就会报byzero错误@RestControllerpublicclassTestController{@GetMapping("/ex")publicIntegerex(){inta=10/0;returna;}}打印结果:如何将这个异常进行处理?创建全局异常处理类......
  • 用python写一个抖店选品的案例
    今天我使用Python编写抖店选品策略的简单案例。我们将使用pandas库处理数据,并假设你已经安装了pandas库。首先,我们需要准备以下数据:1.销售数据:包含商品、销售日期、销售额等信息。2.用户评价数据:包含商品、评价日期、评价分数等信息。3.库存数据:包含商品、库存信息。4.......
  • 基于springboot的-仓库 管理系统(附:源码+课件)
     项目介绍002:管理员system123456客户表(ID客户名称邮编客户地址客户电话联系人联系人电话开户行账号邮箱)供应商表(ID供应商名称邮编供应商地址供应商电话联系人联系人电话开户行账号邮箱)商品表(ID商品名称供应商产地商品规格商品包装生产批号批准文......
  • 基于springboot+vue的音乐网站
      项目介绍025:前台:http://localhost:8081/#/后台:http://localhost:8080/#/前台账号:wang123后台账号:admin1项目功能音乐播放MV播放用户登录注册用户信息编辑、头像修改歌曲、歌单搜索歌单打分歌单、歌曲评论歌单列表、歌手列表分页显示歌词同步显示音乐收藏......
  • 校园周边美食探索及分享平台,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园周边美
    目录一.前言二.功能模块2.1. 前台首页功能模块2.2. 用户功能模块2.3. 管理员功能模块三.部分代码实现四.源码下载一.前言美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起,互联网日益成......