一、SpringBoot简介

SpringBoot是一个脚手架,用于快速搭建一个基于Spring的web应用,开箱即用!创建即可开发业务代码,其设计目的是用来简化Spring应用的初始搭建以及开发过程

优点

  • 快速构建一个独立的 Spring 应用程序;
  • 嵌入的 Tomcat、Jetty 或者 Undertow,无须部署 WAR文件;
  • 提供starter POMs来简化Maven配置和减少版本冲突所带来的问题;
  • 对Spring和第三方库提供默认配置(约定大于配置),也可修改默认值,简化框架配置;
  • 无需配置XML--JavaConfig,无代码生成,开箱即用

image.png

二、创建项目

image.png

添加项目依赖

image.png

SpringBoot项目结构

image.png

修改配置文件

image.png

新建数据库

image.png

创建对应的包

image.png

三、创建实体类

新建User类

类级别注解

  1. @Entity

    • 标记该类为 JPA 实体类,表明它对应数据库中的一张表。
    • 只有被 @Entity 标记的类,才能被 JPA 识别并进行数据库操作(如 CRUD)。
  2. @Table(name = "tb_user")

    • 指定该实体类对应的数据库表名。
    • 如果不写这个注解,JPA 会默认使用类名作为表名(此处若省略,会默认对应表 user,但这里显式指定为 tb_user,更符合实际表名规范)。

属性级别注解

  1. @Id

    • 标记该字段为表的主键(Primary Key)。
    • 每个实体类必须有且仅有一个主键字段。
  2. @GeneratedValue(strategy = GenerationType.IDENTITY)

    • 指定主键的生成策略:

      • GenerationType.IDENTITY 表示主键由数据库自动生成(依赖数据库的自增功能,如 MySQL 的 AUTO_INCREMENT)。
      • 其他常见策略:AUTO(JPA 自动选择)、SEQUENCE(依赖数据库序列)、TABLE(用一张专门的表维护主键)。
  3. @Column(name = "字段名")

    • 用于指定实体类属性与数据库表中字段的映射关系:

      • name 属性:指定对应的数据库字段名(如 @Column(name = "user_id") 表示该属性对应表中的 user_id 字段)。
      • 如果属性名与数据库字段名一致(忽略大小写),可以省略此注解(但建议显式指定,增强可读性)。
      • 还可配置其他属性:如 length(字段长度)、nullable(是否允许为 null)等。

image.png

启动项目,为我们自动创建数据库表

image.png

四、编写接口

新建UserController

Restful接口:

在HTTP协议中,有不同的发送请求的方式,分别是GET、POST、PUT、DELETE等,我们如果能让不同的请求方式表示不同的请求类型就可以简化查询

  • 查询用户: http://localhost:8090/user/1 GET
  • 查询查询多个用户: http://localhost:8090/users GET
  • 新增用户: http://localhost:8090/user POST
  • 新增修改用户: http://localhost:8090/user PUT
  • 修改删除用户:http://localhost:8090/user/1 DELETE

image.png

五、编写业务逻辑类

新建UserService类,IUserService接口

package com.kehanzhu.crud_test.service;

import com.kehanzhu.crud_test.pojo.User;
import com.kehanzhu.crud_test.pojo.dto.UserDto;

public interface IUserService {
    /**
     * 插入用户
     *
     * @param user 参数
     * @return user对象
     */
    User add(UserDto user);
}
package com.kehanzhu.crud_test.service;

import com.kehanzhu.crud_test.pojo.User;
import com.kehanzhu.crud_test.pojo.dto.UserDto;
import com.kehanzhu.crud_test.repository.UserRepository;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service //spring的bean
public class UserService implements IUserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User add(UserDto user) {
        User userPojo = new User();
        BeanUtils.copyProperties(user, userPojo);
        return userRepository.save(userPojo);
    }
}

六、编写数据访问类

新建UserRepository接口

在 UserRepository extends CrudRepository<User, Integer> 中,泛型参数的含义如下:

  1. 第一个泛型 User表示当前 Repository 接口操作的实体类类型,即这个接口是专门用于操作 User 实体对应的数据库表(tb_user)的。CrudRepository 会根据这个实体类的信息(如 @Table@Column 等注解)自动生成针对该表的 CRUD 操作 SQL。

  2. 第二个泛型 Integer表示该实体类主键(Primary Key)的类型。在你的 User 实体中,主键字段是 userid,其类型为 Integer,因此这里对应填写 Integer

    如果主键类型是 Long(如常见的雪花算法 ID),则第二个泛型应改为 Long;如果是 String(如 UUID),则填写 String,需与实体类中主键字段的类型保持一致。

简单来说,这两个泛型的作用是告诉 Spring Data JPA:“这个接口要操作的是 User 实体,它的主键类型是 Integer ,框架据此才能正确生成针对性的数据库操作逻辑。

package com.kehanzhu.crud_test.repository;

import com.kehanzhu.crud_test.pojo.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends CrudRepository<User, Integer> {
}

七、测试接口

使用postman测试接口

image.png

image.png

异常情况:

image.png

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]