Spring Boot 4 Microservices & REST APIs · Ders

Varlıkları ve Depoları Tanımlama

Veritabanı tablolarıyla eşlemek için JPA varlıkları oluşturun ve veri erişimi için depo arayüzlerini tanımlayın.

4. ders / 611 adım

Varlıkları ve Depoları Tanımlama, CoddyKit'te ücretsiz bir Spring Boot 4 Microservices & REST APIs dersidir. Bu, 6 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Spring Boot 4 Microservices & REST APIs öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Spring Boot 4 Microservices & REST APIs kursu toplamda 6 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

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 an Optional.
  • findAll(): Returns all instances of the entity type.
  • delete(entity) or deleteById(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 @Entity that map to database tables.
  • @Id marks the primary key, and @GeneratedValue lets the database handle ID generation.
  • @Column allows 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!

Başlamak ücretsiz

Yapay zeka eğitmeniyle Java öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
24
Dersler
93

Sıkça Sorulan Sorular

“Varlıkları ve Depoları Tanımlama” dersi ücretsiz mi?

Evet — “Varlıkları ve Depoları Tanımlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Spring Boot 4 Microservices & REST APIs kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Spring Boot 4 Microservices & REST APIs kursu toplamda 6 dersten oluşur.

“Varlıkları ve Depoları Tanımlama” dersinde ne öğreneceğim?

Veritabanı tablolarıyla eşlemek için JPA varlıkları oluşturun ve veri erişimi için depo arayüzlerini tanımlayın. Spring Boot 4 Microservices & REST APIs ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Spring Boot 4 Microservices & REST APIs öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Spring Boot 4 Microservices & REST APIs, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 4. dersidir.

“Varlıkları ve Depoları Tanımlama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Spring Boot 4 Microservices & REST APIs dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Spring Boot 4 Microservices & REST APIs dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. H2 Veritabanı ve JPA Entegrasyonu
  2. Spring Data JPA'ya Giriş
  3. Varlıklar ve Depolar Oluşturma
  4. Varlıkları ve Depoları Tanımlama
  5. REST ile CRUD İşlemleri
  6. CRUD İşlemlerini Gerçekleştirme
← Spring Boot 4 Microservices & REST APIs Sayfasına Dön