프로젝트 생성 및 의존성 추가
Mysql과 연동하여 JPA를 사용할 것이므로 위와 같은 dependencties를 추가한다.
기존 프로젝트에서 MySql과 JPA를 추가하여 사용하고 싶다면 build.gradle에 다음 두 줄을 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java:8.0.32'
application.properties를 다음과 같이 작성한다.
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=0000
#만들어진 sql 보여줌
spring.jpa.properties.hibernate.show_sql=true
#sql 가독성 좋게 보여줌
spring.jpa.properties.hibernate.format_sql=true
#테이블이 없다면 생성하고, 있으면 업데이트한다.
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
username과 password는 내 데이터베이스의 id pw를 적으면 된다.
정보 은닉
만약 해당 내용이 git에 고스란히 올라가는 것이 꺼림직하다면, 해당 정보를 은닉해야하는데
나는 다음과 같은 방법을 선택했다.
spring.profiles.include = mysql
우선 기존 데이터 베이스 정보들을 삭제하고 위 한줄을 추가한다.
그다음 application-mysql.properties 파일을 생성하고, 데이터 베이스 정보들을 옮긴 뒤
git ignore에 다음 내용을 추가한다.
application-*
이렇게 하면 properties 내에서 데이터베이스 정보만 git에올리지 않고 로컬에 은닉할 수 있다.
엔티티 생성
이제 데이터베이스에 접근하기 위한 엔티티를 만들어주자. 엔티티란?
@Entity
@Table(name="User") // 미 사용시 클래스이름 == 테이블이름
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Id
@Column(length=128)
private String userId;
@Column(length=128)
private String user_name;
@Column(length=128)
private String country;
@Column(length=32)
private String tel;
@Column
private LocalDate birth;
}
예시로 UserEntity를 만들어보았다.
pk는 @id 어노테이셔이 붙은 키가 되고,
@GeneratedValue(strategy = GenerationType.IDENTITY)
pk에 다음과 같이 어노테이션을 붙이면 JPA가 pk의 값을 자동으로 생성해준다.
그리고 repository를 생성해주자.
@Repository
public interface UserRepository extends JpaRepository<User, String>{
User findByUserId(String userId);
}
위와 같이 repository 클래스를 만들고, 객체를 만들어 데이터베이스에 쿼리를 날릴 수 있다.
find, findall, save 등등 다양한 간단한 쿼리문들을 JPA가 대신 처리해준다.
굉장히 편리함..!
'♾️Language & Framework > 🌿Spring' 카테고리의 다른 글
[Spring] - JPA 칼럼명 카멜케이스 적용하기 (0) | 2023.11.23 |
---|---|
[Spring] - JPA DDL-Auto 사용 시 한글 설정 자동화 (0) | 2023.11.23 |
[Spring 기술 면접 대비] - 2. @Controller VS @RestController (1) | 2023.11.10 |
[Java / Spring] Lombok: variable not initialized in the default constructor (0) | 2023.11.10 |
[Spring 기술 면접 대비] - 1. IoC(Inversion of Control), 제어 역전이란? (Autowired를 쓰는 이유) (0) | 2023.11.07 |