본문 바로가기

Backend/Spring

Spring Boot JPA로 MariaDB 연동

DB는 이미 준비되어 있다는 가정하에 작성하였습니다.

연동하고 @Entity를 만들어서 실제로 사용할 수 있는지 테스트까지 해보겠습니다.

build.gradle

JPA를 사용하기 위해 org.springframework.boot:spring-boot-starter-data-jpa 디펜던시를 추가하겠습니다.

mariadb를 사용하겠습니다.

 

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' // MariaDB

 

다른 DB를 사용할 때에 참고해주세요.

 

runtimeOnly 'com.h2database:h2' // H2
runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc' // MSSQL
runtimeOnly 'mysql:mysql-connector-java' // MYSQL
runtimeOnly 'org.postgresql:postgresql' // PostgreSQL

pom.xml

Maven 을 쓰신다면 요렇게 될거구요.

 

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
	<groupId>org.mariadb.jdbc</groupId>
	<artifactId>mariadb-java-client</artifactId>
	<scope>runtime</scope>
</dependency>

 

application.yml

MariaDB 기준입니다.

 

spring:
  datasource:
    url: jdbc:mariadb://localhost:3306/tutorial
    driver-class-name: org.mariadb.jdbc.Driver
    username: root
    password: 1234
  jpa:
    open-in-view: false
    generate-ddl: true
    show-sql: true
    hibernate:
      ddl-auto: update

 

build.gradle에서 연결할 DB에 필요한 드라이버를 추가하고

application.yml의 driver-class-name에 드라이브 클래스를 찾아서 설정만 하면 끝입니다.

저는 지금 위에 공유드린 드라이버들 다 추가해서 다 나오네요.

 

 

연동은 이게 끝이에요...

너무 허무하니깐, 잘 동작하나 간단하게 코딩해보고 실행까지 해볼게요.

 


BoardEntity.java

저는 BoardEntity라고 명명하는 편인데 Entity 모델은 Board로 명명하는 경우가 더 많은 것 같습니다.

 

@Entity
@Table(name = "board")
@Getter
@Setter
public class BoardEntity implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long boardId;
	
	@Column(length = 100)
	private String title;

	@Column(length = 4000)
	private String contents;

}

 

BoardRepository.java

JpaRepository를 상속받고 제네릭 타입에 엔티티 클래스와 ID의 타입을 넣어줍니다.

우리는 이제 BoardRepository 인터페이스를 사용하여 이미 생성된 쿼리 API를 사용할 수 있습니다.

 

public interface BoardRepository extends JpaRepository<BoardEntity, Long> {

}

 

BoardService.java

JPA를 사용해서 테이블을 조회해볼게요.

게시판 ID를 파라미터로 받아서 board 테이블에 쿼리를 날려 row를 받아오는 로직이에요.

정보가 없으면 예외를 발생시켰어요.

 

@Service
public class BoardService {
	
	@Autowired
	private BoardRepository boardRepository;
	
	public BoardEntity getBoard(Long boardId) {
		return boardRepository.findById(boardId).orElseThrow(() -> 
        		new RestException(HttpStatus.NOT_FOUND, "Not found board"));
	}

}

 

boardRepository에서 사용할 수 있는 메소드(API)들을 확인할 수 있어요.

 

 

실행

엔티티에 선언한 필드대로 테이블이 생성된 것을 확인할 수 있습니다.