
spring-boot-crud-patterns
by giuseppe-trisciuoglio
This repository is a starter kit for building "skills" and "agents" for Claude Code. The current content focuses on patterns, conventions, and agents for Java projects (Spring Boot, JUnit, LangChain4J), but the kit is designed to be extensible and multi-language (PHP, TypeScript, Python, etc.).
SKILL.md
name: spring-boot-crud-patterns description: Provide repeatable CRUD workflows for Spring Boot 3 services with Spring Data JPA and feature-focused architecture; apply when modeling aggregates, repositories, controllers, and DTOs for REST APIs. allowed-tools: Read, Write, Bash category: backend tags: [spring-boot, java, ddd, rest-api, crud, jpa, feature-architecture] version: 1.1.0
Spring Boot CRUD Patterns
Overview
Deliver feature-aligned CRUD services that separate domain, application, presentation, and infrastructure layers while preserving Spring Boot 3.5+ conventions. This skill distills the essential workflow and defers detailed code listings to reference files for progressive disclosure.
When to Use
- Implement REST endpoints for create/read/update/delete workflows backed by Spring Data JPA.
- Refine feature packages following DDD-inspired architecture with aggregates, repositories, and application services.
- Introduce DTO records, request validation, and controller mappings for external clients.
- Diagnose CRUD regressions, repository contracts, or transaction boundaries in existing Spring Boot services.
- Trigger phrases: "implement Spring CRUD controller", "refine feature-based repository", "map DTOs for JPA aggregate", "add pagination to REST list endpoint".
Prerequisites
- Java 17+ project using Spring Boot 3.5.x (or later) with
spring-boot-starter-webandspring-boot-starter-data-jpa. - Constructor injection enabled (Lombok
@RequiredArgsConstructoror explicit constructors). - Access to a relational database (Testcontainers recommended for integration tests).
- Familiarity with validation (
jakarta.validation) and error handling (ResponseStatusException).
Quickstart Workflow
- Establish Feature Structure
Createfeature/<name>/directories fordomain,application,presentation, andinfrastructure. - Model the Aggregate
Define domain entities and value objects without Spring dependencies; capture invariants in methods such ascreateandupdate. - Expose Domain Ports
Declare repository interfaces indomain/repositorydescribing persistence contracts. - Provide Infrastructure Adapter
Implement Spring Data adapters ininfrastructure/persistencethat map domain models to JPA entities and delegate toJpaRepository. - Implement Application Services
Create transactional use cases underapplication/servicethat orchestrate aggregates, repositories, and mapping logic. - Publish REST Controllers
Map DTO records underpresentation/rest, expose endpoints with proper status codes, and wire validation annotations. - Validate with Tests
Run unit tests for domain logic and repository/service tests with Testcontainers for persistence verification.
Consult references/examples-product-feature.md for complete code listings that align with each step.
Implementation Patterns
Domain Layer
- Define immutable aggregates with factory methods (
Product.create) to centralize invariants. - Use value objects (
Money,Stock) to enforce type safety and encapsulate validation. - Keep domain objects framework-free; avoid
@Entityannotations in the domain package when using adapters.
Application Layer
- Wrap use cases in
@Serviceclasses using constructor injection and@Transactional. - Map requests to domain operations and persist through domain repositories.
- Return response DTOs or records produced by dedicated mappers to decouple domain from transport.
Infrastructure Layer
- Implement adapters that translate between domain aggregates and JPA entities; prefer MapStruct or manual mappers for clarity.
- Configure repositories with Spring Data interfaces (e.g.,
JpaRepository<ProductEntity, String>) and custom queries for pagination or batch updates. - Externalize persistence properties (naming strategies, DDL mode) via
application.yml; seereferences/spring-official-docs.md.
Presentation Layer
- Structure controllers by feature (
ProductController) and expose REST paths (/api/products). - Return
ResponseEntitywith appropriate codes:201 Createdon POST,200 OKon GET/PUT/PATCH,204 No Contenton DELETE. - Apply
@Validon request DTOs and handle errors with@ControllerAdviceorResponseStatusException.
Validation and Observability
- Write unit tests that assert domain invariants and repository contracts; refer to
references/examples-product-feature.mdintegration test snippets. - Use
@DataJpaTestand Testcontainers to validate persistence mapping, pagination, and batch operations. - Surface health and metrics through Spring Boot Actuator; monitor CRUD throughput and error rates.
- Log key actions at
infofor lifecycle events (create, update, delete) and use structured logging for audit trails.
Best Practices
- Favor feature modules with clear boundaries; colocate domain, application, and presentation code per aggregate.
- Keep DTOs immutable via Java records; convert domain types at the service boundary.
- Guard write operations with transactions and optimistic locking where concurrency matters.
- Normalize pagination defaults (page, size, sort) and document query parameters.
- Capture links between commands and events where integration with messaging or auditing is required.
Constraints and Warnings
- Avoid exposing JPA entities directly in controllers to prevent lazy-loading leaks and serialization issues.
- Do not mix field injection with constructor injection; maintain immutability for easier testing.
- Refrain from embedding business logic in controllers or repository adapters; keep it in domain/application layers.
- Validate input aggressively to prevent constraint violations and produce consistent error payloads.
- Ensure migrations (Liquibase/Flyway) mirror aggregate evolution before deploying schema changes.
References
- HTTP method matrix, annotation catalog, DTO patterns.
- Progressive examples from starter to advanced feature implementation.
- Excerpts from official Spring guides and Spring Boot reference documentation.
- Python generator to scaffold CRUD boilerplate from entity spec. Usage:
python skills/spring-boot/spring-boot-crud-patterns/scripts/generate_crud_boilerplate.py --spec entity.json --package com.example.product --output ./generated - Templates required: place .tpl files in
skills/spring-boot/spring-boot-crud-patterns/templates/or pass--templates-dir <path>; no fallback to built-ins. Seetemplates/README.md. - Usage guide: references/generator-usage.md
- Example spec:
skills/spring-boot/spring-boot-crud-patterns/assets/specs/product.json - Example with relationships:
skills/spring-boot/spring-boot-crud-patterns/assets/specs/product_with_rel.json
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
1ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon
