mcpField
S
spring-data-jpa

spring-data-jpa

github.com/partme-ai开发71882 次安装4 周前更新
代码仓库

关于 spring-data-jpa

用于使用 Spring Data JPA 构建持久化层的技能,涵盖实体、仓库、查询、配置和事务。面向实现数据库访问的 Spring 开发者,也介绍分页、审计及规避常见抓取问题。

主要功能

  1. 01定义 JPA 实体和关系映射
  2. 02创建 Spring Data 仓库
  3. 03编写派生、JPQL 和原生查询
  4. 04配置数据源与事务
  5. 05使用分页、排序和实体图

适用场景

  1. 01为 Spring 应用实现数据库访问
  2. 02添加分页或自定义仓库查询
  3. 03检查事务边界和抓取策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/partme-ai/full-stack-skills --skill spring-data-jpa

安装后在 Claude Code 中输入/spring-data-jpa确认已加载。

附带文件LICENSE.txt

详细介绍

适用场景

在用户希望执行以下操作时使用此技能:

  • 使用注解(@Entity、@Id、@Column)定义 JPA 实体
  • 创建 Spring Data 仓库(JpaRepository、CrudRepository)
  • 使用派生查询方法、通过 @Query 编写 JPQL/原生 SQL,以及使用 Specifications
  • 配置数据源、Hibernate 方言和事务管理
  • 处理分页、排序、审计和实体图

使用方法

工作流
  1. 定义实体,使用 JPA 注解和关系映射
  2. 创建仓库,扩展 JpaRepository 并添加派生查询方法或自定义查询方法
  3. 配置数据源,在 application.yml 或 application.properties 中进行配置
  4. 使用服务层封装业务逻辑,并设置恰当的事务边界
1. 实体定义
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

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

    @CreatedDate
    private LocalDateTime createdAt;

    // Getters and setters
}
2. 仓库
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByEmail(String email);
    List<User> findByNameContaining(String name);
    Page<User> findByNameContaining(String name, Pageable pageable);

    @Query("SELECT u FROM User u WHERE u.email = :email")
    Optional<User> findByEmailCustom(@Param("email") String email);
}
3. 使用事务的服务层
@Service
@Transactional
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User create(String name, String email) {
        User user = new User();
        user.setName(name);
        user.setEmail(email);
        return userRepository.save(user);
    }

    @Transactional(readOnly = true)
    public Page<User> search(String name, Pageable pageable) {
        return userRepository.findByNameContaining(name, pageable);
    }
}
4. 配置
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mydb
    username: postgres
    password: password
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: false
    properties:
      hibernate.format_sql: true

最佳实践

  • 注意 N+1 查询问题;使用 @EntityGraph 或 JOIN FETCH 控制抓取策略
  • 对大型数据集使用分页(Pageable)和批量操作
  • 将实体与 DTO 分开;切勿在 API 响应中直接暴露 JPA 实体
  • 明确划分事务边界;对读取操作使用 @Transactional(readOnly = true)
  • 使用 Flyway 或 Liquibase 进行架构迁移,避免在生产环境中使用 ddl-auto: update

资源

关键词

spring data jpa,JPA,Repository,实体,查询方法,JPQL,分页,事务,Hibernate,Spring Boot,持久化

评论

支持 Markdown