springboot 如何编写增删改查后端接口,小白极速入门,附完整代码

简介: 本文为Spring Boot增删改查接口的小白入门教程,介绍了项目的构建、配置YML文件、代码编写(包括实体类、Mapper接口、Mapper.xml、Service和Controller)以及使用Postman进行接口测试的方法。同时提供了SQL代码和完整代码的下载链接。

构建项目及初始配置

创建项目

在这里插入图片描述

在这里插入图片描述

配置yml配置文件

tips: 默认是application.properties,自己再新建一个application.yml即可

server:
  port: 8088 #自己喜欢哪个端口用哪个

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2b8 #改成自己的数据库
    username: root # 改成自己的mysql用户
    password: root # 改成自己的密码
mybatis:
  mapper-locations: classpath:mapper/*.xml

创建不同的包 controller,service,mapper,entity…

在这里插入图片描述

tips:注意包的位置,别放错了。创建包:右键点击new package即可。

  1. controller 对应控制器,用于对接接口的映射
  2. service 用于业务处理(当然目前的这个小demo非常简单,只作用于一个传递的功能)
  3. mapper 就是一些增删改查的接口
  4. entity 实体类,数据库中的每一张表对应于一个实体类(当然,可以有更详细的vo,bo之类的,只不过当前的demo比较简单,就一个数据库对应一个实体类啦)
  5. resource/mapper 用于编写实际sql的xml的地方

编写代码

编写实体类 User

在包entity下,创建User类,然后提供与数据库对应的字段作为属性,我这边使用lombok提供的注解(对应的getter和setter以及有参无参构造器和toString方法),其实就是传统的javabean。

在这里插入图片描述

package com.robin.springbootscaffold.entity;

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

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
   
    private int id;
    private String name;
    private String password;
    private String sex;
    private int age;
    private String phone;
}

编写mapper接口

这里因为是入门嘛,所以就直接对应一张表的crud,增删改查,以及一个列表查询,然后左侧的小鸟是装了一个mybatis的插件(它可以帮助提示,你的每个mapper接口和mapper.xml的映射关系)。

在这里插入图片描述

package com.robin.springbootscaffold.mapper;

import com.robin.springbootscaffold.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {
   

    List<User> getAllUsers();

    int addUser(User user);

    int updUserById(User user);

    User findUserById(@Param("id") int id);

    int delUserById(@Param("id") int id);
}

编写mapper.xml(Resource目录下)

在这里插入图片描述

这里需要注意的是

  1. namespace命名空间,要指定你的mapper接口的完整路径
  2. 增删改查分别对应于四个标签 insert delete update select
  3. 每个sql对应于你的mapper接口中的方法,我们需要通过id去指定你当前的sql是哪个接口方法的
  4. {xxx} 这是mybatis提供的一种占位符,就是之前sql中学的 ? 占位符

  5. resultType 结果类型,如果是实体类的话也需要通过指定完整的类路径
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.robin.springbootscaffold.mapper.UserMapper">

  <!--  public List<User> getAllUsers();  -->
  <select id="getAllUsers" resultType="com.robin.springbootscaffold.entity.User">
    select * from user
  </select>

  <!-- 添加用户方法 用户id为自增主键,所以这里我们不需要传入id值  -->
  <insert id="addUser" >
    insert into user
    (name,password,sex,age,phone)
    values (#{name},#{password},#{sex},#{age},#{phone})
  </insert>

  <!-- 根据用户id进行更新操作  -->
  <update id="updUserById">
    update user
    set name = #{name},
    sex = #{sex},
    phone = #{phone},
    age = #{age}
    where id = #{id}
  </update>

  <!--  根据用户id查询用户详情  -->
  <select id="findUserById" resultType="com.robin.springbootscaffold.entity.User">
    select * from user where id = #{id}
  </select>


  <!--  根据id删除用户  -->
  <delete id="delUserById">
    delete from user where id = #{id}
  </delete>
</mapper>

编写service

在这里插入图片描述

每个方法基本是见名知意,我就不一一注释了。

package com.robin.springbootscaffold.service;

import com.robin.springbootscaffold.entity.User;
import com.robin.springbootscaffold.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
   

    @Autowired
    private UserMapper userMapper;

    public List<User> getAllUsers(){
   
        return  userMapper.getAllUsers();
    }


    public int addUser(User user){
   
        return userMapper.addUser(user);
    }

    public int updUserById(User user){
   
        return userMapper.updUserById(user);
    }

    public User findUserById(int id){
   
        return userMapper.findUserById(id);
    }

    public int delUserById(int id){
   
        return userMapper.delUserById(id);
    }
}

编写controller

在这里插入图片描述

package com.robin.springbootscaffold.controller;

import com.robin.springbootscaffold.entity.User;
import com.robin.springbootscaffold.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
   

    @Autowired
    private UserService userService;

    @GetMapping("/list")
    public List<User> getAllUsers(){
   
        return  userService.getAllUsers();
    }

    @PostMapping("/add")
    public int addUser(@RequestBody User user){
   
        return userService.addUser(user);
    }

    @PutMapping("/upd")
    public int updUserById(@RequestBody User user){
   
        return userService.updUserById(user);
    }

    @GetMapping("/find/{id}")
    public User findUserById(@PathVariable("id") int id){
   
        return userService.findUserById(id);
    }

    @DeleteMapping("/delete/{id}")
    public int delUserById(@PathVariable("id") int id){
   
        return userService.delUserById(id);
    }
}

首先解释一下 @RestController 这个注解,可以将你的每个接口的返回值转换为一个json,@RequestMapping 用于指定接口的映射规则,这个的话,接着往下看就明白啦。

然后 @GetMapping @DeleteMapping @PutMapping @PostMapping 都是 @RequestMapping 的衍生注解,分别对应不同的请求方式,然后有一些细节是不同的,这里不做过多的描述。

如果 @RequestBody @PathVariable 这两个注解不懂的话,可以看我的这篇文章 springbootWeb常用注解使用

接口测试,使用postman

启动项目,然后使用postman测试接口(如果没使用过postman的话,去了解一下)

注意观察每个接口的请求方式,以及请求的参数和请求体

查询用户列表

在这里插入图片描述

新增用户

因为我们controller中使用的是@RequestBody注解 ,所以使用postman发送请求的话需要选择body->row,然后以json的数据格式发送。

在这里插入图片描述

查询单个用户信息

在这里插入图片描述

路径变量,就是在/后面多加一个变量,用于保存一些信息,然后使用@PathVarible注解就可以获取到对应的变量的值。

修改用户信息

在这里插入图片描述

删除用户信息

在这里插入图片描述

SQL代码

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '姓名',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '密码',
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '性别',
  `age` int(0) NULL DEFAULT NULL COMMENT '年龄',
  `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '电话',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '张三', '123456', '男', 25, '18888889999');
INSERT INTO `user` VALUES (3, 'robin', '123456', '男', 22, '14424567789');

SET FOREIGN_KEY_CHECKS = 1;

数据库比较简单,考虑到小白,我直接贴sql代码了(数据库名为springboot,表名为user)。

在这里插入图片描述

完整代码zip

这个demo的完整代码,我已经上传到了百度网盘需要的直接下载就行

链接: https://pan.baidu.com/s/1gghcUrajoMDpAQbEnfOOuw 提取码: 41xs

小结

在这里插入图片描述

后续看情况,可以做一下前后端分离的小demo

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2505 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
528 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
457 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
352 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。