먼저 SimpleJdbcInsert
말 그대로 insert에 관한건데, insert를 진짜 간단하게 하게끔 도와주는 것이다.
@Slf4j
@Repository
public class JdbcTemplateItemRepositoryV3 implements ItemRepository {
private final NamedParameterJdbcTemplate template;
private final SimpleJdbcInsert jdbcInsert;
public JdbcTemplateItemRepositoryV3(DataSource dataSource) {
this.template = new NamedParameterJdbcTemplate(dataSource); //커넥션을 얻어오고 그래야 되기 때문에 필요. 어떤 DB인지도 알아야 하고.
this.jdbcInsert = new SimpleJdbcInsert(dataSource)
.withTableName("item")
.usingGeneratedKeyColumns("id");
}
먼저 이거는,
SimpleJdbcInsert생성하고, 생성할 때 dataSource를 통해 메타데이터 및 connection을 획득할 수 있게끔 하기 위해 dataSource를 넣어주고,
테이블 이름은 뭔지
genertatedKey는 뭘 사용하는 지 넣어준다.
원래는
this.jdbcInsert = new SimpleJdbcInsert(dataSource)
.withTableName("item")
.usingGeneratedKeyColumns("id")
.usingColumns("item_name", "price", "quantity");
usingColumns 해서 어떤 컬럼들 쓰는지도 넣어줘야 하는데(아니면 내가 insert 할 때에 특정 열만에 값을 넣고 싶을 때 )
dataSource에 메타데이터 다 있어서 생략해도 된다.
@Override
public Item save(Item item) {
SqlParameterSource param = new BeanPropertySqlParameterSource(item);
Number key = jdbcInsert.executeAndReturnKey(param);
item.setId(key.longValue());
return item;
}
사용할 때는
저렇게 파라미터 바인딩은 해주고,
jdbcInsert.excuteAndReturnKey(param)
하면 알아서 jdbcInsert가 sql문도 짜주고 파라미터 바인딩도 해준다.
그리고 excuteAndReturnKey
직역 그대로 실행하고 key를 반환받는다.
근데 반환해주는 key는 Number타입인듯.
또, excute()로 하면 임의의 SQL을 실행할 수도 있다.
jdbcTemplate.execute("create table mytable(~~~~~~~~)")
등
그리고 뭐 스토어드 프로시저 라는 것도 사용할 수 있다고 한다.
스토어드 프로시저란 쿼리를 함수처럼 사용할 수 있는 명령? 함수의 집합? 같은거다.
사용해 보고 싶다면 SimpleJdbcCall을 찾아보면 된다.
'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글
13. 테스트용 DB와 서버용 DB 분리 (0) | 2023.10.09 |
---|---|
12. DB 접근 기술 테스트 하는 법 (0) | 2023.10.09 |
10. 이름지정 파라미터2 (0) | 2023.10.08 |
9. 이름지정 파라미터 (0) | 2023.10.08 |
8. 구현한 Jdbc로 갈아 끼우기. (0) | 2023.10.08 |