본문 바로가기

Java/Springboot

[나만의 블로그] DB 연결

728x90

[나만의 블로그] DB 연결

 

🌵 ORM 

ORM 관계형 데이터 베이스의 한 종류로, 무결성 특징이 있다.
Object Relational Mapping
무결성 자체가 어렵게 느껴질 수 있다.
무결성, 하면 2단어를 떠올리면, 이해가 쉽다. 정확성, 일관성!
DB에 저장되는 데이터와 실제 데이터가 일치하는지
데이터가 일정하게 유지 되는지를 의미한다.

ORM은 SQL 쿼리를 자동으로 생성해주므로 직접 작성하지 않아도 된다.

userRepository.save(userDTO.toEntity());

위 코드를 실행하면 view - controller 상에서 전달받은 DTO를 Entity 로 변환해 user 테이블에 저장되지만, 실제 repository 코드인 아래를 보면 save 함수는 없다. 있는 함수는 getUserById와 modifiedUserById 뿐이다.

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> {
    @Query(value = "select * from user where user_email = :id", nativeQuery = true)
    UserEntity getUserById(@Param("id") String id);

    @Modifying
    @Query(value = "update user set user_name = :name where user_email = :id", nativeQuery = true)
    void modifiedUserById(@Param("name") String name, @Param("id") String id);
}


그렇기 때문에 SQL문을 사용하지 않으므로 코드의 가독성을 높이고 개발자의 편의성을 증대할 수 있다.
객체 <-> ORM <-> 관계형 데이터 베이스
데이터 베이스를 프로그래밍 언어의 객체 관점으로 바라볼 수 있어서 객체 지향 프로그래밍 언어를 이용해 프로그램을 개발할 때 편리하다.

하지만, 복잡한 프로젝트를 수행할 때는 ORM만으로 서비스를 구현하기 어렵다. 그리고 제대로 알고 사용하지 않을 경우, 개발자가 원하는 데이터를 추출해오지 못할 수 있다.

 

🌵 JPA

Java Persistence API
스프링부트에서 데이터 처리할 때 사용되는 ORM 기술 표준의 인터페이스 모음이다.

 

📜 build.gradle

dependencies {
	// db connection(mysql)
	implementation 'mysql:mysql-connector-java'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly("com.mysql:mysql-connector-java")
}

 

📜 application.properties

# jdbc driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/[DataBace이름]?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=[비밀번호]

# JPA
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true

sql이 실행될때마다 console에 보이게끔 설정했다.

데이터 베이스 이름을 studyspring만들어주었다. 

sql문으로 DB생성하는 문법은 다음과 같다.

CREATE DATABASE studyspring;

 

[ctrl] + Enter 로 sql문을 실행할 수 있다.

 

🌵 데이터베이스 연결 확인

📜 database .properties

spring.datasource.url=jdbc:mysql://localhost:3306/[DataBace이름]?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=[비밀번호]

연결 확인을 위해 필요한 정보만 database.properies에 모아뒀다.

 

📜 Test/DatabaseConfigTest.java

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.TestPropertySource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@TestPropertySource("classpath:database.properties") // Use the properties file
public class DatabaseConfigTest {

    @Autowired
    private DataSource dataSource;

    @Test
    public void testConnection() throws SQLException {
        try (Connection connection = dataSource.getConnection()) {
            System.out.println("DB Connection => " + connection);
        }
    }
}
 

 

'Java > Springboot' 카테고리의 다른 글

[나만의 블로그] spring 회원가입  (0) 2023.11.24
[나만의 블로그] 프로젝트 계획  (1) 2023.11.24