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


    构建项目及初始配置

    创建项目

    在这里插入图片描述

    在这里插入图片描述

    配置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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    创建不同的包 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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    编写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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    编写mapper.xml(Resource目录下)

    在这里插入图片描述

    这里需要注意的是

    1. namespace命名空间,要指定你的mapper接口的完整路径
    2. 增删改查分别对应于四个标签 insert delete update select
    3. 每个sql对应于你的mapper接口中的方法,我们需要通过id去指定你当前的sql是哪个接口方法的
    4. #{xxx} 这是mybatis提供的一种占位符,就是之前sql中学的 ? 占位符
    5. resultType 结果类型,如果是实体类的话也需要通过指定完整的类路径
    
    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">
    
      
      <select id="getAllUsers" resultType="com.robin.springbootscaffold.entity.User">
        select * from user
      select>
    
      
      <insert id="addUser" >
        insert into user
        (name,password,sex,age,phone)
        values (#{name},#{password},#{sex},#{age},#{phone})
      insert>
    
      
      <update id="updUserById">
        update user
        set name = #{name},
        sex = #{sex},
        phone = #{phone},
        age = #{age}
        where id = #{id}
      update>
    
      
      <select id="findUserById" resultType="com.robin.springbootscaffold.entity.User">
        select * from user where id = #{id}
      select>
    
    
      
      <delete id="delUserById">
        delete from user where id = #{id}
      delete>
    mapper>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    编写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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    编写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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    首先解释一下 @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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    在这里插入图片描述

    完整代码zip

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

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

    小结

    在这里插入图片描述

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

  • 相关阅读:
    数据挖掘:分类,聚类,关联关系,回归
    ch1、Go语言简介
    JavaScript 数组
    mysql练习1
    项目交付谈判的6大技巧
    高德地图旋转功能
    做好软件设计让你“事半功倍”
    基于stm32单片机的水位检测自动抽水系统
    【React-Hooks进阶】useState回调函数的参数 / useEffect发送网络请求/ useRef / useContext
    FPGA面试笔试一些基础概念题目2
  • 原文地址:https://blog.csdn.net/m0_63622279/article/details/133805586