Spring Data JPA例子代码[基于Spring Boot、Mysql]

下面是“Spring Data JPA例子代码[基于Spring Boot、Mysql]”的完整攻略。

简介

Spring Data JPA是基于JPA规范的一种框架,结合Spring Data,可以方便地访问和操作关系型数据库。本文基于Spring Boot和Mysql数据库,演示了Spring Data JPA的使用方法。

前置准备

在开始之前,您需要准备以下工具和环境:

  • JDK 1.8或以上
  • IDE(推荐使用IntelliJ IDEA)
  • Maven
  • Mysql数据库

创建Spring Boot项目

  1. 打开IDE,创建一个新的Maven项目。
  2. 输入项目的名称和groupId、artifactId等信息。
  3. 在创建项目时,选择“Spring Initializr”和“Web”选项。
  4. 点击“Next”进入下一步,选择需要的依赖,这里我们需要选择“Spring Data JPA”和“MySQL Driver”。
  5. 点击“Finish”完成项目的创建。

配置文件

在项目中,我们需要配置连接Mysql数据库的相关信息。在src/main/resources目录下,创建application.properties文件,输入以下内容:

spring.datasource.url=jdbc:mysql://localhost/testdb?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

其中,spring.datasource.url表示数据库的连接地址;spring.datasource.username和spring.datasource.password分别表示Mysql登录的用户名和密码;spring.jpa.hibernate.ddl-auto表示数据表的自动创建模式(update表示更新模式,每次启动时会检查实体类,如果有变化则更新表结构);spring.jpa.show-sql表示是否输出SQL日志;spring.jpa.properties.hibernate.format_sql表示输出日志时是否格式化SQL。

实体类

在Spring Data JPA中,实体类是指与数据库表相对应的Java类。在本例中,我们创建一个实体类User,代码如下:

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id; // 主键ID
    private String name; // 用户名
    private Integer age; // 年龄
    ... // 省略getter和setter方法
}

其中,@Entity注解表示该类是实体类;@Table注解表示对应的数据库表名;@Id注解表示主键;@GeneratedValue注解表示主键自增长;下面的字段分别表示id、name、age三个属性,其中id为主键。需要注意的是,每个实体类必须要有一个主键。

Repository

在Spring Data JPA中,Repository是指通过继承JpaRepository接口,对实体类进行增删改查操作的接口。代码示例如下:

public interface UserRepository extends JpaRepository<User, Integer> {
}

其中,User表示实体类,Integer表示主键类型。在这个接口中,我们不需要编写任何的方法实现,在使用时只需要调用该接口中已有的方法即可。

Service

Service层是对Repository的进一步封装,是在业务逻辑层对数据进行处理和操作的地方。本例中,我们创建UserService接口和UserServiceImpl实现类,代码如下:

public interface UserService {
    List<User> findAll();
    User findById(Integer id);
    void save(User user);
    void delete(Integer id);
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserRepository userRepository;

    @Override
    public List<User> findAll() {
        return userRepository.findAll();
    }

    @Override
    public User findById(Integer id) {
        return userRepository.findById(id).orElse(null);
    }

    @Override
    public void save(User user) {
        userRepository.save(user);
    }

    @Override
    public void delete(Integer id) {
        userRepository.deleteById(id);
    }
}

其中,UserService接口定义了findAll、findById、save和delete四个方法;UserServiceImpl实现了UserService接口,并注入了UserRepository。在findAll、findById、save和delete四个方法中,我们直接调用了UserRepository的相应方法完成对实体类User的操作。

Controller

Controller层是前端交互的入口,该层接收前端的请求,并将请求转发到相应的Service层或处理完直接返回结果。本例中,我们创建UserController类,代码如下:

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @GetMapping("/users")
    public List<User> findAll() {
        return userService.findAll();
    }

    @PostMapping("/users")
    public void save(@RequestBody User user) {
        userService.save(user);
    }

    @GetMapping("/users/{id}")
    public User findById(@PathVariable Integer id) {
        return userService.findById(id);
    }

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

其中,@RestController注解表示该类是Controller层,并且所有方法的返回值都会被转换为JSON格式;@Autowired注解表示注入UserService;@GetMapping、@PostMapping、@DeleteMapping注解表示对应的HTTP请求方法和路径。在这个类中,我们调用了UserService的相应方法完成对实体类User的操作。

运行测试

现在,我们已经完成了项目的搭建和配置,可以进行测试了。在IDE中,运行该项目,访问http://localhost:8080/users路径,可以看到数据库中的所有User数据。接下来,我们可以通过Postman等工具进行增删改查测试,以验证项目是否正常运行。

示例说明

为了更好地说明Spring Data JPA的使用方法,这里举两个例子。

示例一:新增数据

在UserController中,新增一个save方法,用于保存一个新的User对象。代码如下:

@PostMapping("/users")
public void save(@RequestBody User user) {
    user.setId(null); // 将ID设为null,使其自动增长
    userService.save(user);
}

在这个方法中,我们将接收到的User对象的ID设为null,由于我们在User实体类中使用了@GeneratedValue自增长主键,因此在保存该对象时,将会自动插入一条新的数据到数据库中。

示例二:删除数据

在UserController中,新增一个delete方法,用于删除指定ID的User数据。代码如下:

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

在这个方法中,我们调用了UserService的delete方法,该方法会调用UserRepository的deleteById方法,删除指定ID的数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Data JPA例子代码[基于Spring Boot、Mysql] - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • springboot @Async 注解如何实现方法异步

    SpringBoot提供了@Async注解来实现方法异步,在这个注解的加持下,这些被注解的方法将执行在单独的线程中。这可以减少应用程序的响应时间,提高应用程序的吞吐量。 下面,我们来实现一个简单的示例来说明@Async注解的使用方法。 第一步,导入必须的依赖 在pom.xml文件中,我们需要导入spring-boot-starter-web和spring-b…

    Java 2023年5月26日
    00
  • rsa加密算法使用示例分享

    RSA加密算法是一种非对称加密算法,它在加密时使用了公钥(public key)和私钥(private key)两把不同的钥匙。公钥可以随意分发,而私钥只有持有者自己知道。本文将为大家详细讲解RSA加密算法的使用示例。 一、生成密钥对 在使用RSA加密算法之前,需要先生成公钥和私钥这两把钥匙。可以通过OpenSSL工具生成: # 生成2048位的RSA密钥对…

    Java 2023年5月19日
    00
  • Hibernate中Session.get()方法和load()方法的详细比较

    让我来详细讲解“Hibernate中Session.get()方法和load()方法的详细比较”。 一、概述 Hibernate是广泛使用的ORM框架之一,其最基本的操作是通过Session实例来执行。在Session实例中,get()方法和load()方法是最常用的两个方法之一。它们用于从数据库中检索对象,但它们有一些微小的区别。 在这篇文章中,我们将会比…

    Java 2023年5月20日
    00
  • 5分钟快速学会spring boot整合JdbcTemplate的方法

    下面是详细讲解“5分钟快速学会Spring Boot整合JdbcTemplate的方法”的完整攻略。 一、前置条件 在进行Spring Boot整合JdbcTemplate的学习之前,需要具备如下的前置条件: 了解Spring Boot框架的基础知识 了解JdbcTemplate的基础知识 配置好开发环境,包括Java开发环境、Maven或Gradle构建工…

    Java 2023年5月19日
    00
  • 微信小程序以ssm做后台开发的实现示例

    下面我将详细讲解如何使用ssm框架进行微信小程序后台开发的实现示例。 一、什么是SSM框架 SSM框架实际上是Spring、SpringMVC和MyBatis三个框架的结合,可以高效稳定地进行Java Web开发。其中,Spring是用于控制Bean的,SpringMVC是用于控制请求的,MyBatis是用于控制数据的。部署方便,使用简单,很适合中小型互联网…

    Java 2023年5月23日
    00
  • Java虚拟机执行引擎知识总结

    Java虚拟机执行引擎知识总结 Java虚拟机的执行引擎负责将编译过的Java字节码转换成本地机器能够执行的指令,它是Java虚拟机最核心的组成部分之一,也是整个Java虚拟机中最复杂、最先进、最具有挑战性的部分之一。下面我们将对Java虚拟机执行引擎的知识进行总结和讲解。 Java字节码的执行过程 Java虚拟机的执行引擎的主要任务是执行Java字节码,J…

    Java 2023年5月26日
    00
  • Ajax分页插件Pagination从前台jQuery到后端java总结

    我来为你分享“Ajax分页插件Pagination从前台jQuery到后端java总结”的完整攻略。 1. 背景 在网站中,有些内容需要分页展示,这时候就需要使用Ajax分页插件。本文将介绍一种从前台jQuery到后端Java的分页插件实现。 2. 插件介绍 这里介绍一个比较常用的jQuery分页插件——Pagination。它简单易用,可以很容易地被集成到…

    Java 2023年5月26日
    00
  • 微信怎么群发标签好友信息?微信群发标签好友教程

    微信怎么群发标签好友信息 在微信中,我们可以通过标签来分类好友。有了标签,我们就可以很方便地进行按标签进行群发操作。下面,我们来详细讲解如何在微信中群发标签好友信息的操作步骤。 第一步:创建标签 首先,我们需要在微信中创建好友标签,把需要进行群发操作的好友添加进标签中。具体操作步骤如下: 点击微信底部的“我”选项,进入个人主页。 点击“通讯录”选项进入好友列…

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