热门标签 | 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());

推荐阅读
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社区 版权所有