[Spring] Spring JDBC(4): SimpleJdbcInsert로 DB에 데이터를 추가해보자!

2023. 4. 22. 10:00· Spring
반응형
 

💋 SimpleJdbcInsert이란?

 

  • 스프링 프레임워크에서 제공하는 JDBC 확장 클래스 중 하나
  • JDBC로 SQL 쿼리를 실행하는 것보다 더 쉽고 간편하게 DB에 데이터를 '추가'하도록 도와준다.

 

💋 SimpleJdbcInsert를 사용해보자!

 

객체를 생성하고, 기능을 사용해서 DB에 데이터를 추가해보자!

 

 

✔ SimpleJdbcInsert 객체 생성해보자!

 

 

  1. 기본 생성자를 사용

 

SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(dataSource);

 

  1. JdbcTemplate 객체를 생성할 때 함께 생성

 

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(jdbcTemplate);

 

  1. SimpleJdbcInsertBuilder 클래스를 사용하여 생성

 

SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(dataSource)
        .withTableName("my_table")
        .usingColumns("column1", "column2", "column3")
        .usingGeneratedKeyColumns("id");

 

SimpleJdbcInsertBuilder 클래스는 SimpleJdbcInsert 객체를 생성하기 위한 빌더 클래스이다.
빌더 클래스의 각 메서드에 대해서 알아보자!

 

  • withTableName(): 추가할 테이블의 이름을 설정
  • usingColumns(): 추가할 열의 이름을 설정
  • usingGeneratedKeyColumns(): 자동 생성되는 열의 이름을 설정, AUTO_INCREMENT되는 열의 이름을 작성하면 됨!
    이 메서드를 사용하지 않으면 자동 증가 컬럼의 값을 받아올 수 없다.

 

세 번째 방법은 빌더 패턴을 사용하여 객체를 생성하기 때문에, 위 예시 코드에서 처럼 체인 메서드 호출 방식으로 여러 메서드를 연속해서 호출할 수 있다.

 

이렇게 성공적으로 객체를 생성했다. 그 다음은?

 

 

✔ SimpleJdbcInsert 객체를 사용해 DB에 데이터를 추가해보자!

 

  1. Map을 만들어서 데이터 추가하기: execute(Map<String, Object> parameters)

 

Map<String, Object> parameters = new HashMap<>();
parameters.put("column1", "value1");
parameters.put("column2", "value2");
parameters.put("column3", "value3");
Number id = simpleJdbcInsert.executeAndReturnKey(parameters);

 

parameters 맵 객체에 열의 이름과 그 열에 넣을 값을 설정한 후, executeAndReturnKey() 메서드를 호출한다.

 

  • execute(): DB에 데이터를 추가
  • executeAndReturnKey(): DB에 데이터를 추가 + 자동 생성된 key의 값을 반환 (AUTO_INCREMENT 열을 가져올 수 있음)

 

    /**
     * Map + insertActor.executeAndReturnKey id를 포함한 Customer 객체를 반환하세요
     */
    public Customer insertWithMap(Customer customer) {
        final String firstName = customer.getFirstName();
        final String lastName = customer.getLastName();
        final Map<String, String> parameters = Map.of(
                "first_name", firstName,
                "last_name", lastName);
        final int id = simpleJdbcInsert.executeAndReturnKey(parameters).intValue();
        return new Customer(id, firstName, lastName);
    }

 

  1. execute(SqlParameterSource parameterSource)

 

MyData myData = new MyData();
myData.setColumn1("value1");
myData.setColumn2("value2");
myData.setColumn3("value3");
SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(myData);
Number id = simpleJdbcInsert.executeAndReturnKey(parameterSource);

 

MyData 클래스를 생성한 후에 setter를 통해서 각 객체의 값을 설정한다.


이후에 BeanPropertySqlParameterSource 클래스를 사용하여 SqlParameterSource 객체를 생성한다.

이 글의 BeanPropertySqlParameterSource에 대한 내용을 보면 이해가 쉬울 것 같다!

 

이 ParameterSource를 executeAndReturnKey() 메서드의 파라미터로 함께 보내면, DB에 각 열에 맞게 저장이 되고, 자동 생성된 키 값을 받아올 수 있다.

 

예시 코드를 통해서 알아보자!

 

    public Customer insertWithBeanPropertySqlParameterSource(Customer customer) {
        final BeanPropertySqlParameterSource parameters = new BeanPropertySqlParameterSource(customer);
        final int id = simpleJdbcInsert.executeAndReturnKey(parameters).intValue();
        return new Customer(id, customer.getFirstName(), customer.getLastName());
    }

 

흠.. SimpleJdbcInsert를 만들려면 DataSource가 필요해 보인다.

 

DataSource는 뭘까...? 그건 다음 포스팅에서 공부할 예정!

반응형
저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

[Spring] Spring MVC(5): Configuration (View Controller, View Resolver)  (2) 2023.04.24
[Spring] 같은 인터페이스를 구현한 빈을 구분하여 의존성 주입하는 방법: @Qualifier, @Primary, @Resource  (2) 2023.04.23
[Spring] 레이어드 아키텍처(Layered Architecture): 독립적으로 계층을 설계해보자!  (0) 2023.04.21
[Spring] Spring JDBC(3): NamedParameterJdbcTemplate를 사용해보자! SqlParameterSource, MapSqlParameterSource, BeanPropertySqlParameterSource  (0) 2023.04.21
[Spring] Spring JDBC(2): JdbcTemplate으로 Query와 Update을 해보자! (queryForObject, query, update, PreparedStatementCreator, KeyHolder)  (0) 2023.04.20
'Spring' 카테고리의 다른 글
  • [Spring] Spring MVC(5): Configuration (View Controller, View Resolver)
  • [Spring] 같은 인터페이스를 구현한 빈을 구분하여 의존성 주입하는 방법: @Qualifier, @Primary, @Resource
  • [Spring] 레이어드 아키텍처(Layered Architecture): 독립적으로 계층을 설계해보자!
  • [Spring] Spring JDBC(3): NamedParameterJdbcTemplate를 사용해보자! SqlParameterSource, MapSqlParameterSource, BeanPropertySqlParameterSource
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • 람다
  • 우테코5기
  • 함수형프로그래밍
  • TDD
  • OOP
  • 상속과조합
  • 예외
  • 스트림
  • 우아한테크코스5기
  • 조합
  • 우테코
  • 컴포지션
  • Stream
  • 람다와스트림
  • Composition
  • 우아한테크코스
  • Java
  • lamda
  • 레벨로그
  • 상속
hELLO · Designed By 정상우.v4.2.0
깃짱
[Spring] Spring JDBC(4): SimpleJdbcInsert로 DB에 데이터를 추가해보자!
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.