2017-01-10 13 views
0

나는 지금까지 NamedParameterJdbcTemplate이 JdbcTemplate과 동일한 기능을 제공하는 것처럼 보였습니다. 게다가 명명 된 매개 변수를 사용할 수있게되었습니다.Spring 프레임 워크에서 NamedParameterJdbcTemplate을 통해 JdbcTemplate을 사용하면 어떤 이점이 있습니까?

그래서 NamedParameterJdbcTemplate을 항상 사용할 수 있다면 JdbcTemplate을 사용하는 것이 좋습니다. 처음에는 DAO 클래스에서 명명 된 매개 변수를 사용하지 않았지만 어떤 이유로 인해 그것들을 사용하면 전체 DAO 클래스를 조정할 필요가 없습니다.

두 번째 질문은 왜 처음에이 클래스를 만들었습니까? 명명 된 매개 변수 기능을 제공하는 JdbcTemplate을 하나만 가지는 것이 더 좋지 않습니까?

답변

0

업데이트 - 기본 응답은 JDBCTemplate이 지원할 수있는 방식과 작동 방식이 정확하지 않았습니다. 나는 지난 수년간 너무 많은 프레임 워크를 다루었 다 ... 더 정확한 버전은 다음과 같다.

일반적으로 JdbcTemplate 클래스를 사용해야하는 강력한 이유는 없을 것이다.

명명 된 매개 변수를 지원하는 데 약간의 오버 헤드가 있습니다. 이것은 일반적으로 JDBC에서 사용하기 위해 명명 된 매개 변수를 위치 매개 변수로 변환해야합니다. 매개 변수가 많으면 오버 헤드가 커질 수 있습니다. 매개 변수가 전혀 없다면 여전히 약간의 오버 헤드를 부과합니다 (문자열은 명명 된 매개 변수를 조사해야합니다). 그러나 대부분의 경우에는 그다지 중요하지 않습니다.

+0

JDBC (AFAIK)는 명명 된 매개 변수도 지원하지 않으며 와일드 카드/인덱싱 된 매개 변수 만 지원합니다. 스프링'NamedParameterJdbcTemplate'은 명명 된 매개 변수를 와일드 카드로 대체하고 그것을'String'으로 대체함으로써 수행합니다. 그래서'Collection'을 사용하고'in (: collection)'과 같은 것을 사용할 때. 그것은': collection'을'?'의 정확한 양으로 대체 할 것입니다. 따라서 NamedParameterJdbcTemplate을 사용하는 데 오버 헤드가 있으며 매개 변수의 수에 따라 중요 할 수도 있습니다. –

+0

당신이 말한 것을 기반으로 해답 주셔서 감사합니다. "명명 된 매개 변수를 지원하는 데 약간의 오버 헤드가 있습니다. 일반적으로 후드에서 준비된 문을 사용하는 것이 좋습니다. 정규 오래된 문" JdbcTemplate에서 인덱싱 된 매개 변수를 사용할 수 있다는 것을 알고 있습니다. 예를 들어,이'jdbcTemplate.queryForObject ("id =?", 새로운 Object [] {id}, String.class);'서클에서 이름을 선택하면', JdbcTemplate 후드 밑에서도? –

+0

다른 프레임 워크를 생각하고있었습니다. 너무 많은 언어와 환경에서 일하는 위험. 답변을 업데이트하는 중 ... –