spring, springboot

게시판이 여러 이미지를 가지고 있을 때,JPA

campanula 2023. 9. 13. 10:53

이미지는 게시판에서만 쓸때 이미지 service를 따로 만들 필요 없이 imageVO와 ImageDao, Image.xml만 만듦.

게시판은 이미지를 가지고 있다.

public class multipleBoardVO extends CommonVO{

 

private List<ImageVO> images;

 

https://start.spring.io/

로 외부에서 프로젝트를 만들 수 있다.

 

@EnableAutoconfiguration: 스프링 부트 자동 구성을 활성화. 

@ComponectScan: 스프링 부트 컴포넌트 검색으로 애플리케이션의 모든 컴포넌트를 찾음.

@Configuration: 빈 정의의 원본으로 쓸 수 있는 클래스를 정의.

 

 

ORM, JPA,하이버네이트

ORM: 데이터를 객체지향 패러다임으로 조작하고 데이터를 검색하는 기술.

데이터 베이스 구조보다는 객체지향 개념에 기반을 두고 있어 개발 속도를 높이고 소스코드의 양이 줄어든다.

ORM을 사요하면 데이터베이스로부터 거의 독립적인 코드 작성이 가능하며 사용하는 DBMS에 따라 조금씩 달라지는 SQL문에 관해 개발자가 걱정할 필요가 없다.

 

 

JPA: 자바 개발자를 위한 객체-관계형 매핑을 제공. JPA엔티티는 데이터베이스 테이블 구조를 나타내는 자바 클래스. 엔티티 클래스의 필드는 데이터 베이스 테이블의 열을 나타낸다.

 

하이버네이트: 가장인기 있는 JPA구현체이고 스프링부트에서 기본 구현체로 활용된다. 

 

엔티티 클래스 만들기

엔티티 클래스: JPA의 @Entity 어노테이션을 사용하는 자바클래스. 엔티티 클래스는 표준 자바 빈의 명명 규칙을 따르며 적절한 getter와 setter를 가진다. 클래스 필드의 가시성은 private로 설정된다.

JPA: 애플리케이션이 초기화 될 때 클래스 이름으로 데이터베이스 테이블을 만든다. 데이터베이스 테이블에 다른 이름을 지정하려면 엔티티 클래스에서 @Table어노테이션을 이용하면 된다. (클래스 이름이 테이블명이 된다.)

 

메서드가 한 항목만 반환할 때는 T 대신 Optional<T>를 반환. 

Optional: 값을 포함하거나 포함하지 않은 단일 값 컨테이너. 값이 있으면 isPresent()메서드가 true를 반환하고 없으면 false를 반환.값이 있으면 get()메서드로 값을 구할 수 있다.

 

스프링 데이터 리포지터리에 쿼리를 정의할 수 있다. 쿼리는 접두사(findBy)로 시작해야하고 그 다음에 쿼리에 이용할 엔티티 클래스 필드가 나와야한다. like가 아니라 일치하는 값.

findByBrand, findByColor, findByYear