- JDBC 위치 기반 파라미터 바인딩 ,
- 더 유연하고 명확한 이름 기반 파라미터 바인딩도 지원
이름 기준 파라미터(Named Parameters)
void findMemberByParamBinding() {
String usernameParam = "ipeac";
String jpql = "select m from Member m where m.name = :username";
em.createQuery(jpql, Member.class)
.setParameter("username", usernameParam)
.getResultList()
.forEach(System.out::println);
}
- :변수명 의 형식으로 파라미터 바인딩
- JPQL API는 대부분 메서드 체인 방식으로 설계되어있음.
위치 기준 파라미터 (Positional Parameters)
@Test
void findMemberByPositionalBinding() {
String jpql = "select m from Member m where m.name = ?1";
em.createQuery(jpql, Member.class)
.setParameter(1, "ipeac")
.getResultList()
.forEach(System.out::println);
}
- ?위치값 의 형식으로 파라미터 바인딩
- 위치 값은 0이 아니라 1부터 시작한다
위치 값보다 이름 기준으로 바인딩하는게 더 편함
JPQL 를 만약에 파라미터 바인딩을 하지 않는 경우
“select m from Member m where m.username = ‘” + usernameParam + “’”
- 보안성
- mybatis 의 경우 #{ } 를 사용시 파라미터가 ‘ ‘ 안에 바인딩되어 쿼리에 기입됩니다.
- 이는 SQL Injection 을 방지하기 위하여 설정하는 것이다.
- JPQL도 위와 같은 방식으로 기입하면 SQL Injection 을 당할 수 있다.
- mybatis 의 경우 #{ } 를 사용시 파라미터가 ‘ ‘ 안에 바인딩되어 쿼리에 기입됩니다.
- 성능
- 파라미터 바인딩 방식을 사용하여
- 파라미터의 값이 달라도 같은 쿼리로 인식하여
- JPA 는 JPQL 은 SQL 로 파싱한 결과를 재사용
- 파라미터의 값이 달라도 같은 쿼리로 인식하여
- 재사용으로 인하여 전체 성능이 향상됨.
- 파라미터 바인딩 방식을 사용하여
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] JPQL 소개 (0) | 2023.11.09 |
---|---|
[JPA] JPQL 의 기본 문법과 쿼리 API (0) | 2023.11.09 |
[JPA] 프로젝션 (0) | 2023.11.09 |
[JPA] 페이징 API (0) | 2023.11.09 |
[JPA] 집합 함수 (0) | 2023.11.09 |