Full Stack Development with Spring Boot and React (အခန်း ၃)
Published: 2022-12-24 09:20:13

**CRUD repositories များဆောက်ခြင်း**

Spring Boot Data JPA မှာ CRUD operation တွေကို အလွယ်တကူလုပ်လို့ရအောင် _CrudRepository_ ဆိုတဲ့ interface ကို ထည့်ပေးထားပါတယ်။

domain package ထဲမှာ CarRepository ဆိုတဲ့ ကျွန်တော်တို့ရဲ့ Car entity အတွက် CrudRepository တစ်ခုဆောက်ကြည့်ရအောင်။

အရင်ဆုံး အောက် ပါ code ကို CarRepository ဆိုတဲ့ class ကို domain package ထဲ create လုပ်ပြီးရေးပါ။

```java
package com.packt.demo.domain;

import org.springframework.data.repository.CrudRepository;

public interface CarRepository extends CrudRepository<Car,Long> {

}
```

အခုဆိုရင် ကျွန်တော်တို့ CarRepository  ကနေ Spring Data JPA က ပေးတဲ့ အောက်ပါ method တွေကို သုံးနိုင်ပြီဖြစ်ပါတယ်။

| Method | Description |
| -----------  | ----------- |
| long count() | entity items အရေအတွက်|
| Iterable\<T\> findAll()| item တွေအကုန်ရှာဖို့|
| Optional\<T\> findById(ID Id) | id နဲ့ item ကို ရှာဖို့|
| void delete(T entity) | entity ကို ဖျက်ဖို့ |
| void deleteAll() | repository ထဲမှာ ရှိတဲ့ entity items တွေ အကုန်ဖျက်ဖို့|
| \<S extends T\> save(S entity) | entity တစ်ခု save လုပ်ဖို့|



ပြီးပြီဆိုရင် database ထဲကို data အချို့ ဒီ repository ကို သုံးပြီးထည့်ကြည့်ပါ့မယ်။

Spring Boot ရဲ့ CommandLineRunner ဆိုတဲ့ interface ကိုသုံးပြီး Spring Boot Application မစမှီ database ထဲကို data တွေထည့်ကြည့်ကြမယ်။

```java
package com.packt.demo;


import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
	
	@Bean
	CommandLineRunner runner() {
		return args ->{
			// Place your code here
		};
	}
}
```

ဒီနောက်မှာတော့ ကျွန်တော်တို့ create လုပ်ခဲ့တဲ့ CarRepository ကို main class ထဲကို inject လုပ်ပြီး ခေါ်သုံးလို့ရနေပါပြီ။ 

inject လုပ်ချင်ရင် @Autowired ဆိုတဲ့ annotation ကို သုံးပြီး inject လုပ်လို့ရပါတယ်။ 

ဒီနေရာမှာ bean ရဲ့ အကြောင်းကို နဲနဲပြောပြချင်ပါတယ်။ Bean တွေဟာ Application စ run တဲ့ အချိန်ကစပြီး တကြိမ်ပဲ create လုပ်ပါတယ်။ 

သူတို့ကို ခေါ်သုံးချင်ရင် ခေါ်သုံးမယ့် class မှာ inject လုပ်ပြီး ခေါ်သုံးရုံပါပဲ။

ဥပမာ new CarRepository() လို့ မခေါ်သုံးပါဘူး။ @Autowired annotation နဲ့ inject လုပ်ပြီး ခေါ်သုံးတာပါ။ ဒါကို dependency injection လုပ်တယ်လို့ ခေါ်ပါတယ်။

```java
package com.packt.demo;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import com.packt.demo.domain.Car;
import com.packt.demo.domain.CarRepository;

@SpringBootApplication
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
	
	@Autowired
	CarRepository repository;
	
	@Bean
	CommandLineRunner runner() {
		return args ->{
			// Place your code here
			repository.save(new Car("Ford", "Mustang", "Red",
					"ADF-1121", 2017, 59000));
			repository.save(new Car("Nissan", "Leaf", "White",
					"SSJ-3002", 2014, 29000));
			repository.save(new Car("Toyota", "Prius", "Silver",
					"KKO-0212", 2018, 39000));
		};
	}
}
```

DemoApplication.java ကို Run As -> Java Application နဲ့ run ပြီး http://localhost:8080/h2-console ကို သွားကြည့်ရအောင်။ ခုနက save လုပ်လိုက်တဲ့ data တွေ ဝင်နေပြီဆိုတာတွေ့ပါလိမ့်မယ်။


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i1bp9an7ko9dl9ztdr9s.png)