JetBrains IDEでデータベースを開発する

この記事は[JetBrainsIDE Advent Calendar](https://qiita.com/advent-calendar/2018/jet-brains-ide)の2日目の記事になりました。

## TL;DR
JetBrains IDEはデータベース開発においてもとても便利だったので（ただしUltimateに限る）、ideaを使ったデータベース開発の流れをまとめます。
具体的には、データソースに接続し、クエリを実行する所までを解説します。おまけでDAO開発でも補完を使う方法に触れます。
データベースやテーブルは存在し、SQLを使う前提で話を進めます。

### どの辺が便利？
コードだけでなく、テーブル・DB名にも補完が効いたり、複数のDBを切り替えながら開発したり、データベースツールウィンドウを見ながら直観的に開発できるのが便利です。
後、JetBrains IDE全般に言えることですが、これらの機能をプラットフォーム関係なく利用できるのが本当に素晴らしいです。

## データソース/データベースへの接続環境を整える
### データソースに接続する
 View > Tool Windows > Database、もしくは右サイドバーのDatabaseタブを選択し、データベースツールウィンドウを表示します。
![スクリーンショット 2018-12-12 12.22.51.png](https://qiita-image-store.s3.amazonaws.com/0/280230/43dedf97-fac3-3360-833f-62c4fc58e4ba.png)
![スクリーンショット 2018-12-12 12.26.19.png](https://qiita-image-store.s3.amazonaws.com/0/280230/8222999d-3d9b-8f36-1b50-14589429a439.png)
データベースツールウィンドウから左上の＋を選び、接続するデータソースを選択します。今回はMySqlを選択します。
![スクリーンショット 2018-12-12 12.27.56.png](https://qiita-image-store.s3.amazonaws.com/0/280230/1e900cc3-70cd-b458-4895-7c36434ced72.png)
選択すると以下ようなの設定画面が出るので、適切な情報を設定し、Test Connectionが成功すればデータソースへの接続は完了です。
ここでDatabaseを設定してあると、クエリ実行時に設定したDatabaseがデフォルトでuseされます。
状況に応じてRead-onlyを設定しておくと、データベースに変更を加えたくない時に便利です。
![スクリーンショット 2018-12-12 13.00.01.png](https://qiita-image-store.s3.amazonaws.com/0/280230/199ac28d-90c8-e8f3-b588-f8f51faf769e.png)
この設定はデータベースツールウィンドウの設定ボタンからいつでも変更できます。
![スクリーンショット 2018-12-12 13.06.28.png](https://qiita-image-store.s3.amazonaws.com/0/280230/e84fec0d-543f-594c-7733-fb01637d3523.png)

### スキーマを選ぶ
データソースへ接続した後は、使用するdatabaseを設定します。
接続が成功すると、先ほどの設定画面のSchemasタブにデータソースに存在するdatabaseが一覧で表示されるので、利用するものを選択します。
![スクリーンショット 2018-12-12 13.04.58.png](https://qiita-image-store.s3.amazonaws.com/0/280230/ee06cfcc-077d-054e-ee1c-a871901b5157.png)
ここで選択したDBは、SQLの外部キーをDBを跨いで貼る際の補完や、データベースツールウィンドウへの一覧表示で利用されます。

### 接続後
接続が完了すると以下のようになります（画像ではデータソースを2つ設定してあります）。右側に出ている「2 of 12」やらの数字はスキーマ内のDB数と先ほど選択したDB数です。
![スクリーンショット 2018-12-12 12.53.38.png](https://qiita-image-store.s3.amazonaws.com/0/280230/261ff8a3-955c-9255-ff2e-ee2ef4599104.png)

## クエリを実行する
### Diarectを設定する
SQLにはDialect（方言）が多々あるため、IDEに適切なDialectを設定しなければハイライトや補完がうまく機能しません。
ということで、Diarectを先に設定しておくことをお勧めします。
この設定については自分が書いた記事があるので、そちらを参照してください。

- [【プログラミング】JetBrains製IDEでSQLのハイライトを設定する \- wrongwrongな開発日記](https://wrongwrong163377.hatenablog.com/entry/2018/12/05/175556)

### クエリを実行する
とりあえず`testtesttest.sql`というファイルを作り、以下のようなクエリを書いてみます。

```sql:testtesttest.sql
CREATE TABLE testtesttest(
  id INT UNSIGNED NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
実行は`⌘⏎`でできます。
1ファイル内に複数のクエリがある場合は、カーソルの有る部分のクエリを実行するのか、ファイル内のクエリ全体を実行するのかを聞かれます。

#### データソース/データベースが複数ある場合
データソースが複数ある場合、どのデータソースのコンソールで実行するかを聞かれます。
また、実行するデータソース/データベースは先に設定されているものが使われるので、コンソールの状態は先に確認しておいた方が安全です。
この設定は左側のプロジェクトツールウィンドウの下の方にあるDatabase Consolesからコンソールファイルを開くことで見ることができます。
![スクリーンショット 2018-12-12 14.00.01.png](https://qiita-image-store.s3.amazonaws.com/0/280230/1e2ce2a3-f8e7-a93a-6347-ff418dbec97d.png)
コンソールでどのdatabaseがuseされているかは、コンソールファイルの右上から確認できます。ここを押すことで設定することもできます。
何も設定されていない場合\<schema\>と表示されます。
![スクリーンショット 2018-12-12 14.06.22.png](https://qiita-image-store.s3.amazonaws.com/0/280230/b018ac69-3282-d425-640f-c6866a487e4f.png)
一度クエリを実行してやると、.sqlファイルの右上にも同じようなメニューが表示されるようになります。\<schema\>の右側に表示されているのはどのコンソールが選択されているかで、こちらも変更が可能です。
![スクリーンショット 2018-12-12 14.14.02.png](https://qiita-image-store.s3.amazonaws.com/0/280230/cc68824a-3902-528f-0a61-7b462cf9297b.png)

## DAOでも補完を使う
他言語からDBへアクセスするためにクエリを書くという状況でもJetBrains IDEは便利です。
この記事の中のデータソースとDiarectの設定をし、言語インジェクションを使うことでSQLを補完してもらうことができます。
言語インジェクション関連は公式の解説ページが詳しいです。

- [言語インジェクション \- 公式ヘルプ \| IntelliJ IDEA](https://pleiades.io/help/idea/using-language-injections.html)

## 終わりに
記事は以上です。JetBrains IDEは神器。