热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot集成与使用JPA详解

本文详细介绍如何在SpringBoot项目中集成和使用JPA,涵盖JPA的基本概念、SpringDataJPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。

前言


在Spring Boot系列教程中,我们将深入探讨如何在Spring Boot项目中集成和使用JPA(Java Persistence API)。JPA是由Oracle(原Sun Microsystems)提出的一套Java持久化规范,旨在为Java开发人员提供一种对象/关系映射工具,用于管理Java应用中的关系数据。它的出现简化了持久化开发工作,并统一了ORM技术。



JPA概述


JPA本身是一套规范,而不是具体的产品。实现JPA规范的产品有很多,如Hibernate、TopLink等。这些产品提供了具体的实现细节,使得开发者可以在不同的ORM框架之间轻松切换。



Spring Data JPA


Spring Data JPA是Spring基于ORM框架和JPA规范封装的一套应用框架。它在Hibernate之上构建,提供了简洁的API来实现对数据库的访问和操作,包括增、删、改、查等常用功能。



Spring Boot整合Spring Data JPA


本节将详细介绍如何在Spring Boot项目中集成Spring Data JPA。



1. 添加依赖


在项目的`pom.xml`文件中添加Spring Data JPA的依赖:



org.springframework.boot
spring-boot-starter-data-jpa



2. 配置JPA


在`application.properties`文件中配置JPA的相关属性:


# 是否在日志中打印出自动生成的SQL,方便调试
spring.jpa.show-sql=true
# 数据库表结构自动更新
spring.jpa.hibernate.ddl-auto=update
# 格式化SQL语句
spring.jpa.hibernate.format_sql=true


`spring.jpa.hibernate.ddl-auto`的常见属性及其作用:



  • create: 每次加载Hibernate时都会删除上一次的表,然后根据模型类重新生成新表。

  • create-drop: 每次加载Hibernate时根据模型类生成表,但Session工厂关闭时表会自动删除。

  • update: 第一次加载Hibernate时根据模型类自动建立表结构,以后加载时根据模型类自动更新表结构,但不会删除已有数据。

  • validate: 每次加载Hibernate时验证数据库表结构,不会创建新表,但会插入新值。

  • none: 不使用DDL自动操作。



3. 创建JPA实体类


在Spring Boot中,实体类通常使用`@Entity`注解标记,并且需要指定主键和其他字段。以下是一个简单的JPA实体类示例:


@Entity
@Data
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, unique = true)
private String userName;

@Column(nullable = false)
private String password;
}


启动项目后,控制台会输出创建表的SQL语句。如果出现警告信息,可以通过设置`spring.jpa.open-in-view=false`来解决。



4. 创建操作数据库的Repository接口


Spring Data JPA提供了`JpaRepository`接口,用于定义访问数据库的方法。以下是一个示例:


@Repository
public interface UserRepository extends JpaRepository {
List findAll();
Optional findById(Long id);
}


可以通过单元测试来验证Repository接口的功能:


@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaTest {
@Autowired
private UserRepository userRepository;

@Test
public void queryUsers() {
List users = userRepository.findAll();
System.out.println(users);
}
}


JPA常用方法


JPA提供了一系列常用的方法,用于执行常见的数据库操作:



  • findAll(): 查询所有记录。

  • save(T entity): 保存或更新记录。

  • findById(ID id): 根据ID查询记录。

  • deleteById(ID id): 根据ID删除记录。



自定义SQL查询


对于复杂的查询,可以使用`@Query`注解来自定义SQL语句。例如:


@Query("select u.userName from User u where u.id = :id")
String findUserNameById(@Param("id") Long id);

@Modifying
@Query("update User u set u.userName = ?1 where u.id = ?2")
void updateUserNameById(String name, Long id);


自定义SQL还可以实现分页操作:


@Query(value = "select u.id, u.userName from User u", countQuery = "select count(u.id) from User u")
Page getUserPage(Pageable pageable);

// 使用示例
PageRequest pageRequest = PageRequest.of(0, 10);
Page userPage = userRepository.getUserPage(pageRequest);
List cOntent= userPage.getContent();
System.out.println(userPage.getTotalElements());
System.out.println(userPage.getTotalPages());

推荐阅读
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • andr ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
author-avatar
三八xuan_624
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有