Spring Data JPA
Spring Data JPA, JPA (Java Persistence API) ke UPAR ek CONVENIENCE layer hai — ORM (Object-Relational Mapping) provide karta hai, matlab Java OBJECTS aur DATABASE TABLES ke beech AUTOMATIC mapping. @Entity annotation ek Java class ko DATABASE TABLE se JODती hai, @Id primary key batata hai.
SABSE BADA fayda — REPOSITORY INTERFACES se, boilerplate CRUD code (save, findById, findAll, delete) COMPLETELY ELIMINATE ho jaata hai. Tumhe SIRF ek interface define karni hai, Spring Data JPA RUNTIME par AUTOMATICALLY implementation generate kar deta hai.
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters, setters
}
public interface UserRepository extends JpaRepository<User, Long> {
// KUCH bhi likhne ki zaroorat nahi — save(), findById(), findAll(),
// delete() SAB automatically available hain JpaRepository se
}- @Entity = Java class ↔ database table ka mapping
- Repository interfaces = CRUD boilerplate automatically eliminate
- ORM = Object-Relational Mapping, Java objects ↔ SQL tables
JPA (Java Persistence API) ek SPECIFICATION hai (interface, standard) — ye khud koi code IMPLEMENT nahi karta. Hibernate JPA ka MOST POPULAR implementation hai (actual code jo kaam karta hai). Spring Data JPA Hibernate ke UPAR ek ABSTRACTION layer hai — repository interfaces se, boilerplate CRUD code ELIMINATE karta hai.
JPA entities ke beech relationships annotations se define hoti hain — @OneToMany (ek Order ke MULTIPLE OrderItems), @ManyToOne (MULTIPLE OrderItems ka EK Order), @ManyToMany (Student aur Course, dono taraf multiple). FetchType.LAZY (default @OneToMany ke liye) related data TABHI load karta hai jab ACTUALLY access ho.
@Entity
public class Order {
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "order", fetch = FetchType.LAZY)
private List<OrderItem> items;
}