스프링 데이터 생성시 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 |