JPA + MySQL 开发总结

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
全局流量管理 GTM,标准版 1个月
简介: JPA + MySQL 开发总结

本文为博主原创,转载请注明出处:

  org.springframework.data.jpa 是 Spring Data JPA 框架中的一个包,用于简化与 JPA(Java Persistence API)相关的开发任务。Spring Data JPA 提供了一套强大且易于使用的功能,使得与数据库进行持久化操作更加便捷和高效。

1.引入JPA,进行常规开发步骤

  使用 org.springframework.data.jpa 的一般步骤:

1.1引入依赖:

  在项目的构建文件(如 Maven 的 pom.xml 或 Gradle 的 build.gradle)中添加 Spring Data JPA 的依赖项。例如,在 Maven 中添加以下依赖项:

<dependencies>
  <!-- 其他依赖 -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
</dependencies>

1.2 创建实体类:

  使用 JPA 注解来定义实体类,并将其映射到数据库表。注解包括 @Entity@Table@Column 等。

import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  @Column(name = "name")
  private String name;
  // getter and setter methods
}

1.3创建 Repository 接口:

  创建一个继承自 JpaRepository(或其他 Spring Data JPA 提供的 Repository 接口)的接口,用于访问和操作实体类对应的数据。

import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
    // 可根据需要添加自定义查询方法
}

1.4配置数据源:

  在 Spring Boot 的配置文件中,配置数据库连接信息、JPA 相关的属性,例如数据库 URL、用户名、密码等。

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

1.5使用 Repository 进行操作:

  在需要使用 JPA 操作数据库的地方,通过注入 Repository 接口对象来调用相应的方法。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
  private final UserRepository userRepository;
  @Autowired
  public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
  }
  public User saveUser(User user) {
    return userRepository.save(user);
  }
  public User getUserById(Long id) {
    return userRepository.findById(id).orElse(null);
  }
  // 其他操作方法
}

  上述示例是一个简单的使用 org.springframework.data.jpa 的流程。它包括创建实体类、定义 Repository 接口、配置数据源和使用 Repository 进行操作。根据具体需求,可以扩展和定制这些步骤以满足应用程序的要求。

2.UserRepository 中定义使用得方法

  在 UserRepository 中定义使用的方法非常简单。Spring Data JPA 提供了一套命名规则,它根据方法名自动解析和生成查询语句。可以按照规则给方法命名,而不需要编写具体的查询语句。

  以下是一些常见的方法命名规则及其解析方式:

  • 根据属性查询:
  • findBy<PropertyName>:根据属性名称进行查询,例如 findByName(String name)
  • findBy<PropertyName>And<OtherProperty>:根据多个属性进行查询,并通过 "And" 连接,例如 findByNameAndAge(String name, int age)
  • 按条件查询:
  • findBy<PropertyName>Equals:根据属性的精确匹配进行查询,例如 findByNameEquals(String name)
  • findBy<PropertyName>IsNotNull:根据属性不为 null 的条件进行查询,例如 findByEmailIsNotNull()
  • 排序和分页:
  • findAllByOrderBy<PropertyName>:根据属性进行升序排序查询,例如 findAllByOrderByAge()
  • findAll(Pageable pageable):返回分页结果,可以使用 PageRequest.of(...) 创建 Pageable 对象。

  这只是一小部分可用的方法命名规则示例,您可以根据具体需求查阅 Spring Data JPA 文档以获得更全面的了解。

  注意事项:

  • 方法名称必须遵循命名规则,否则可能会导致查询失败。
  • 方法参数的数量和类型必须与属性的类型和数量匹配。
  • 在使用一些特殊操作时,如模糊查询、区间查询等,可以使用 LikeBetween 等关键字来指定更复杂的条件。

  示例:

import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByName(String name);
    List<User> findByAgeGreaterThan(int age);
    List<User> findByEmailIsNotNull();
}

  在上述示例中,UserRepository 定义了三个查询方法:根据名称查询用户、根据年龄大于给定值查询用户以及查询邮箱不为 null 的用户。这些方法会根据方法名自动解析为相应的查询条件,并返回符合条件的用户列表。

3.JPA 使用自定义sql

  在实际使用过程中,可能需要处理一些特定的查询场景或复杂的条件,可能需要编写自定义的查询语句。Spring Data JPA 提供了注解和其他方式来支持自定义查询,以满足更复杂的需求。

  在 Spring Data JPA 中,可以使用自定义的查询语句来满足特定的查询需求。以下是两种常用的方式来实现自定义查询:

3.1使用 @Query 注解

  使用方法:

  • 在需要进行自定义查询的方法上添加 @Query 注解,并提供相应的查询语句。
  • 在查询语句中使用命名参数(例如 :paramName)来引用方法参数。
  • 如果有多个参数,可以通过索引位置(例如 ?1?2)引用它们。

  示例:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.name = :name")
    List<User> findByName(String name);
    @Query("SELECT u FROM User u WHERE u.age > :age AND u.email IS NOT NULL")
    List<User> findByAgeGreaterThanAndEmailIsNotNull(int age);
}

  在上述示例中,使用了 @Query 注解来自定义查询语句。通过 :name:age 引用了方法参数,并根据属性条件进行查询。

3.2使用方法名称解析和关键字:

  使用方法

  • 在方法名称中使用关键字(如 AndOrBetween 等)来指定更复杂的条件。
  • 当方法名称无法表达所需的查询时,可以使用 @Query 注解来补充自定义查询。

  示例:

import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByAgeBetween(int minAge, int maxAge);
    @Query("SELECT u FROM User u WHERE u.name LIKE %:keyword%")
    List<User> searchByKeyword(String keyword);
}

  在上述示例中,使用了方法名称解析和关键字。findByAgeBetween 方法按照年龄范围进行查询,而 searchByKeyword 方法使用了 LIKE 来进行模糊查询。

  无论选择哪种方式,都可以根据需要编写复杂的查询语句,并通过方法名或注解来引用相关参数。这样就可以使用自定义的查询语句来执行更灵活和复杂的数据库操作。

 

标签: spring

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
43 1
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
25天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
1月前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
43 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
2月前
|
存储 Java 关系型数据库
JPA不识别MySQL枚举类型的解决方案
在JPA中处理MySQL的枚举类型,需要在实体类与数据库之间进行适当的转换。可以选择使用 `@Enumerated`注解、实现自定义的转换器,或者使用原生SQL查询来解决JPA不直接支持MySQL枚举类型的问题。选择最佳方案时,应考虑项目的具体需求和架构。通过正确的映射和转换,可以确保JPA与MySQL数据库间高效且安全的数据交互。
71 6
|
3月前
|
Java 关系型数据库 MySQL
|
3月前
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
54 1
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
362 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
48 1