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;
}
}
Code language: JavaScript (javascript)
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();
}
}
Code language: PHP (php)
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.
No Comment! Be the first one.