Quarkus

Quarkus Hibernate Panache Nedir? Uygulama Örneği

Quarkus Dersleri‘ne devam ediyorum. Bu yazıda Quarkus’un Hibernate ORM implementasyonu olan Quarkus Panache ‘yi inceleyerek Quarkus Panache uygulaması yapacağım.

Quarkus Panache Nedir?


Quarkus Panache, SQL ve NOSQL veritabanları için, Quarkus 1.5.0’dan itibaren (3 Haziran 2020) CRUD (Create, Read, Update, Delete) işlemlerini REST Endpointler yardımı ile yazılımcının yazması gereken kodu minimumda azaltmaktadır. Öne çıkan özellilerinden biri de “Active Record Pattern” desteklemesidir.

Quarkus Panache Uygulama Yöntemleri


  • PanacheEntity

Modelimiz ile birlikte ORM islemlerinin gerceklestirildigi bir modelde olusturudugumuz sınıf. (Active Record Yöntem)

  • PanancheRepository

Model ile ORM islemlerinin ayrı sınıflar olusturarak kullanıldıgı bir yapı. (Repository Yöntemi).

yöntemlerinden bir tanesini kullanarak geliştirme yapabiliriz.

Quarkus Panache Uygulama Örneği


Quarkus Panache tebrübe etmek için Öğrenci bilgilerilerini tutan bir modelimiz ve ona bağlı bir rest servisimiz olacak. Quarkus Panache’yi bu servisimizde kullancağız.

Quarkus Panache veritabanımızın ayarları ve bağlantıları için application.properties dosyamıza tanımlamalarımızı yapalım.

quarkus.datasource.jdbc.url=jdbc:h2:mem:test
quarkus.datasource.username=sa
quarkus.datasource.password=
quarkus.datasource.db-kind=h2
quarkus.hibernate-orm.database.generation=drop-and-create

Modelimizi oluşturalım.

@Entity
public class Ogrenci extends PanacheEntity {

    private String name;
    private String surname;
    
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getSurname() {
    return surname;
  }

  public void setSurname(String surname) {
    this.surname = surname;
  }

  public Ogrenci() {
  }

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public Ogrenci(Long id, String name, String surname) {
    this.id = id;
    this.name = name;
    this.surname = surname;
  }
}

Modelimizi PanacheEntity extend ederek entitiy sınıfımıza Quarkus Panache özelliği kazandırmış olduk. Panache Entity sınıfını incelersek Crud işlemlerinin içerisinde barındığını ve bizim işimizi çok kolaylaştırdığını göreceğiz.

Şimdi Quarkus Panache Servis katmanımızı yazalım. Burada Quarkus Panache tarafından sunulan metotları kullanarak bir rest servis katmanı oluşturacağız ve CRUD işlemleri yapacağız.

@Path("ogrenci")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApplicationScoped
public class OgrenciService {

    @POST
    @Transactional
    public Response save(Ogrenci ogrenci) {
        ogrenci.persist();
        return Response.ok(ogrenci).status(201).build();
    }

    @GET
    public List<Ogrenci> get() {
        return Ogrenci.listAll();
        //return Ogrenci.listAll(Sort.by("name"));
    }

    @GET
    @Path("{id}")
    public Ogrenci getSingle(@PathParam("id") Long id) {
        Ogrenci ogr = Ogrenci.findById(id);
        if (ogr == null) {
            throw new WebApplicationException(id + " bulunamadı", 404);
        }
        return ogr;
    }

    @PUT
    @Path("{id}")
    @Transactional
    public Ogrenci update(@PathParam("id") Long id, Ogrenci ogrenci) {
        Ogrenci ogr = Ogrenci.findById(id);
        ogr.setName(ogrenci.getName());
        return ogr;
    }

    @DELETE
    @Path("{id}")
    @Transactional
    public Response delete(@PathParam("id") Long id) {
        Ogrenci ogrdelete = Ogrenci.findById(id);
        ogrdelete.delete();
        return Response.status(200).build();
    }

}

Quarkus Panache kullanarak yaptığımız işlemlerinin ne yaptığına ve özelliklerine bakalım.

  • ogrenci.persist()
    Modelin kayıt işlemini gerçekleştirmektedir.
  • Ogrenci.listAll()
    Ogrenci listesinin tamamını geri döndürmektedir.
  • Ogrenci.listAll(Sort.by(“name”))
    Ogrenci listesinin “name” göre sıralanarak geri döndürmektedir.
  • Ogrenci.findById(id)
    Öğrenci ıd’sine göre ogrenci modelini getirir.
  • ogrdelete.delete();
    Ogrenci modelini siler

Buradaki metotların hepsi Öğrenci modeline bağlıdır ve Öğrenci modelinde operasyonel işlemler bulunduğu içi yani Aktif Kayıf özelliği olduğu için aynı modelin sınıfını kullanarak CRUD operasyonlarını Quarkus Panache ile yapabiliyoruz.

Sonraki Quarkus Dersleri’nde görüşmek üzere.


Projenin Kaynak Kodlarına Ulaş


Önceki Ders: Uygulama Native Derleme
Quarkus Dersleri
Sonraki Ders: Dependency Injection

More in:Quarkus

Bunlara Gözat

Yorum Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir