Spring Boot Dersleri Pagination Uygulama İşlemleri
Spring Boot Dersleri‘ne devam ediyorum.
Bu yazıda Spring Boot projemizde rest api servisimizdeki pagination yani verileri clienta gönderirken sayfalama işlemini örnek bir uygulama örneği yaparak anlamaya çalışacağız.
Yapacağım örnekte iller ve nüfüsların bulunduğu bir veritabanımız olacak ve bu kayıtlar içerisinden sayfalama işlemlerinin kullanacağımız Spring Boot projesi yapacağız.
Maven bağımlılığımız aşağıdaki gibidir. Bu bağımlılığımızda veritabanı olarakda H2 gömülü veritabanı kullanacağım.
<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>
Code language: HTML, XML (xml)
İller ve nüfüs bilgilerinin olduğu ve veritabanı ayağa kalktığında bu sabir verilerin yüklenebilmesi için resources klasörünün altında import.sql dosyası oluşturup verimizi Sql cümlecikleri ile ekleyelim.
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (1, 'Adana', 2201670);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (2, 'Adıyaman', 610484);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (3, 'Afyonkarahisar', 714523);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (4, 'Ağrı', 542255);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (5, 'Amasya', 326351);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (6, 'Ankara', 5346518);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (7, 'Antalya', 2328555);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (8, 'Artvin', 168068);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (9, 'Aydın', 1068260);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (10,'Balıkesir', 1196176);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (11,'Bilecik', 218297);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (12,'Bingöl', 269560);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (13,'Bitlis', 341225);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (14,'Bolu', 299896);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (15,'Burdur', 261401);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (16,'Bursa', 2901396);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (17,'Çanakkale', 519793);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (18,'Çankırı', 183880);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (19,'Çorum', 527863);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (20,'Denizli', 1005687);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (21,'Diyarbakır', 1673119);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (22,'Edirne', 401701);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (23,'Elazığ', 578789);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (24,'Erzincan', 226032);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (25,'Erzurum', 762021);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (26,'Eskişehir', 844842);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (27,'Gaziantep', 1974244);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (28,'Giresun', 444467);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (29,'Gümüşhane', 172034);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (30,'Hakkari', 267813);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (31,'Hatay', 1555165);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (32,'Isparta', 427324);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (33,'Mersin', 1773852);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (34,'İstanbul', 14804116);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (35,'İzmir', 4223545);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (36,'Kars', 289786);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (37,'Kastamonu', 376945);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (38,'Kayseri', 1358980);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (39,'Kırklareli', 351684);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (40,'Kırşehir', 229975);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (41,'Kocaeli', 1830772);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (42,'Konya', 2161303);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (43,'Kütahya', 573642);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (44,'Malatya', 781305);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (45,'Manisa', 1396945);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (46,'Kahramanmaraş', 1112634);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (47,'Mardin', 796237);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (48,'Muğla', 923773);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (49,'Muş', 406501);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (50,'Nevşehir', 290895);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (51,'Niğde', 351468);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (52,'Ordu', 750588);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (53,'Rize', 331048);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (54,'Sakarya', 976948);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (55,'Samsun', 1295927);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (56,'Siirt', 322664);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (57,'Sinop', 205478);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (58,'Sivas', 621224);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (59,'Tekirdağ', 972875);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (60,'Tokat', 602662);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (61,'Trabzon', 779379);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (62,'Tunceli', 82193);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (63,'Şanlıurfa', 1940627);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (64,'Uşak', 358736);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (65,'Van', 1100190);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (66,'Yozgat', 421041);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (67,'Zonguldak', 597524);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (68,'Aksaray', 396673);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (69,'Bayburt', 90154);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (70,'Karaman', 245610);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (71,'Kırıkkale', 277984);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (72,'Batman', 576899);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (73,'Şırnak', 483788);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (74,'Bartın', 192389);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (75,'Ardahan', 98335);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (76,'Iğdır', 192785);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (77,'Yalova', 241665);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (78,'Karabük', 242347);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (79,'Kilis', 130825);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (80,'Osmaniye', 522175);
INSERT Sehirler (Plaka, Ad, Nufus) VALUES (81,'Düzce', 370371);
Code language: JavaScript (javascript)
Verilerimizin entity sınıfını oluşturalım.
@Entity
@Table
public class Sehirler {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private int plaka;
private String ad;
private int nufus;
public Sehirler() {
}
public Sehirler(Long id, int plaka, String ad, int nufus) {
this.id = id;
this.plaka = plaka;
this.ad = ad;
this.nufus = nufus;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getPlaka() {
return plaka;
}
public void setPlaka(int plaka) {
this.plaka = plaka;
}
public String getAd() {
return ad;
}
public void setAd(String ad) {
this.ad = ad;
}
public int getNufus() {
return nufus;
}
public void setNufus(int nufus) {
this.nufus = nufus;
}
}
Code language: JavaScript (javascript)
Repositorymizi oluşturalım bu sınıfımızda PagingAndSortingRepository extend ederek verilerin pagination işlemi için kullanılabilecek bir yapıda olduğunu söylemiş oluyoruz.
@Repository
public interface SehirlerRepository extends PagingAndSortingRepository<Sehirler, Long> {
}
Code language: PHP (php)
Verileri getirecek servis katmanımızın arayüz interface kısmını oluşturalım. Bu interface’de veritabanımıza ulaşacak olan metot tanımlamalarımızı yapıyoruz.
public interface ISehirlerService {
List<Sehirler> getSehirlerList(int no, int size);
}
Code language: PHP (php)
Bu metotta no ve size parametrelerini alıyoruz.
- no değeri sayfa sayısı,
- size ise o sayfada bulunan kayıt sayısını ifade etmektedir.
Servis katmanımızı oluşturalım ve arayüzümü de bu sınıfa implement edeceğiz.
@Service
public class SehirlerService implements ISehirlerService{
@Autowired
private SehirlerRepository sehirlerRepository;
@Override
public List<Sehirler> getSehirlerList(int no, int size) {
Pageable pageable = PageRequest.of(no, size);
Page<Sehirler> sehirlerPage = sehirlerRepository.findAll(pageable);
return sehirlerPage.toList();
}
}
Code language: PHP (php)
Bu sınıf içerisindeki metodumuzda gelecek verinin hangi sayfa sayısından kaç adet veri geleceğini yani pagination işleminin yapıldığı yer. Hangi sayfadan kaç adet veri geleceğini tabiki biz rest api endpointimizden göndereceğiz.
Bunun için Pageable sınıfının içerisinden PageRequest isteği oluşturuyoruz ve ardından bu pagination istediğini data jpa tarafından desteklenen repositorymizdeki findAll metdouna gönderiyoruz.
Bu metod bizim isteğimizi yerine getirirken pagination isteğimizi de ekleyerek ona göre bize verileri getiriyor.
Controllerimizi bu contorllerimiz rest controller olacak. Bu sınıfta ise restfull endpointimizi oluşturalım.
@RestController
public class SehirlerController {
@Autowired
private ISehirlerService iSehirlerService;
@GetMapping("/sehir/{no}/{size}")
public List<Sehirler> getSehirler(@PathVariable int no,
@PathVariable int size) {
return iSehirlerService.getSehirlerList(no, size);
}
}
Code language: PHP (php)
Ve şimdi Postman’den test edelim.
`localhost:8080/sehir/10/4` isteği gönderdiğimizde gelen cevap aşağıdaki gibi olacaktır.
[
{
"id": 41,
"plaka": 41,
"ad": "Kocaeli",
"nufus": 1830772
},
{
"id": 42,
"plaka": 42,
"ad": "Konya",
"nufus": 2161303
},
{
"id": 43,
"plaka": 43,
"ad": "Kütahya",
"nufus": 573642
},
{
"id": 44,
"plaka": 44,
"ad": "Malatya",
"nufus": 781305
}
]
Code language: JSON / JSON with Comments (json)
No Comment! Be the first one.