Mendefinisikan Entitas dan Repositori
Buat entitas JPA untuk dipetakan ke tabel basis data dan tentukan antarmuka repositori untuk akses data.
Mendefinisikan Entitas dan Repositori adalah pelajaran Spring Boot 4 Microservices & REST APIs gratis di CoddyKit. Ini adalah pelajaran 4 dari 6. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Spring Boot 4 Microservices & REST APIs, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Spring Boot 4 Microservices & REST APIs mencakup 6 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Welcome to Data Persistence
In this lesson, we'll learn how to connect your Java application to a database using Spring Boot. This is called data persistence, meaning your data lives on even after your app stops.
We'll focus on two core concepts:
- Entities: Your Java objects that map to database tables.
- Repositories: Interfaces that provide easy ways to interact with your entities and the database.
What's a JPA Entity?
A JPA Entity is a plain Java class that represents a table in your relational database. Each instance of this class corresponds to a row in that table.
The Java Persistence API (JPA) is a standard for managing relational data in Java applications. Spring Data JPA builds on this to simplify database interactions even further.
Defining Your First Entity
To mark a Java class as a JPA Entity, you use the @Entity annotation. You also need to define a primary key using @Id.
Let's create a simple Product entity:
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class Product {
@Id
private Long id;
private String name;
private double price;
public Product() {}
public Product(Long id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Product{id=" + id + ", name='" + name + "', price=" + price + "}";
}
public static void main(String[] args) {
Product product = new Product(1L, "Laptop", 1200.00);
System.out.println(product);
}
}Auto-Generating Primary Keys
Manually assigning IDs can be tedious and prone to errors. Databases can automatically generate unique IDs for you!
Use the @GeneratedValue annotation along with a strategy. GenerationType.IDENTITY is common for databases that auto-increment (like MySQL, H2).
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
public Product() {}
public Product(String name, double price) { // No ID in constructor
this.name = name;
this.price = price;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Product{id=" + id + ", name='" + name + "', price=" + price + "}";
}
public static void main(String[] args) {
Product product = new Product("Keyboard", 75.00);
// In a real app, ID would be generated by the DB when persisted
System.out.println("Product created (ID will be generated by DB): " + product);
}
}Customizing Column Mappings
By default, JPA maps fields to columns with the same name. You can customize this using the @Column annotation.
It lets you specify the column name, whether it's nullable, its length, and more:
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "product_name", nullable = false, length = 100)
private String name;
@Column(nullable = false)
private double price;
public Product() {}
public Product(String name, double price) {
this.name = name;
this.price = price;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Product{id=" + id + ", name='" + name + "', price=" + price + "}";
}
public static void main(String[] args) {
Product product = new Product("Mouse", 25.50);
System.out.println("Product with custom columns: " + product);
}
}Introducing Spring Data Repositories
Now that we have an entity, how do we save it to the database or retrieve it? That's where Spring Data Repositories come in!
A repository is an interface that provides powerful, pre-built methods for common database operations (like Create, Read, Update, Delete - CRUD). You don't write SQL; Spring Data JPA generates it for you.
Defining a JpaRepository Interface
To create a repository for your entity, you simply define an interface that extends Spring Data JPA's JpaRepository.
The JpaRepository takes two type parameters: the Entity type and the type of its Primary Key.
Here's how you'd define a repository for our Product entity:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
// Assuming 'Product' entity is defined in the same package or imported
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
// Spring Data JPA automatically provides CRUD methods here!
// You can add custom query methods if needed, e.g.,
// List<Product> findByName(String name);
}Note: The @Repository annotation is optional but good practice for clarity.
Built-in Repository Methods
By extending JpaRepository, your ProductRepository automatically inherits many powerful methods. Here are a few:
save(entity): Saves a given entity (inserts if new, updates if exists).findById(id): Retrieves an entity by its ID, returning anOptional.findAll(): Returns all instances of the entity type.delete(entity)ordeleteById(id): Removes an entity.
This means you get full CRUD functionality without writing a single line of implementation code!
Using Repositories in an App
In a real Spring Boot application, you would inject your repository into a service or controller using @Autowired and then call its methods.
While we can't run a full Spring Boot app with a database here, this snippet shows the conceptual usage within a typical Spring Boot component:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
// Assuming Product and ProductRepository are defined
@Service
public class ProductService {
private final ProductRepository productRepository;
@Autowired
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
public Product createProduct(String name, double price) {
Product newProduct = new Product(name, price);
return productRepository.save(newProduct);
}
public List<Product> getAllProducts() {
return productRepository.findAll();
}
public Product getProductById(Long id) {
return productRepository.findById(id).orElse(null);
}
}
This ProductService would then be used by other parts of your application.
Quick Check on Entities
Which of the following annotations are essential for defining a basic JPA Entity that maps to a database table and has an auto-generated primary key?
Recap: Entities & Repositories
Great job! You've learned the foundations of data persistence with Spring Data JPA:
- Entities are Java classes annotated with
@Entitythat map to database tables. @Idmarks the primary key, and@GeneratedValuelets the database handle ID generation.@Columnallows you to customize field-to-column mappings.- Repositories are interfaces that extend
JpaRepository<Entity, ID>, providing powerful, ready-to-use CRUD methods without writing SQL.
Next, you'll dive deeper into performing various CRUD operations!
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendefinisikan Entitas dan Repositori” gratis?
Ya — teks lengkap “Mendefinisikan Entitas dan Repositori” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Spring Boot 4 Microservices & REST APIs, upgrade ke CoddyKit PRO. Kursus Spring Boot 4 Microservices & REST APIs mencakup 6 pelajaran total.
Apa yang akan aku pelajari di “Mendefinisikan Entitas dan Repositori”?
Buat entitas JPA untuk dipetakan ke tabel basis data dan tentukan antarmuka repositori untuk akses data. Kamu berlatih Spring Boot 4 Microservices & REST APIs dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Spring Boot 4 Microservices & REST APIs?
Tidak diperlukan pengalaman sebelumnya. Spring Boot 4 Microservices & REST APIs di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 6.
Berapa lama pelajaran “Mendefinisikan Entitas dan Repositori” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Spring Boot 4 Microservices & REST APIs ini?
Ya. Setiap pelajaran Spring Boot 4 Microservices & REST APIs menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengintegrasikan Basis Data H2 dan JPA
- Pengantar Spring Data JPA
- Membuat Entitas dan Repositori
- Mendefinisikan Entitas dan Repositori
- Operasi CRUD dengan REST
- Melakukan Operasi CRUD