# 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:

@Repository
public 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
Running with Database
# Start PostgreSQL with Docker
docker run --name postgres-db -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:15
./mvnw spring-boot:run
My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments