You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SimpleJdbcInsert : 직접 SQL 쿼리를 작성할 필요 없이 데이터 삽입 간소화, 자동 생성된 키를 간단히 반환받아 처리 가능
NamedParameterJdbcTemplate : 이름 기반 SQL 파라미터 사용 가독성 및 유지보수성 향상, 매핑 오류 줄이고 코드 명확성 높임
this.jdbcInsert = new SimpleJdbcInsert(dataSource) : 생성자를 보면 의존관계 주입은 dataSource 받고 내부에서 SimpleJdbcInsert
생성해 가짐, 스프링에서는 JdbcTemplate 관련 기능 사용할 때 관례상 많이 씀
JdbcTemplate 기능 정리
JdbcTemplate : 순서 기반 파라미터 바인딩 지원
NamedParameterJdbcTemplate : 이름 기반 파라미터 바인딩 지원
SimpleJdbcInsert : INSERT SQL을 편리하게 사용
SimpleJdbcCall : 스토어드 프로시저를 편리하게 호출
/**
/**
* 단건 조회-숫자 조회
* 하나의 로우를 조회할 때는 queryForObject() 사용, 단순 데이터 하나라면 타입을 Integer.class, String class 지정
* /
int rowCount = jdbcTemplate.queryForObject("select count() from t_actor",
Integer.class);
/**
* 단건 조회-숫자 조회, 숫자 하나와 파라미터 바인딩
* */
int countOfActorsNamedJoe = jdbcTemplate.queryForObject(
"select count(*) from t_actor where first_name = ?", Integer.class, "Joe");
/**
* 단건 조회-문자 조회, 문자 하나와 파라미터 바인딩
* */
String lastName = jdbcTemplate.queryForObject(
"select last_name from t_actor where id = ?",
String.class, 1212L);
/**
* 단건 조회-객체 조회, 결과 객체 매핑 위해 RowMapper 사용, 람다 사용
* */
Actor actor = jdbcTemplate.queryForObject(
"select first_name, last_name from t_actor where id = ?",
(resultSet, rowNum) -> {
Actor newActor = new Actor();
newActor.setFirstName(resultSet.getString("first_name"));
newActor.setLastName(resultSet.getString("last_name"));
return newActor;
}, 1212L);
/**
* 목록 조회 - 객체
* 여러 로우를 조회할 때 query()사용하면 됨, 결과 리스트 반환
* 결과를 객체로 매핑해야 하므로 RowMapper 사용해야 함, 여기서 람다 사용
* */
List<Actor> actors = jdbcTemplate.query(
"select first_name, last_name from t_actor",
(resultSet, rowNum) -> {
Actor actor = new Actor();
actor.setFirstName(resultSet.getStrgin("first_name"));
actor.setLastName(resultSet.getStrgin("last_name"));
return actor;
}
);
/** * 목록 조회 - 객체 * 여러 로우를 조회할 때 query() 사용하면 됨, 결과 리스트 반환 * 여기서 RowMapper 분리, 이렇게 하면 여러 곳에서 재사용 가능 * */publicList<Actor> findAllActors(){
returnthis.jdbcTemplate.query("select first_name, last_name from t_actor", actorRowMapper);
}
/** * 변경 (INSERT, UPDATE, DELETE) * 데이터를 변경할 때는 jdbcTemplate.update() 사용하면 됨 * 참고로 int 반환 값을 반환하는데, SQL 실행 결과에 영향받은 로우 수 반환 * *///등록jdbcTemplate.update(
"insert into t_actor (first_name, last_name) vlaues (?, ?)",
"Leonor", "Watling");
//수정jdbcTemplate.update(
"update t_actor set last_name = ? where id = ?",
"Banjo", 5276L);
//삭제jdbcTemplate.update(
"delete from t_actor where id =?",
Long.valueOf(actorId));
}
임의의 SQL을 실행할 때는 execute()를 사용, 테이블을 생성하는 DDL에 사용할 수도 있음
ex) jdbcTemplate.execute("create table mytable (id integer, name varchar(100))");
실무에서 가장 간단하고 실용적인 방법으로 SQL 사용하려면 JdbcTemplate 사용하면 됨
JPA와 같은 ORM 기술을 사용하면 동시에 SQL을 직접 작성해야 할 때가 있는데, 그때도 JdbcTemplate 함께 사용
최대 단점은 동적 쿼리 문제 해결 못 함 + 자바 코드로 작성해 SQL 라인이 코드를 넘어갈 때 마다 문자 더하기 해줘야 함
번외
select item_name 의 경우 setItem_name()이라는 메서드가 없어 힘듬, 이런 경우 select item_name as itemName 카멜 표기법 쓰면 됨
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Jdbc Template
statement, resultset 종료, 트랜잭션 다루기 위한 커넥션 동기화, 예외 발생시 스프링 예외 변환기 실행)
build.gradle에 추가해야 함

** JdbcTemplateItemRepositoryV1 **
this.template = new JdbcTemplate(dataSource)
이름 지정 바인딩
JdbcTemplate - SimpleJdbcInsert
생성해 가짐, 스프링에서는 JdbcTemplate 관련 기능 사용할 때 관례상 많이 씀
JdbcTemplate 기능 정리
/**
/**
* 단건 조회-숫자 조회
* 하나의 로우를 조회할 때는 queryForObject() 사용, 단순 데이터 하나라면 타입을 Integer.class, String class 지정
* /
int rowCount = jdbcTemplate.queryForObject("select count() from t_actor",
Integer.class);
번외
All reactions