방언 설정 = 어떤 DBMS를 사용하는지 알려주는 방법
ResultSet resultSet = statement.executeQuery("select * from users");
과 같이 입력하면 "select * from users"
에 노란 박스가 생기고 alt+enter
를 눌러보면 다음과 같이 뜬다.
Change dialect to...
를 선택!
Project SQL Dialect를 MySQL로 바꿔주면, statement.executeQuery()
나 statement.executeUpdate()
의 인자로 SQL문을 쓸 때 자동완성을 해준다!
(+) Settings - Languages & Frameworks - SQL Dialects에서도 설정 가능하다
Dialect 방언에 대해 알아보기전 기본 SQL을 이해 해야 합니다.
SQL은 표준 ANCI SQL이 있고 DBMS Vendor(공급업체)인 MS-SQL, Oracle, My-SQL, Postgre SQL에서 제공하는 SQL이 존재합니다. MS-SQL은 T-SQL, Oracle은 PL/SQL이 대표적입니다.
ANSI SQL은 모든 DBMS에서 공통적으로 사용이 가능한 표준 SQL이지만 DBMS에서 만든 SQL은 자신들만의 독자적인 기능을 추가 하기 위해 만든 것으로 사용하는 DBMS에서만 사용이 가능합니다.
이해를 돕기 위해 예를 들면 MYSQL에서는 ID 값을 증가 시키기 위해 Auto Increment를 사용할 수 있지만 Oracle에서는 이 기능을 제공하지 않고 Sequence를 사용하여 기능을 제공합니다. 동일한 기능을 제공하지만 서로 다르게 제공하는 것이죠. 이는 같은 DBMS라도 버전에 따라 달라질 수 있습니다.
JPA는 기본적으로 어플리케이션에서 직접 JDBC 레벨의 SQL을 작성하지 않고 JPA가 직접 SQL을 작성하고 실행합니다. 그런데 DBMS 종류마다 사용하는 SQL이 다르다는 것을 우리는 앞에서 알아봤습니다. JPA가 해당 DBMS에 맞춰 SQL을 생성해야하는데 어떤 종류인지 알지 못한다면 문제가 발생 할 수 있습니다.
그래서 JPA에 어떤 DBMS를 사용하는 알려주는 방법이 방언을 설정하는 방법입니다. JPA에 Dialect를 설정할 수 있는 추상화 방언 클래스를 제공하고 설정된 방언으로 각 DBMS에 맞는 구현체를 제공합니다.
그래서 만약, MariaDB로 개발을 진행하면 Dialect에 MariaDB로 설정해 놓다가 어플리케이션을 설치할때 DBMS가 Oracle 이라면 Dialect을 Oralce로 설정하면 문제 없이 어플리케이션을 구동 할 수 있습니다.