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日

相关文章

  • 三分钟带你了解SpringBoot真正的启动引导类

    当我们运行一个SpringBoot应用时,第一个会执行的类就是启动引导类,也就是@SpringBootApplication注解所标注的类。那么,如何理解SpringBoot的启动引导类以及它的实现方式呢?下面是详细的攻略。 什么是启动引导类 启动引导类是一个运行Java程序的入口类。在SpringBoot应用中,启动引导类是使用@SpringBootApp…

    Java 2023年5月15日
    00
  • Sprint Boot @ConfigurationPropertiesBinding使用方法详解

    以下是关于Spring Boot的@ConfigurationPropertiesBinding的作用与使用方法的完整攻略,包含两个示例: Spring Boot的@ConfigurationPropertiesBinding是什么? @ConfigurationPropertiesBinding是Spring Boot中的一个注解,用于将自定义类型的属性绑…

    Java 2023年5月5日
    00
  • SpringMvc直接接收json数据自动转化为Map的实例

    讲解SpringMvc直接接收json数据自动转化为Map的实例的完整攻略如下: 1. 添加相关依赖 首先,我们需要添加SpringMvc相关的依赖。在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework</groupId> <artifactId&g…

    Java 2023年5月26日
    00
  • MyBatis注解式开发映射语句详解

    下面我将为您详细讲解“MyBatis注解式开发映射语句详解”的攻略。 什么是MyBatis注解式开发 MyBatis是一个开源持久层框架,它通过XML或注解的方式来实现面向关系型数据库的操作。在MyBatis中,我们可以使用注解来直接编写SQL语句,而不需要编写XML文件。 MyBatis注解式开发的优点 使用注解式开发,可以减少编写XML文件的工作量,直接…

    Java 2023年5月20日
    00
  • Java动态代理的作用是什么?

    Java动态代理是一种在运行时期动态生成代理类的机制,通过代理类来调用目标对象的方法。在Java语言中,动态代理主要运用在AOP(面向切面编程)和RPC(远程过程调用)等场景中。其主要作用是在不修改目标对象的基础上,为目标对象添加额外的操作,称为“代理”。 使用动态代理的步骤如下: 创建一个InvocationHandler对象,并实现一个invoke方法,…

    Java 2023年5月10日
    00
  • json-lib将json格式的字符串,转化为java对象的实例

    要将 JSON 格式的字符串转化为 Java 对象实例,可以使用 json-lib 库提供的方法。下面是具体的步骤。 1. 引入 json-lib 库 在项目中引入 json-lib 库,可以使用 Maven 或手动下载方式引入。以下是 Maven 依赖的示例: <dependency> <groupId>net.sf.json-li…

    Java 2023年5月26日
    00
  • 什么是线程安全的队列?

    以下是关于线程安全的队列的完整使用攻略: 什么是线程安全的队列? 线程安全的队列是指在线程环境下,多个线程同时访问队列中的元素而不会出现数据不一致程序崩溃等问题。在线程编程中,线程安全的队列是非常重要的,因为多个线程同时访问队列,会出现线程争用的问题,导致数据不一致或程序崩溃。 如何实现线程安全的队列? 为实现线程全的队列,需要使用同步机制来保证多个线程对队…

    Java 2023年5月12日
    00
  • 详解Android客户端与服务器交互方式

    非常感谢您对Android客户端与服务器交互方式的关注。在此给您详细讲解Android客户端与服务器交互方式的攻略。 什么是Android客户端与服务器交互? Android客户端与服务器交互是指在Android手机上使用网络协议与服务器进行数据交互的过程。这种交互方式被广泛应用在Android应用程序的开发中,比如基于网络服务的即时通讯、电商 App 中的…

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