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日

相关文章

  • tomcat 启动时卡住问题排查及解决方法

    Tomcat 启动时卡住问题排查及解决方法 问题现象 在启动 Tomcat 时,控制台输出日志较少,没有显示任何正在启动的进程,且进程状态一直卡在某个进程上,无法启动成功。 问题原因 防火墙限制 在部分云服务器或者企业内部网络环境下,会有防火墙限制,导致 Tomcat 无法正常启动。可以通过关闭防火墙或者添加相应的端口规则来解决。 JVM 堆栈调整不合理 如…

    Java 2023年6月2日
    00
  • Spring Security实现自动登陆功能示例

    下面是详细讲解Spring Security实现自动登陆功能的完整攻略。 什么是Spring Security Spring Security是Spring框架中的模块,它处理安全性和认证的方面。它可以与Spring应用程序的其他部分(如Spring MVC)无缝集成,从而使开发人员可以轻松地将安全性添加到他们的应用程序中。 自动登录功能的实现原理 自动登录…

    Java 2023年5月20日
    00
  • jsp 中HttpClient中的POST方法实例详解

    下面我将详细讲解“jsp 中HttpClient中的POST方法实例详解”的攻略。 1.介绍 首先,我们需要了解 HttpClient 的作用。HttpClient 是 Apache 的开源 HTTP 客户端,可用于与 HTTP 服务器通信。它支持 HTTP 协议、HTTPS 协议、FTP 协议等。 本文主要介绍 HttpClient 中的 POST 方法,…

    Java 2023年6月15日
    00
  • Java多线程之线程安全问题详情

    Java多线程之线程安全问题详情 什么是线程安全问题? 在多线程并发执行的过程中,若多个线程会同时访问同一个共享的数据,就有可能出现线程安全问题。 这种问题常见的形式就是多个线程操作同一份数据时,会产生竞态条件(Race Condition),导致数据的状态被破坏。 线程安全问题包括但不限于: 数据竞争(Data Race) 重入锁问题(Reentrant …

    Java 2023年5月18日
    00
  • Java常用排序算法及性能测试集合

    Java常用排序算法及性能测试集合 在本文中,我们将介绍Java的常用排序算法,包括它们的工作原理、实现代码和性能测试。排序算法是计算机科学中最基本的算法之一,因此深入了解排序算法有助于提高编程技能和算法能力。 常用排序算法 冒泡排序 冒泡排序是最简单,也是最容易理解的排序算法之一。它的基本思想是比较相邻的元素,如果顺序不对就交换它们,每一轮都可以将最大的值…

    Java 2023年5月19日
    00
  • SpringBoot整合Spring Data Elasticsearch的过程详解

    下面我将为您详细讲解Spring Boot整合Spring Data Elasticsearch的完整攻略,其中包括以下步骤: 引入依赖 配置Elasticsearch 创建数据实体类 创建Elasticsearch Repository 使用Repository进行数据操作 示例1:添加数据到Elasticsearch中 示例2:从Elasticsearc…

    Java 2023年5月20日
    00
  • 基于js实现投票的实例代码

    首先,基于js实现投票要考虑两个方面,其一是前端页面的实现,其二是后端接口的实现。 前端页面实现 前端页面主要包含页面布局和交互逻辑两个部分。 页面布局 可以使用HTML/CSS完成页面布局,页面布局可以按照个人需求自定义设计,以本次介绍的前端实现为例,可分为以下几个区域: 问题区:用于展示当前投票的问题 选项区:用于展示当前问题的选项内容 操作区:用于用户…

    Java 2023年6月15日
    00
  • 使用JDBC连接ORACLE的三种URL格式

    使用JDBC连接ORACLE的三种URL格式: 在使用JDBC连接ORACLE时,需要使用相应的JDBC驱动程序,同时也需要正确的连接URL。以下是三种连接ORACLE数据库的URL格式: THIN模式 jdbc:oracle:thin:@[host][:port]:SID 其中,[host]为ORACLE数据库所在的IP地址或主机名;[:port]为数据库…

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