[Spring JDBC] NamedParameterJdbcTemplate (4)
전형 적 인 JDBC 용법 에서 SQL 인 자 는 자리 표시 자 를 사용 합 니까?에서포 지 셔 닝 매개 변수 문 제 는 매개 변수의 순서 가 바 뀌 면 매개 변수 바 인 딩 을 바 꿔 야 한 다 는 점 이다.Spring JDBC 프레임 워 크 에서 SQL 인 자 를 연결 하 는 또 다른 선택 은 구명 인자 (named parameter) 를 사용 하 는 것 입 니 다.
서명 매개 변수: SQL 은 위치 에 따라 지정 하 는 것 이 아니 라 이름 (콜론 으로 시작) 에 따라 지정 합 니 다. 서명 매개 변 수 는 유지 하기 쉽 고 가 독성 도 향상 되 었 습 니 다.서명 파 라미 터 는 프레임 클래스 가 실 행 될 때 자리 차지 문자 로 대체 합 니 다.
서명 인 자 는 NamedParameterJdbcTemplate 에서 만 지 원 됩 니 다.
NamedParameterJdbcTemplate 클래스 는 JdbcTemplate 클래스 를 확장 하여 모든 jdbcTemplate 방법 을 사용 할 수 있 습 니 다.
NamedParameterJdbcTemplate 는 주로 다음 과 같은 세 가지 방법 을 제공 합 니 다. execute 방법, query 및 query ForXXX 방법, update 및 batchUpdate 방법 입 니 다.
NamedParameterJdbcTemplate 는 DataSource 나 JdbcTemplate 대상 을 구조 기 매개 변수 로 초기 화 할 수 있 습 니 다.
2. 상용 API 전송 매개 변수 유형 소개
NamedParameterJdbcTemplate 클래스 는 이름 매개 변수 설정 값 으로 자바 util. Map, RowMapper, SqlParameterSource 두 가지 방식 이 있 습 니 다.
1. Map paramMap
바로 hash 표 입 니 다. 좋 은 점 은 매개 변수 이름 에 따라 파 람 맵. put ("sqlparamName", value) 를 전달 할 수 있 습 니 다.
2. RowMapper rowMapper
이 인 터 페 이 스 는 sql 조회 결과 와 대상 간 의 전환 을 실현 하기 위해 스스로 실현 할 수 있 고 시스템 으로 실현 할 수 있 으 며 주로 다음 과 같은 유형 을 실현 합 니 다.
3. SqlParameterSource
그 역할 은 Map 과 마찬가지 로 sql 의 조건 매개 변수 에 값 을 부여 하 는 것 입 니 다. 기본 값 은 다음 과 같 습 니 다.
//BeanPropertySqlParameterSource
SqlParameterSource sps = new BeanPropertySqlParameterSource(javaBean);
//MapSqlParameterSource
SqlParameterSource sps = new MapSqlParameterSource();
// key
sps.addValue("key",value);
API 소개
1. 조회
(1) 단일 열 데이터 되 돌리 기
public < T > T queryForObject(String sql, Map paramMap, Class requiredType)public < T > T queryForObject(String sql, SqlParameterSource paramSource, Class requiredType)
Integer count = template.queryForObject("select count(*) from student", new HashMap<>(), Integer.class);
String name = template.queryForObject( "select name from student where home_address limit 1 ", EmptySqlParameterSource.INSTANCE, String.class);
(2) 단일 열 데 이 터 를 되 돌려 줍 니 다.
public < T> List< T> queryForList(String sql, Map paramMap, Class< T > elementType)public < T> List< T> queryForList(String sql, SqlParameterSource paramSource, Class< T> elementType)
List< String> namelist = template.queryForList("select name from student", new HashMap<>(), String.class);
(3) 단일 줄 데이터 되 돌리 기
public < T> T queryForObject(String sql, Map< String, ?> paramMap, RowMapper< T>rowMapper)public < T> T queryForObject(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)
Student stu = template.queryForObject(
"select * from student limit 1", new HashMap<>(), new BeanPropertyRowMapper(Student.class));
//BeanPropertyRowMapper
//
메모: 이 두 API 도 싱글 ColumnRowMapper 를 사용 하여 단일 열 데 이 터 를 되 돌 릴 수 있 습 니 다.
String name = template.queryForObject(
"select name from student limit 1", EmptySqlParameterSource.INSTANCE, new SingleColumnRowMapper<>(String.class));
(4) 맵 형식의 단일 줄 데 이 터 를 되 돌려 줍 니 다.
public Map< String, Object> queryForMap(String sql, Map< String, ?> paramMap)public Map< String, Object> queryForMap(String sql, SqlParameterSource paramSource)
Map< String, Object> studentMap = template.queryForMap("select * from student limit 1", new HashMap<>());
public < T> List< T> query(String sql, Map< String, ?> paramMap, RowMapper< T> rowMapper)
public < T> List< T> query(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)
public < T> List< T> query(String sql, RowMapper< T> rowMapper)
(5) 다 중 줄 데이터 되 돌리 기
public < T> List< T> query(String sql, Map< String, ?> paramMap, RowMapper< T> rowMapper)public < T> List< T> query(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)public < T> List< T> query(String sql, RowMapper< T> rowMapper)
List< Student> studentList = template.query(
"select * from student",
new BeanPropertyRowMapper<>(Student.class)
);
마찬가지 로 싱글 ColumnRowMapper 를 사용 하여 단일 줄 목록 List < String >, List < Integer > 등 을 되 돌려 줄 수도 있 습 니 다.
(6) 다 중 줄 데이터 되 돌리 기 (Map)
public List< Map< String, Object>> queryForList(String sql, Map< String, ?> paramMap)public List< Map< String, Object>> queryForList(String sql, SqlParameterSource paramSource)
List
2. 데이터 삽입 / 수정 / 삭제, updateXXX 방법 사용
(1) 맵 을 매개 변수 로 사용 하기
int update(String sql, Map paramMap)
Map paramMap = new HashMap<>();
paramMap.put("id", UUID.randomUUID().toString());
paramMap.put("name", " ");
paramMap.put("age", 33);
paramMap.put("homeAddress", " ");
paramMap.put("birthday", new Date());
template.update(
"insert into student(id,name,age,home_address,birthday) values (:id,:name,:age,:homeAddress,:birthday)",
paramMap
);
(2) SqlParameterSource 를 매개 변수 로 사용 합 니 다.
int update(String sql, SqlParameterSource paramSource)
// BeanPropertySqlParameterSource
StudentDTO dto=new StudentDTO();// DTO
dto.setId(UUID.randomUUID().toString());
dto.setName(" ");
dto.setHomeAddress(" ");
//------------------------------
template.update("insert into student(id,name,home_address) values (:id,:name,:homeAddress)",
new BeanPropertySqlParameterSource(dto));
// MapSqlParameterSource
MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource()
.addValue("id", UUID.randomUUID().toString())
.addValue("name", " ")
.addValue("homeAddress", " ");
template.update("insert into student(id,name,home_address) values
(:id,:name,:homeAddress)",mapSqlParameterSource);
총화
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.