# Spring Boot Data JPA Essentials
Spring Data JPA simplifies database operations with repository interfaces. Here’s a basic entity and repository:
@Entity@Table(name = "users")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
@Column(nullable = false, unique = true) private String email;
@Column(nullable = false) private String firstName;
@Column(nullable = false) private String lastName;
@CreationTimestamp private LocalDateTime createdAt;
@UpdateTimestamp private LocalDateTime updatedAt;
// Constructors, getters, and setters public User() {}
public User(String email, String firstName, String lastName) { this.email = email; this.firstName = firstName; this.lastName = lastName; }
// Getters and setters omitted for brevity}Creating repositories with custom query methods:
@Repositorypublic interface UserRepository extends JpaRepository<User, Long> {
// Query methods derived from method names List<User> findByFirstNameContainingIgnoreCase(String firstName);
Optional<User> findByEmail(String email);
List<User> findByCreatedAtBetween(LocalDateTime start, LocalDateTime end);
// Custom JPQL queries @Query("SELECT u FROM User u WHERE u.firstName = :firstName AND u.lastName = :lastName") List<User> findByFullName(@Param("firstName") String firstName, @Param("lastName") String lastName);
// Native SQL queries @Query(value = "SELECT * FROM users WHERE created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)", nativeQuery = true) List<User> findRecentUsers();
// Modifying queries @Modifying @Query("UPDATE User u SET u.firstName = :firstName WHERE u.id = :id") int updateFirstName(@Param("id") Long id, @Param("firstName") String firstName);}Database configuration in application.yml:
spring: datasource: url: jdbc:postgresql://localhost:5432/myapp username: ${DB_USERNAME:admin} password: ${DB_PASSWORD:password} driver-class-name: org.postgresql.Driver
jpa: hibernate: ddl-auto: validate show-sql: false properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect format_sql: true database-platform: org.hibernate.dialect.PostgreSQLDialect# Start PostgreSQL with Dockerdocker run --name postgres-db -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:15./mvnw spring-boot:run