๋ง๋ค์ด ๋์ Entity๋ ํ ์ด๋ธ์ด๊ณ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Repository ๊ฐ ํ์ํ๋ค

์ธํฐํ์ด์ค ์์ฑ

package com.mysite.sbb;
import org.springframework.data.jpa.repository.JpaRepository;
public interface QuestionRepository extends JpaRepository<Question, Integer>{
}
QuestionRepository๋ ๋ฆฌํฌ์งํฐ๋ฆฌ๋ก ๋ง๋ค๊ธฐ ์ํด JpaRepository ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ค.
JpaRepository๋ฅผ ์์ํ ๋๋ ์ ๋ค๋ฆญ์ค ํ์ ์ผ๋ก <Question, Integer> ์ฒ๋ผ ๋ฆฌํฌ์งํฐ๋ฆฌ์ ๋์์ด ๋๋ ์ํฐํฐ์ ํ์ (Question)๊ณผ ํด๋น ์ํฐํฐ์ PK์ ์์ฑ ํ์ (Integer)์ ์ง์ ํด์ผ ํ๋ค. ์ด๊ฒ์ JpaRepository๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ท์น์ด๋ค.

์ ๋ ฅ ํ ์คํธํ๊ธฐ

package com.mysite.sbb;
import java.time.LocalDateTime;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SbbApplicationTests {
@Autowired
private QuestionRepository qRepo;
@Test
void contextLoads() {
Question q1 = new Question();
q1.setSubject("sbb๊ฐ ๋ฌด์์ธ๊ฐ์?");
q1.setContent("sbb์ ๋ํด์ ์๊ณ ์ถ์ต๋๋ค.");
q1.setCreateDate(LocalDateTime.now());
this.qRepo.save(q1);//์ฒซ ๋ฒ์งธ ์ง๋ฌธ ์ ์ฅ
Question q2 = new Question();
q2.setSubject("์คํ๋ง๋ถํธ ๋ชจ๋ธ ์ง๋ฌธ์
๋๋ค.");
q2.setContent("id๋ ์๋์ผ๋ก ์์ฑ๋๋์?");
q2.setCreateDate(LocalDateTime.now());
this.qRepo.save(q2);//๋ ๋ฒ์งธ ์ง๋ฌธ ์ ์ฅ
}
}

pom.xml

JUnitํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ ์ ์คํํ๊ธฐ ์ ์
sbb์๋ฒ๋ ์ผ๋จ ๋๊ณ ํด์ผ์ง ์ค๋ฅ์๋จ
์๋ฒ ์งํ์ค์ ํ ์คํธ๋ฅผ ํ๋ฉด ์ค๋ฅ๋จ

์ฑ๊ณต์ ์ผ๋ก ํ ์คํธ ์๋ฃ๋๋ฉด ์ผ์ชฝ ๋ฐ๊ฐ ์ด๋ก์์ผ๋ก ๋ณํ๊ณ ,
์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋นจ๊ฐ์์ผ๋ก ๋ณํ๋ฉด์ ์ฝ์์ ์ค๋ฅ ์ถ๋ ฅํจ
h2-console์์ select ๋ฌธ์ ์ฌ์ฉํด์ Question ํ ์ด๋ธ ์ ์ฒด ํ์ธํด ๋ณด๋ฉด
์ ์์ ์ผ๋ก ์ ์ฅ๋ ๊ฒ์ด ํ์ธ๋๋ค.

์กฐํ ํ ์คํธ
Questionํ ์ด๋ธ์ ์๋ ๋ด์ฉ์ ์กฐํํ๋ ํ ์คํธ๋ฅผ ํ๋ ค๊ณ ํ๋ค.

package com.mysite.sbb;
import java.time.LocalDateTime;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SbbApplicationTests {
@Autowired
private QuestionRepository qRepo;
@Test
void contextLoads() {
// ์กฐํ ํ
์คํธ
List<Question> all = this.qRepo.findAll();//๋ชจ๋ ์ง๋ฌธ์ ๋ค ๊ฐ์ ธ์ด
for (Question q : all) {
System.out.println(q.getSubject());
}
}
}

ID,๋ด์ฉ, ๋ ์ง๋ ์ถ๊ฐํด์ ํ ์คํธํด๋ด


๊ทธ๋ผ ํ๋๋ง ์ถ๋ ฅํ๊ณ ์ ํ๋ฉด?
id๋ก ์ฐพ๊ธฐ
Optional<Question> oq = this.qRepo.findById(1); //ํ๋๋ง ๊ฐ์ ธ์ฌ ๋?
if (oq.isPresent()) {
Question q = oq.get();// Question์ด ๋ฆฌํด
System.out.println(q.getSubject());

Optional์ด๋ผ๋ ํ์ ์ผ๋ก ๋ณ๊ฒฝ๋จ.
์ฐพ์์ ๋ ์์ด๋๊ฐ ์์ ๊ฒฝ์ฐ์ null๊ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋จ.
null๊ฐ์ผ ๊ฒฝ์ฐ์๋ null๋ก ์ฒ๋ฆฌํ๊ณ
null๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ง question์ผ๋ก ๋ฆฌํดํด์ค
isPresent : ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด true ๋ฐํ
if๋ฌธ์ผ๋ก oq์ ์์ ๋ด์ฉ์ด ์์ ๊ฒฝ์ฐ์๋
์ ๋ชฉ์ ๊ฐ์ ธ์ค๊ฒ๋ ์ฝ๋ ์์ฑ์ ํจ
๊ทธ๋ฆฌ๊ณ findById์ ๊ฐ์ด
findBySubject์ ๋ง๋ค์ด์ ์ฌ์ฉ๋ ๊ฐ๋ฅํจ

์ ๋ชฉ์ผ๋ก ๊ฒ์์ ํด์
//๋ด์ฉ์ผ๋ก ์กฐํํ ๋
Question q = this.qRepo.findBySubject("sbb๊ฐ ๋ฌด์์ธ๊ฐ์?");
System.out.println(q.getContent());
๋ด์ฉ์ ๊ฐ์ ธ์์ ์ถ๋ ฅํจ

ํ์ฌ ์ฝ์์ ์ด๋ค sql๋ฌธ์ ์ฌ์ฉํ์ฌ ํด๋น ๊ฒฐ๊ณผ๊ฐ ๋์๋์ง ๋ธ

์ด๋ฐ ๋ด์ฉ์ ๋ณด๊ธฐ๊ฐ ์ข ๋ถํธํ๋ฏ๋ก ๋ก๊ทธ์ ํฌ๋งท์ ๋ณ๊ฒฝํ๊ณ ์ ํจ


์๋์ ๋ด์ฉ์ ์ถ๊ฐํ์ฌ ํฌ๋งท์ ์ข ๋ ๋ณด๊ธฐ ์ฝ๊ฒ ์ถ๋ ฅํ๊ฒ ๋ง๋ ๋ค
spring.jpa.properties.hibernate.format_sql=true

๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด์ AND๋ฅผ ์ฌ์ฉํด์ ์กฐํ๋ ๊ฐ๋ฅํ๋ค
QuestionRepository์์ AND์กฐ๊ฑด์ ๊ฐ์ง findBySubjectAndContent ๋ฅผ ์ถ๊ฐํ๋ค.
package com.mysite.sbb;
import org.springframework.data.jpa.repository.JpaRepository;
public interface QuestionRepository extends JpaRepository<Question, Integer>{
Question findBySubject(String subject);
Question findBySubjectAndContent(String subject,String content);//์ ๋ชฉ๊ณผ ๋ด์ฉ์ด ๊ฐ์ ๋
}
SbbApplicationTests ๋ก ๋์์์ ์๋์ ๋ด์ฉ์ ์ถ๊ฐํจ
//์ ๋ชฉ๊ณผ ๋ด์ฉ์ผ๋ก ์กฐํํ ๋
Question q = this.qRepo.findBySubjectAndContent("sbb๊ฐ ๋ฌด์์ธ๊ฐ์?","sbb์ ๋ํด์ ์๊ณ ์ถ์ต๋๋ค.");
assertEquals(1, q.getId());// id๊ฐ 1์ด๋ฉด ๋ฐ์

ํฌ๋งท ๋ณ๊ฒฝ๋ ์ ์ ์ฉ๋๊ณ , AND๋ฌธ๋ ์ ์ ์ฉ๋๊ฒ ํ์ธ๋๋ค.

https://blog.naver.com/drv982/222920396333
์์ ,์ญ์ ํ ์คํธ
Optional<Question> oq = this.qRepo.findById(1); //ํ๋๋ง ๊ฐ์ ธ์ฌ ๋?
if (oq.isPresent()) {
Question q = oq.get();// Question์ด ๋ฆฌํด
q.setSubject("์์ ๋ ์ ๋ชฉ");
this.qRepo.save(q); //์์ (์
๋ฐ์ดํธ๋จ)
//save๋ฉ์๋ ์์ ์
๋ ฅ๊ฐ์ฒด๊ฐ id๊ฐ ์์ผ๋ฉด ์
๋ ฅ ์์ผ๋ฉด ์์

์ค์ ๋ก DB์ ์์ ๋๋์ง ํ์ธํ๊ธฐ
์๋ฒ ์คํ ํ DB์์ ๊ฒ์ํ๋ฉด
SUBJECT๊ฐ ์์ ๋ ์ ๋ชฉ์ผ๋ก ์ถ๋ ฅ๋จ์ ์ ์ ์๋ค.

์ญ์ ํ๊ธฐ ( id๋ก)
//์ญ์ ํ๊ธฐ
this.qRepo.deleteById(1); // ์์ด๋๋ก ์ญ์ ํ ๋

dbํ์ธํ๊ธฐ

๊ฐ์ฒด๋ฅผ ๋ฃ์ด์๋ ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค
//๊ฐ์ฒด๋ก ์ญ์ ํ๊ธฐ
Optional<Question> oq = this.qRepo.findById(1); //ํ๋๋ง ๊ฐ์ ธ์ฌ ๋?
if (oq.isPresent()) {
Question q = oq.get();// Question์ด ๋ฆฌํด
this.qRepo.delete(q); //์ญ์
'BACKEND > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํจํค์ง ๋๋ฉ์ธ ๋ณ ๋ถ๋ฆฌํ๊ธฐ (0) | 2023.11.08 |
|---|---|
| ๋ต๋ณ AnswerRepository ์์ฑ ๋ฐ ๋ฐ์ดํฐ ์ ์ฅ ,๊ฒ์ (0) | 2023.11.08 |
| JPA์ ๊ฐ๋ ๋ฐ H2๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ (0) | 2023.11.07 |
| ์คํ๋ง๋ถํธ ํ๋ก์ ํธ์ ๊ตฌ์กฐ, port๋ฒํธ ์ค์ ๋ฐ context-path ์ค์ (1) | 2023.11.07 |
| ์ค์ ์ถ๊ฐ +(lombok) (0) | 2023.11.07 |