Spring Data JPA ile Veritabanı İşlemleri

Spring Framework’ün sunduğu bir çok özellik arasında bulanan bir modülde Spring Data JPA’dır. JPA, Java Persistence Api’nin kısaltması olup Java uygulamarında ilişkisel veriler için geliştirilmiş bir kütüphanedir. Bu yazımızda Spring ile veritabanı işlemlerine değineceğiz.

Bağımlıklıklarımızı Tanımlayalım

Bu projede ki bağımlılıklarımız Spring Web, Data JPA ve H2 Database olacak. Burada veritabanımızı H2 ile kullanacağız. Bunu seçmemizin nedeni ise H2’nin bellek üzerinde veri depolaması ve ekstra bir kuruluma ihtiyaç duymamasından kaynaklanıyor.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath/>
    </parent>
    <groupId>com.codingbytime</groupId>
    <artifactId>mysql</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mysql</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Entity Tanımlayalım

Entity’ler veritabanımızda tutacağımız tablolarımıza denk gelmektedir. Java’da tanımlayacağımız sınıfları @Entity olarak işaretleyerek bunları veritabanında bir tablo altında bu türden verileri saklamak istediğimizi belirtiriz. Şimdi bir Car sınıfı tanımlayalım. Getter ve Setter tanımlamalarını unutmayınız. Sınıfımız bu şekilde olacak:

@Entity
public class Car {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String model;
    private String brand;
    private int year;
    private int price;
}

 

Repository Tanımlayalım

Repository’ler interface olup entity yapılarımızın veritabanına kaydedilmesi için kullanılan çatılardır. Repo adında yeni bir package oluşturalım ve burada CarRepository isminde bir interface tanımlayalım:

@Repository
public interface CarRepository extends JpaRepository<Car, Long> {
}

Burada JpaRepository interface’ni extend ederek burada ki metodları kullanmak istediğimizi belirttik. Bunun haricinde bir çok repository interface’i de bulunmaktadır. Ancak biz temek yapıları kullanacağız.

İlgini çekebilir:  Spring JDBC ile İlişkisel Veriler

Controller Tanımlayalım

Yeni bir Car oluşturmak, Caryı silmek ve veritabanında ki tüm Carları listelemek için CarController sınıfımızı oluşturalım:

@RestController
@RequestMapping("/cars")
public class CarController {

    private final CarRepository carRepository;

    @Autowired
    public CarController(CarRepository carRepository) {
        this.carRepository = carRepository;
    }

    @GetMapping
    private List<Car> CarList() {
        return carRepository.findAll();
    }

    @PostMapping
    private Car carList(@RequestParam String model,
                            @RequestParam String brand,
                            @RequestParam int year,
                            @RequestParam int price) {

        Car Car = new Car(model, brand, year, price);
        return carRepository.save(Car);
    }

    @DeleteMapping("/{id}")
    private boolean carList(@PathVariable Long id) {
        if (carRepository.findById(id).isPresent()) {
            carRepository.deleteById(id);
            return true;
        }
        return false;
    }

}

 

Kodumuzu Test Edelim

  • http://localhost:8080/?model=5.20&brand=bmw&year=2000&price=54321
{
   "id":1,
   "model":"5.20",
   "brand":"bmw",
   "year":2000,
   "price":54321
}
  • http://localhost:8080/
[
   {
      "id":1,
      "model":"5.20",
      "brand":"bmw",
      "year":2000,
      "price":54321
   },
   {
      "id":2,
      "model":"symbol",
      "brand":"renault",
      "year":2000,
      "price":54321
   }
]
  • http://localhost:8080/1
true

 

Sonuç

Spring ile veritabanına yeni kayıt atma, mevcut kaydı silme ve kayıtları listelemek için basit bir yapı oluşturduk. Burada yapılan sorgular en basit derecede yapıldığından daha ileri düzel bilgiler için Spring Framework’ün websitesinde bulunan tutorial’lara göz atabilirsiniz.

More Reading

Post navigation