Springboot和Jpa实现学生CRUD操作代码实例

下面我会详细讲解“Springboot和Jpa实现学生CRUD操作代码实例”的完整攻略。

一、前置知识

在进行本篇攻略之前,需要掌握以下的技术和知识:

  • Spring Boot的基本使用方法;
  • JPA的基本使用方法;
  • MySQL数据库的基本使用方法。

如果你还不熟悉这些知识,可以先查看相关的官方文档或者参考相关的教程。

二、创建Spring Boot项目

首先,我们需要创建一个Spring Boot项目并导入相应的依赖。

<!-- pom.xml -->
<!--Spring Boot依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.5</version>
    <type>pom</type>
</dependency>

<!-- Spring Boot Web 相关依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.4.5</version>
</dependency>

<!-- Spring Boot Data JPA 相关依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.4.5</version>
</dependency>

<!-- MySQL数据库相关依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>

三、建立实体模型

在我们开始建立实体模型之前,需要在MySQL中建立一个名为“student”的数据表。表的结构如下:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

接下来,我们来建立学生实体模型。

// Student.java
@Entity
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;

    private Character gender;

    // Getter 和 Setter 略
}

我们使用了JPA的注解来指定实体类和数据表之间的映射关系,实现了自动生成主键、字段名映射等功能。

四、创建Repository

接下来,我们需要创建Repository。

// StudentRepository.java
@Repository
public interface StudentRepository extends JpaRepository<Student, Integer> {
}

在这个示例中,我们使用了Spring Data JPA的默认实现,也可以自定义实现,实现更复杂的操作,例如分页、排序等。

五、创建Controller

接下来,我们需要创建Controller。

// StudentController.java
@RestController
@RequestMapping("/students")
public class StudentController {
    @Autowired
    private StudentRepository studentRepository;

    @GetMapping("")
    public List<Student> getAll() {
        return studentRepository.findAll();
    }

    @GetMapping("/{id}")
    public Student getById(@PathVariable Integer id) {
        return studentRepository.findById(id).orElse(null);
    }

    @PostMapping("")
    public Student create(@RequestBody Student student) {
        return studentRepository.save(student);
    }

    @PutMapping("/{id}")
    public Student update(@PathVariable Integer id, @RequestBody Student student) {
        student.setId(id);
        return studentRepository.save(student);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable Integer id) {
        studentRepository.deleteById(id);
    }
}

我们创建了CRUD操作(增、查、改、删)的相关API,使用@RestController、@RequestMapping等注解实现了请求映射和返回结果的序列化。

六、示例一

第一个示例是获取学生列表的操作:

// StudentControllerTest.java
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class StudentControllerTest {
    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    void testGetAll() {
        ResponseEntity<List<Student>> responseEntity = restTemplate.exchange(
                "/students",
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<List<Student>>(){}
        );

        assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
        assertThat(responseEntity.getBody()).hasSize(10);
    }
}

我们使用了Spring Boot的TestRestTemplate来发送HTTP请求,使用了匿名内部类来获取泛型参数列表(List)的类型信息。

七、示例二

第二个示例是创建新学生的操作:

// StudentControllerTest.java
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class StudentControllerTest {
    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    void testCreate() {
        Student student = new Student();
        student.setName("Tom");
        student.setAge(18);
        student.setGender('M');

        ResponseEntity<Student> responseEntity = restTemplate.postForEntity(
                "/students",
                student,
                Student.class
        );

        assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
        assertThat(responseEntity.getBody().getId()).isNotNull();
        assertThat(responseEntity.getBody().getName()).isEqualTo("Tom");
        assertThat(responseEntity.getBody().getAge()).isEqualTo(18);
        assertThat(responseEntity.getBody().getGender()).isEqualTo('M');
    }
}

我们使用了TestRestTemplate的postForEntity方法来发送POST请求,使用了断言来其他结果是否符合预期。

八、总结

到这里我们已经实现了基本的CRUD操作,同时也展现了Spring Boot和JPA的优秀特性,如轻量级、便捷、高效等。可以通过前面的两个示例来了解Spring Boot和JPA,以及如何实现基础的CRUD操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot和Jpa实现学生CRUD操作代码实例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java多线程之Semaphore实现信号灯

    现在我来讲解一下”Java多线程之Semaphore实现信号灯”的完整攻略。在Java多线程编程中,Semaphore可以用来控制多个线程需要访问的资源的数量,Semaphore允许多个线程同时访问某一个资源,但需要限制其同时访问的数量。 Semaphore的基本用法 Semaphore的构造方法: public Semaphore(int permits)…

    Java 2023年5月18日
    00
  • jQuery ajaxForm()的应用

    当需要通过 AJAX 方式向服务器提交表单数据时,jQuery 提供了方便的方法 ajaxForm()。下面是该方法的详细介绍及应用攻略。 ajaxForm() 方法的使用 基本语法 $(selector).ajaxForm(options); 其中,selector 是表单的选择器,options 是一个对象,包含了一些可选参数及回调函数,具体参数如下: …

    Java 2023年6月16日
    00
  • 关于springboot整合swagger问题及解决方法

    标题:关于SpringBoot整合Swagger问题及解决方法 一、背景介绍 在Web应用的开发过程中,文档的撰写和维护是一项繁琐而必要的工作。而Swagger是一种API文档生成工具,它可以自动创建文档,减少文档维护的工作量。在SpringBoot项目中,Swagger也是一种常用的文档生成工具。本文将介绍在SpringBoot项目中使用Swagger出现…

    Java 2023年6月15日
    00
  • 如何在Springboot实现拦截器功能

    在Spring Boot中,我们可以通过实现拦截器来实现对请求的拦截和处理。本文将详细讲解如何在Spring Boot中实现拦截器功能,并提供两个示例。 1. 创建拦截器 我们可以通过实现HandlerInterceptor接口来创建拦截器。以下是创建拦截器的基本流程: 创建一个拦截器类。 public class MyInterceptor impleme…

    Java 2023年5月15日
    00
  • 详解通过JDBC进行简单的增删改查(以MySQL为例)

    以下是详解通过JDBC进行简单的增删改查的攻略: JDBC简介 Java Database Connectivity(JDBC)是Java语言中访问数据库的一种标准方式,它提供了一种访问不同数据库的标准方法。通过JDBC,开发者可以使用Java程序连接到不同的数据库,执行SQL查询,以及处理查询结果。 JDBC使用流程 通常,使用JDBC完成数据库操作,流程…

    Java 2023年5月20日
    00
  • 搭建简单的Spring-Data JPA项目

    以下是详细讲解“搭建简单的Spring-Data JPA项目”的完整攻略。 一、准备环境 首先你需要安装好下列环境: JDK IDE(比如IntelliJ IDEA、Eclipse等) Maven(或Gradle) 二、创建项目 1.使用IDE新建Maven项目 使用IDE(以IntelliJ IDEA为例)创建一个Maven项目,并添加以下依赖项: &lt…

    Java 2023年5月19日
    00
  • jQuery form插件的使用之处理server返回的JSON, XML,HTML数据

    使用jQuery form插件可以方便地实现Ajax提交表单数据,同时也可以处理server返回的JSON、XML、HTML数据。下面是处理server返回的Json、XML和HTML数据的详细攻略。 一、处理server返回的JSON数据 (1)通过Ajax提交表单后,在success回调函数中使用jQuery.form的json解析方法解析返回的JSON…

    Java 2023年6月15日
    00
  • Java Apache Commons报错“ZipSecureFileException”的原因与解决方法

    “ZipSecureFileException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 安全限制:如果压缩文件不符合安全限制,则可能会出现此异常。例如,可能会尝试解压缩未签名的压缩文件或压缩文件包含恶意代码。 文件路径错误:如果文件路径错误,则可能会出现此异常。例如,可能会使用错误的文件路径或文件不存在。 以下是两…

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部