# SqlManager

SqlManagerはSQLファイルを管理するクラスです。2つのクラスが提供されています。

クラス 説明
SqlManagerImpl java.ioを利用したファイルアクセスを行うSqlManagerクラス。
NioSqlManagerImpl java.nioを利用したファイルアクセスを行うSqlManagerクラス

クラスの特徴比較

特徴 SqlManagerImpl NioSqlManagerImpl 補足
SQLファイルルートフォルダ設定
SQLファイルエンコーディング設定
起動時のファイルキャッシュ NioSqlManagerImplはファイルパスのみキャッシュ
遅延ファイルキャッシュ ×
jarファイル中のSQL参照
zipファイル中のSQL参照 ×
カスタムファイルアクセス対応 × java.nio.fileパッケージを使用
ファイル変更検知 ×
DB種類毎のファイルパス切り替え ×

利用用途に応じてSqlManagerを選択してください。
SqlManagerクラスの切り替えはビルダーAPIで行うことが出来ます。指定しない場合の初期値はSqlManagerImplになります。

SqlConfig config = UroboroSQL.builder(...)
  // NioSqlManagerの指定
  .setSqlManager(new NioSqlManagerImpl(false)).build();
1
2
3

# SQLファイルルートフォルダの設定

uroboroSQLは初期設定ではクラスパス上にあるsqlフォルダ配下のSQLを読み込みます。
このSQLファイルルートフォルダは変更することができます。

SQLファイルルートフォルダの設定 (custom_sqlフォルダを指定)

// SqlManagerImplの場合
SqlConfig config = UroboroSQL.builder(...)
  // SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)
  .setSqlManager(new SqlManagerImpl("custom_sql")).build();

// NioSqlManagerImplの場合
SqlConfig config = UroboroSQL.builder(...)
  // SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)
  .setSqlManager(new NioSqlManagerImpl("custom_sql")).build();
1
2
3
4
5
6
7
8
9

# Spring bootでの利用 NioSqlManagerImplのみ

# v0.20.5まで

Spring boot利用時に実行可能jarにSQLファイルをリソースとして含める場合には、NioSqlManagerImplの場合、パスの指定を変更する必要があります。

例えば、classpath:sqlにSQLファイルを配置している場合は、実行可能jarで起動する際にはアプリケーション設定を利用して BOOT-INF/classes/sql のように指定してください。 なお、v0.20.5までのバージョンでは、 BOOT-INF/lib 配下のjarに含まれるSQLの読み込みができませんので、v0.21.0以降へのバージョンアップを検討してください。

# v0.21.0以降

v0.20.5までのように、実行可能jarかどうかで設定を変える必要はありません。
実行可能jarかどうかに問わず、クラスパス配下のjarのリソースを探索するように変更されているため、 BOOT-INF/classesBOOT-INF/lib のどちらに含まれているSQLファイルも読み込みが可能です。

# DB種類毎のファイルパス切り替え NioSqlManagerImplのみ

後述するDialectを利用して、1つのSQL名に対してDB種類毎にファイルパスを切り替えることが出来ます。

以下のようなファイル構成を例として説明します。

sql
  ├─employee
  │    └─select_employee.sql  -- Oracle, postgresql以外のDB用SQL
  ├─oracle
  │   └─employee
  │        └─select_employee.sql  -- oracle DB用SQL
  └─postgresql
      └─employee
           └─select_employee.sql  -- postgresql DB用SQL
1
2
3
4
5
6
7
8
9

SQL名として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

# SQLファイルの更新監視 NioSqlManagerImplのみ

NioSqlManagerImplでは、最初にSQLファイルの呼び出しがあったタイミングでSQLファイルをロードし、メモリ内にSQLをキャッシュします。 ファイル監視を有効にしている場合はキャッシュしているファイルに対してjava.nio.file.WatchServiceを利用したファイル監視を行い、 更新があった場合は自動的にリロードする仕組みを提供しています。

WARNING

ファイル監視を行うのはファイルシステム上のファイルについてのみでjarファイルやzipファイル内のファイルに対してはファイル監視は行いません。

アプリケーションの開発中など頻繁にSQLファイルを更新する場合に有効です。
ファイル監視の有無はNioSqlManagerImplの設定時に行います。

// NioSqlManagerImplの場合
SqlConfig config = UroboroSQL.builder(...)
  // SQLファイル監視を有効化(初期値はfalse)
  .setSqlManager(new NioSqlManagerImpl(true)).build();
1
2
3
4