SQLファイルの解決ルール
複数フォルダの指定
sqlフォルダはクラスパスから参照することが出来れば複数指定することが出来ます。
src/test/resources,src/main/resourcesの順にクラスパスに指定されている場合
src
├─main
│ └─resources
│ └─sql
│ ├─department
│ │ ├─insert_department.sql
│ │ └─select_department.sql
│ └─employee
│ ├─insert_employee.sql
│ └─select_employee.sql
└─test
└─resources
└─sql
├─department
│ ├─update_department.sql
│ └─delete_department.sql
└─employee
├─update_employee.sql
└─select_employee.sqlWARNING
SQLファイルのパスが重複している場合、クラスパス上で先にあるフォルダのSQLファイルが使用されます。
上記のフォルダ構成の場合、src/main/resources/sql/employee/select_employee.sql と src/test/resources/sql/employee/select_employee.sql がともに employee/select_employee として解決されますが、クラスパスとしてsrc/test/resourcesが先に指定されているため、src/test/resources/sql/employee/select_employee.sqlが使用されます。
jarファイルの指定
SQLファイルはjarの中にリソースとして含めることもできます。
その場合、リソースのルート直下のsqlフォルダをルートフォルダとした相対パスでSQLファイルを指定することができます。 SQLファイルのルートフォルダ(初期値:sql)は変更することができます。
変更方法の詳細は SQLファイルルートフォルダの設定 を参照してください。
DB種類毎のファイルパス切り替え
Dialectを利用して、1つのSQL名に対してDB種類毎にファイルパスを切り替えることが出来ます。
この機能により、接続先のDB種類が複数ある場合に発生するSQL構文の差異を吸収することができます。
以下のようなファイル構成を例として説明します。
sql
├─employee
│ └─select_employee.sql -- Oracle, postgresql以外のDB用SQL
├─oracle
│ └─employee
│ └─select_employee.sql -- oracle DB用SQL
└─postgresql
└─employee
└─select_employee.sql -- postgresql DB用SQLSQL名としてemployee/select_employeeを指定した場合、
Oracle DBの場合はsql/oracle/employee/select_employee.sqlが読み込まれます。
同様にPostgresql DBの場合はsql/postgresql/employee/select_employee.sqlが読み込まれます。
DBに対するDialect用のフォルダがない場合は通常通りsql/employee/select_employee.sqlが読み込まれます。
DB毎のフォルダ名
| DB名 | フォルダ名 |
|---|---|
| H2 DB | h2 |
| Microsoft SQL Server | mssql |
| MySQL | mysql |
| Oracle | oracle |
| Postgresql | postgresql |
| その他 | default |
