DEV Community

Zaw Htut Win
Zaw Htut Win

Posted on

Full Stack Development with Spring Boot and React (အခန်း ၄)

Spring Data repositories ကို အမျိုးစုံ customize လုပ်ပုံ

ကိုယ့်စိတ်ကြိုက် quries တွေကို Spring Data repositories တွေမှာ ရေးလို့ရပါတယ်။ findBy ဆိုတဲ့ prefix နဲ့ စရမှာဖြစ်ပါတယ်။
ဥပမာ findBy + Brand = findByBrand

ရှေ့က prefix findBy က အသေ ဖြစ်ပြီးနောက်က ကိုယ်ရှာဖို့ ပေးလိုက်ချင်တဲ့ field နာမည်ကိုရေးရမှာပါ။
အောက်မှာ example ပြထားပါတယ်။

import java.util.List;
import org.springframework.data.repository.CrudRepository;

public interface CarRepository extends CrudRepository<Car, Long> {
// Fetch cars by brand
    List<Car> findByBrand(String brand);
Enter fullscreen mode Exit fullscreen mode

findBy ဆိုတဲ့ keyword နောက်မှာ And နဲ့ Or ဆိုတဲ့ keyword တွေသုံးလို့ရပါသေးတယ်။
ဥပမာ findBy + Brand + And + Model = findByBrandAndModel
findBy+ Brand + Or + Color = findByBrandOrColor
အစရှိသည်ဖြင့်သုံးနိုင် ရေးနိုင်ပါတယ်။
အောက်မှာ example ပြထားပါတယ်။

package com.packt.demo.domain;

import java.util.List;
import org.springframework.data.repository.CrudRepository;

public interface CarRepository extends CrudRepository<Car, Long> {
// Fetch cars by brand and model
    List<Car> findByBrandAndModel(String brand, String model);

// Fetch cars by brand or color
    List<Car> findByBrandOrColor(String brand, String color);
}
Enter fullscreen mode Exit fullscreen mode

ဒီထက် advance ဖြစ်တဲ့ keyword နောက် တစ်မျိုးက OrderBy ဆိုတဲ့ keyword ပါ။ ထွက်လာတဲ့ results တွေကို ကြီးရာကနေငယ်ရာ ၊ ငယ်ရာကနေကြီးရာ စီပေးနိုင်ပါတယ်။
အဲဒါကတော့ Asc နဲ့ Desc ဆိုတဲ့ keyword တွေပေါ့။ ဥပမာ findBy+Year+OrderBy+Asc findByYearOrderByAsc ဆိုရင် Year ကိုပေးပြီးရှာမယ်။ ထွက်လာတဲ့ results ကို
ငယ်ရာကနေကြီးရာ စီမယ်ဆိုတဲ့ method ကို create လုပ်နိုင်ပြီပေါ့။

package com.packt.demo.domain;

import java.util.List;
import org.springframework.data.repository.CrudRepository;

public interface CarRepository extends CrudRepository<Car, Long> {
// Fetch cars by brand and sort by year
    List<Car> findByBrandOrderByYearAsc(String brand);
}
Enter fullscreen mode Exit fullscreen mode

နောက်ဆုံးတစ်ခုကတော့ method name အစား ကိုယ်ရေးချင်တဲ့ query ကို SQL လိုမျိုး ဟာနဲ့ ဆွဲထုတ်ပြီးရေးတာဖြစ်ပါတယ်။​ အောက်မှာ example ကို ပြထားပါတယ်။ ?1 ဆိုတာ positional parameter ပါ။ ဒီနေရာမှာ brand ပေါ့

package com.packt.demo.domain;

import java.util.List;
import org.springframework.data.repository.CrudRepository;

public interface CarRepository extends CrudRepository<Car, Long> {
// Fetch cars by brand using SQL
    @Query("select c from Car c where c.brand like %?1")
    List<Car> findByBrandEndsWith(String brand);
}
Enter fullscreen mode Exit fullscreen mode

Pagination အတွက်ကတော့ PagingAndSortingRepository ဆိုတဲ့ feature ကို CrudRepository အပြင်သုံးနိုင်ပါတယ်။ ဆွဲထုတ်မယ့် Data တွေ အရမ်းများရင် serverside pagination ဟာ
အင်မတန်အသုံးဝင်ပါတယ်။ PagingAndSortingRepository ဟာ results တွေကို page အလိုက်ထုတ်ပေးဖို့နဲ့ sort လုပ်ပေးတဲ့နေရာမှာ အသုံးဝင်ပါတယ်။ PagingAndSortingRepository ကို
ဆောက်တာ CrudRepository ကို ဆောက်တာနဲ့ ပုံစံတူတူပါပဲ။

ဒါဆိုရင် အောက်ပါ method တွေကို စသုံးနိုင်ပြီဖြစ်ပါတယ်။

Method Description
Iterable<T> findAll(Sort sort) ပေးလိုက်တဲ့ sort option အတိုင်း item တွေကိုထုတ်ယူဖို့
Page<T> findAll(Pageable
pageable) ပေးလိုက်တဲ့ paging option အတိုင်း item တွေကို ထုတ်ယူဖို့

Oldest comments (0)