implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'


Intellij를 사용한다면 dependencies 옆에 생기는 Edit Starters...를 눌러 처음 프로젝트 생성 할 때 처럼 검색을 통해 간편히 추가도 가능하다
application.properties에 DB, JPA 관련 설정 추가
# mariaDB 설정
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://[IP주소]:[포트번호]/[데이터베이스 명]
spring.datasource.username=[사용자 이름]
spring.datasource.password=[비밀번호]
# JPA 로깅 설정
logging.level.org.hibernate.SQL=DEBUG
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.orm.jdbc.bind=TRACE
logging.level.org.hibernate.SQL=DEBUG
-> 디버그 레벨로 쿼리 출력
spring.jpa.properties.hibernate.format_sql=true
-> 쿼리 줄바꿈하기 이 설정이 없으면 한줄로 나옴
logging.level.org.hibernate.orm.jdbc.bind=TRACE
-> 매게변수 값 보여 주기
DB의 테이블과 매칭시킬 Entity 클래스 만들기
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
@Entity
@Table(name = "article")
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column//(name = "id")
private Long id;
@Column//(name = "title")
private String title;
@Column//(name = "content")
private String content;
}
@AllArgsConstructor부터 ~ @Setter까지의 어노테이션은 코드작성의 편의성을 도와주는 lombok관련 어노테이션
@Entity는 JPA가 해당 클래스를 관리하여 DB의 테이블과 매칭시켜주게 한다
@Table은 Entity와 매핑할 테이블을 지정 name 속성으로 테이블 이름 입력
@Column은 객체 필드를 테이블의 컬럼과 매칭시켜줌
@Id는 해당 필드가 기본키(PrimaryKey)임을 나타냄
@GeneratedValue는 기본키의 기본값 생성 전략을 DB에 위임하겠다는 뜻으로 DB의 종류마다 다르게 strategy 속성 값을 지정해주어야함
-> 예로 MariaDB, MySQL등은 IDENTITY를 사용
-> AUTO를 사용하면 DB에 맞게 자동으로 바뀐다던데 해보니 에러가 뜬다 좀더 알아봐야 할 듯
SPRING DATA JPA는 DB조작을 위한 메서드 들을 인터페이스로 제공해줌
인터페이스의 종류도 다양한데 JpaRepository 인터페이스가 대부분 상속받고 있기 때문에 일단 JpaRepository를 사용하면 대부분의 메서드를 사용이 가능할 듯 하다
import org.springframework.data.jpa.repository.JpaRepository;
public interface ArticleRepository extends JpaRepository<Article, Long> {
}
상속받을때 JpaRepository<Entity클래스, id필드(기본키)타입>과 같이 작성해주면 된다
기존 메서드들을 커스텀하고 싶으면 오버라이드해서 재정의 하면 된다
@Slf4j
@RestController
public class ArticleApiController {
@Autowired
private ArticleRepository articleRepository;
// GET
@GetMapping("/api/articles")
public List<Article> index() {
return articleRepository.findAll();
}
}
@RestController : 조회 결과를 http통신을 통해 JSON으로 간단하게 확인해보기 위해 RestController를 사용
@Autowired를 통해 JpaRepository를 상속받은 인터페이스를 가져옴
articleRepository.findAll()을 사용해 테이블의 모든 데이터 조회한 값을 리턴시켜준다

-> 실제 테이블 데이터
[
{
"id": 1,
"title": "sdfsdf",
"content": "222222221"
},
{
"id": 2,
"title": "222222",
"content": "ㅇㄴㅇ솟ㄹ온ㄹㅇ송ㄴㅇ고"
},
{
"id": 3,
"title": "abcdef",
"content": "ddd"
},
{
"id": 4,
"title": "ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ",
"content": "123456"
},
{
"id": 5,
"title": "ddd",
"content": "ddd"
},
{
"id": 6,
"title": "sfssffse",
"content": "eesfesfsefe"
},
{
"id": 7,
"title": "ffff",
"content": "fff"
}
]
->Response Body 응답 결과 JSON 확인