Şuayb'in BloguŞuayb'in Blogu
Ana Sayfa
Kategoriler
Oyunlar
MediumHakkındaİletişim
Dil
Tema
    1. Blog
    2. Programlama
    3. Object-Relational Mapping

Object-Relational Mapping

İlk yayın16 Aralık 2024
Son güncelleme17 Aralık 2024
Okuma süresi3 dk okuma
JavaKotlinGoSpring BootGinORM
XLinkedInFacebook
Object-Relational Mapping

Beğeni yükleniyor...

Object-Relational Mapping (ORM), modern uygulamalarda veritabanı işlemlerini basitleştirir. Bu kılavuzda, Spring Boot ve Gin çerçevesini kullanarak PostgreSQL ile ORM nasıl kurulacağını öğreneceksiniz.


Son güncelleme17 Aralık 2024

Toplam görüntülenmeGörüntülenme yükleniyor...

Önceki makaleREST API’lerde Girdi DoğrulamaSonraki makaleSpring Boot ile Dependency Injection
Şuayb Şimşek

Yazan

Şuayb Şimşek

Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.

Uzmanlık

  • Spring Boot
  • Go
  • Mikroservis
  • Next.js
  • Cloud Native

Bağlantılar

GitHubLinkedInMedium

Benzer yazılar

REST API’lerde Girdi Doğrulama
Programlama

REST API’lerde Girdi Doğrulama

Spring Boot ve Gin ile Java, Kotlin ve Go’da REST API girdi doğrulamasını uygulamayı öğrenin. Anotasyon, özel doğrulama ve hata yönetimi örnekleri içerir.

15 Aralık 20243 dk okuma
JavaKotlinGoSpring BootGinDoğrulama
Gin - İlk Uygulama
Programlama

Gin - İlk Uygulama

Sıfırdan ilk Golang Gin uygulamanızı oluşturmanıza yardımcı olacak, yeni başlayanlar için rehber. Temelleri öğrenin ve Gin ile yolculuğunuza başlayın.

14 Aralık 20243 dk okuma
GoGinBaşlangıç Rehberi
Spring Boot Configuration Properties
Programlama

Spring Boot Configuration Properties

@ConfigurationProperties ile tip-güvenli yapılandırma tanımlamayı, @Validated ile ayarları doğrulamayı ve profile-specific application-{profile}.yml dosyalarıyla ortama göre değer yönetimini öğrenin.

4 Şubat 20263 dk okuma
JavaKotlinSpring BootYapılandırma

Hakkımda

Spring Boot, mikroservis, güvenlik ve daha fazlası hakkında yazılar.

İletişimYeni başladıysan

Son yazılar

  • Captain Tsubasa 2: World Fighters
  • Captain Tsubasa: Rise of New Champions
  • Spring Boot Configuration Properties
  • Spring Boot GraphQL JWE Kimlik Doğrulama
  • Spring Boot JPA ile JWE Kimlik Doğrulaması

Popüler konular

JavaKotlinSpring BootGüvenlikJWEJWT

Abone ol

Yeni yazılar yayınlandığında pratik backend ve fullstack notlarını al.

Sosyal

© 2024-2026 Şuayb'in Blogu. Tüm hakları saklıdır.

🌟 Neden ORM Kullanmalıyız?

ORM, nesne yönelimli programlama ile ilişkisel veritabanları arasındaki boşluğu kapatarak nesneleri doğrudan veritabanı tablolarına eşler. Bu, manuel SQL sorgularına olan ihtiyacı ortadan kaldırır, hataları azaltır ve geliştiricilerin verimliliğini artırır.


📋 Gereksinimler

📜 Şunlara sahip olduğunuzdan emin olun:

  • ☕ Java Geliştirme Kiti (JDK) 17+
  • 📦 Maven veya Gradle kurulu
  • 🔤 Bir Java IDE
  • 🐘 PostgreSQL kurulu ve çalışır durumda

Go için:

  • 🔧 Golang 1.17+ kurulu
  • 🔄 Projenizde go.mod başlatılmış

🛠️ Adım 1: Bağımlılıkları Ekleme

Spring Boot projesi kurmak ve ORM entegrasyonu sağlamak için şu adımları izleyin:

Bağımlılıkları Ekleme

Spring Boot projeleri için aşağıdaki bağımlılıkları projenize ekleyin:

  • Maven:
XMLpom.xml
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
</dependency>
  • Gradle:
GROOVYbuild.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.postgresql:postgresql'

Veritabanını Yapılandırma

PostgreSQL bağlantınızı application.properties veya application.yml dosyasına şu şekilde ayarlayın:

PROPERTIESapplication.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/demo
spring.datasource.username=kullanici_adiniz
spring.datasource.password=sifreniz
spring.jpa.hibernate.ddl-auto=update

Projeyi Başlatma

Henüz yapmadıysanız, Spring Initializr kullanarak projenizi oluşturun:

  1. Spring Web, Spring Data JPA ve PostgreSQL Driver bağımlılıklarını seçin.
  2. Projeyi indirin ve tercih ettiğiniz IDE'ye aktarın.

Go projeleri için:

  • Gin Çerçevesini ve GORM'u Kurun:
BASH
# Gin çerçevesini kurun
go get -u github.com/gin-gonic/gin

# GORM PostgreSQL sürücüsünü kurun
go get -u gorm.io/driver/postgres

# GORM ORM kütüphanesini kurun
go get -u gorm.io/gorm

🛠️ Adım 2: Modeli Tanımlayın ve REST Controller Uygulayın

Bu adım, entity/model, repository ve REST controller oluşturulmasını birleştirir.


▶️ Uygulamaları Çalıştırma

Bu bölümde Uygulamaları Çalıştırma konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.

  • Spring Boot:

    BASH
    ./mvnw spring-boot:run
  • Gin:

    BASH
    go run main.go

🧪 cURL ile Test Etme

API'yi aşağıdaki cURL komutları ile test edebilirsiniz:

Tüm Kullanıcıları Getir:

BASH
curl -X GET http://localhost:8080/api/users

Yeni Bir Kullanıcı Oluştur:

BASH
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{"name": "John Doe", "email": "johndoe@example.com"}'

🏁 Sonuç

Artık Object-Relational Mapping için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.

Entity

JAVAUser.java
package com.example.demo.entity;

import jakarta.persistence.*;
import lombok.Data;

@Data
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;
}

Repository

JAVAUserRepository.java
package com.example.demo.repository;

import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

REST Controller

JAVAUserController.java
package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class UserController {

  private final UserRepository userRepository;

  @GetMapping
  public List<User> getAllUsers() {
    return userRepository.findAll();
  }

  @PostMapping
  public User createUser(@RequestBody User user) {
    return userRepository.save(user);
  }
}

Entity

KOTLINUser.kt
package com.example.demo.entity

import jakarta.persistence.*

@Entity
class User(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long = 0,

  var name: String,

  var email: String
)

Repository

KOTLINUserRepository.kt
package com.example.demo.repository

import com.example.demo.entity.User
import org.springframework.data.jpa.repository.JpaRepository

interface UserRepository : JpaRepository<User, Long>

REST Controller

KOTLINUserController.kt
package com.example.demo.controller

import com.example.demo.entity.User
import com.example.demo.repository.UserRepository
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/api/users")
class UserController(
  private val userRepository: UserRepository
) {

  @GetMapping
  fun getAllUsers(): List<User> = userRepository.findAll()

  @PostMapping
  fun createUser(@RequestBody user: User): User = userRepository.save(user)
}

Model ve Veritabanı Bağlantısı

GOapp.go
package main

import (
	"gorm.io/driver/postgres"
	"gorm.io/gorm"
)

var DB *gorm.DB

func connectDatabase() {
	dsn := "host=localhost user=kullanici_adiniz password=sifreniz dbname=demo port=5432 sslmode=disable"
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("Veritabanına bağlanılamadı!")
	}

	DB = db
	DB.AutoMigrate(&User{})
}

type User struct {
	ID    uint   `json:"id" gorm:"primaryKey"`
	Name  string `json:"name"`
	Email string `json:"email"`
}

Handlerlar

GOmain.go
package main

import (
	"github.com/gin-gonic/gin"
)

func getUsers(c *gin.Context) {
	var users []User
	DB.Find(&users)
	c.JSON(200, users)
}

func createUser(c *gin.Context) {
	var user User
	if err := c.ShouldBindJSON(&user); err != nil {
		c.JSON(400, gin.H{"error": err.Error()})
		return
	}
	DB.Create(&user)
	c.JSON(201, user)
}

func main() {
	r := gin.Default()
	connectDatabase()

	r.GET("/api/users", getUsers)
	r.POST("/api/users", createUser)

	r.Run() // 0.0.0.0:8080 üzerinde dinle ve hizmet et
}