
@Entity@Table(name = "...")User -> user)DB는 무조건 스테이크
자바는 카멜 케이스가 표준이다.
DB예약어는 주의해야 한다.
USER, ORDER, GROUP 등은 데이터베이스의 예약어일 수 있다. 따라서 컬럼명이나 테이블명으로 사용하면 예기치 않은 오류가 발생할 수 있으므로 피하는것이 좋다. 부득이 한경우
@Table(name = "백틱order백틱") 로 백틱으로 감싸서 처리하라.
그렇다고 order_info 이런식으로 하지말라. 명시적인 하나의 단어로 하라. 만약 저렇게 하면 상위에 order 에 있다고 느껴진다. order가 존재하지도 않는데 order_info로 만들면 개발자들이 헷갈린다.
ORM에서만 단수형을 써라
users)users, orders처럼 복수형을 사용하는 것이 일반적이었습니다.user)User라는 엔티티 클래스(객체) 하나가 user라는 테이블 하나와 1:1로 매핑된다고 봅니다. 즉, 객체의 관점을 따라 단수형으로 이름을 일치시키는 것이 더 직관적이라는 것입니다.가끔가다 테이블을 ORM처럼 단수형으로 쓰는 회사도 있긴 함
is- / has- / can-)is~로 시작하는 네이밍은 자바빈 표준 명세에 따른 규칙으로, 여러 프레임워크(Lombok, Jackson 등)가 이를 자동으로 인지하여 가독성과 개발 편의성을 높여줍니다.if (user.isActive()) 처럼 코드가 자연스러운 영어 문장처럼 읽힙니다.is~: 상태를 나타낼 때 (e.g., isActive, isDeleted, isVisible)has~: 소유나 포함 여부를 나타낼 때 (e.g., hasProfileImage, hasCoupon)can~: 가능/권한 여부를 나타낼 때 (e.g., canPurchase, canComment)Yn쓰는 경우도 있다. 요새는 잘 안쓴다.
엔티티는 데이터를 사용하는게 아니다. 그냥 표현해 놓은 것 뿐.
클래스 기반의 데이터 set이다.
Entity를 기반으로 메소드를 정의해둔 것이다.
interface채로 entity들을 추상화해둘 수 있다.
즉, User Table(특정 테이블 전용) SQL명령어 모음집 이다.
@Repository를 붙여야만 한다.
@Service, @Repository는 스프링이 실행할때 인스턴스화 해서 갖고있다.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// 이건 인터페이스다. 인터페이스는 이 자체만으로는 실행 불가하고 '구현체가 필요하다.'
Optional<User> findByEmail(String email);
// 이건 구현체를 만들어주고 이 안에 쿼리가 들어가는 것이다.즉 뒷단에서 움직이는 것이고 우리가 하는건 구현체일뿐. 볼 수 없다. 빌드 클래스 파일 열어야할듯
}