JAVA

JDBC / Maven

Strickland 2024. 5. 4. 08:53

스프링 데이터 생성시 SPRING DATA JDBC 의존성 추가해야함 ! 

 

데이터 테이블 초기 설정을 위해 resources/schemas.sql 작성

create table course(
    id bigint not null ,
    name varchar(255) not null,
    author varchar(255) not null ,
    primary key (id)
);

 

application.properties를 다음과 같이 수정

spring.application.name=learn-jap-hibernate
spring.h2.console.enabled=true // 콘솔 접근 허용
spring.datasource.url=jdbc:h2:mem:testdb  // 접속 url 명시적으로 고정!

 

 

CourseRepository.java

package com.hyukjin.learnjaphibernate.course.jdbc;

import com.hyukjin.learnjaphibernate.course.Course;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class CourseRepository {

    @Autowired
    JdbcTemplate springJdbcTemplate;

    private static String INSERT_QUERY =
            """
                        insert into course(id, name, author)
                        values(?, ?, ?);
                    """;

    private static String DELETE_QUERY =
            """
                        delete from  course
                        where id = ?;
            """;

    private static String SELECT_QUERY =
            """
                        select *  from  course
                        where id = ?;
            """;
    public void insert(Course course) {
        springJdbcTemplate.update(INSERT_QUERY, course.getId(), course.getName(), course.getAuthor());
    }

    public void deleteById(Long id) {
        springJdbcTemplate.update(DELETE_QUERY, id);
    }

    public Course findById(Long id) {
        return
                springJdbcTemplate.queryForObject(
                SELECT_QUERY,
                new BeanPropertyRowMapper<>(Course.class),
                id);
    }

}

 

springJdbcTemplate.update -> 삽입, 수정, 삭제 쿼리에 사용 

springJdbcTemplate.queryForObject -> 1개의 row 를 조회할 때 사용 

조회된 데이터를 BeanPropertyRowMapper 가 Course 클래스에 매핑해줌!

그렇기에 Course 클래스에는 set 메서드가 존재해야 함!

 

QUERY에 ?에 위치기반 파라미터를 넘기는 방식으로 실행.

 

 

Course.java

package com.hyukjin.learnjaphibernate.course;

public class Course {
    private Long id;
    private String name;
    private String author;

    //constructor
    //getters
    //toString


    public Course() {
    }

    public Course(Long id, String name, String author) {
        this.id = id;
        this.name = name;
        this.author = author;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @Override
    public String toString() {
        return "Course{" +
                "id=" + id +
                ", nams='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}

 

 

애플리케이션 시작전에 실행하고 싶은 작업이 있다면?

아래의 코드를 보자

package com.hyukjin.learnjaphibernate.course.jdbc;

import com.hyukjin.learnjaphibernate.course.Course;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class CourseJdbcCommandLineRunner implements CommandLineRunner {

    @Autowired
    private CourseRepository repository;

    @Override
    public void run(String... args) throws Exception {
        repository.insert(new Course(1L, "Leanrn AWS NOW!", "HYUKJIN"));
        repository.insert(new Course(2L, "Leanrn AZURE NOW!", "HYUKJIN"));
        repository.insert(new Course(3L, "Leanrn DEVOPS NOW!", "HYUKJIN"));

        repository.deleteById(1L);

        System.out.println(repository.findById(2L));
        System.out.println(repository.findById(3L));

    }
}

CommandLineRunner 를 상속받은 CourseJdbcCommandLineRunner 를 생성.

run 함수를 overide 함으로써 애플리케이션 시작 전에 특정 초기화 작업 가능.

 

데이터작업이 정상적으로 진행되었는지 h2 console 을 확인해보자!

1행이삭제되었고, 2행과 3행만 남아있는것을 확인 할 수 있었다!

 

아이디2 번과 3번의 객체도 정상적으로 조회된다.

 

 

'JAVA' 카테고리의 다른 글

@SessionAttributes  (0) 2024.05.05
JSP 서빙/ MAVEN  (0) 2024.05.04
@ConfigurationProperties  (0) 2024.05.03
@Lazy  (0) 2024.05.01
HTTP 요청 메시지 - 단순 텍스트  (0) 2024.04.30