18日目 Databaseプラグイン
地味に便利な Databaseプラグインについてです。IDEからDBを操作する機能ですが、NetBeansにも似たような機能があるし、今やさほど珍しい機能ではないですね。
そんな中でIntelliJっぽいなぁという機能について紹介します。
DDL 文からDBの定義を再現
この手の機能はDBに接続すると相場が決まっているのですが、IntelliJの場合、DDLが定義されたファイルだけでも、この機能を利用できます。
使い方は、Databaseウィンドウを開き「+」ボタンを押して "DDL Data Source"を選択。以下のようなダイアログが表示されるので,"DDL Files"の「+」ボタンを押して,任意のDDLファイルを指定します。
DB が別のネットワークにあるなどの理由で参照できないときでも、構造を可視化できて意外と助かる事が多いです。
スキーマの比較
DB専用ツールだと、そんなの出来のがあったと思いますが、実はIntelliJでも出来ました。
Databaseウィンドウで比較したいスキーマを2つ選んで、ツールバーの「Compare」を押す。
オンラインとDDLの比較なんてのもできるので,まあまあ便利です。普通のDiffと異なるのは,DDLの記述順に囚われずテーブルの比較をしてくれるので,DDLファイル同士のdiffを取るよりは,親切な結果が得られます。
Language Injection でプログラム中でもコード補完
Data Sourceが設定されている状態で,JDBC API(StatementやPrepareStatementクラスなど)にSQL文をタイプすると(うまくすると)コード補完が効きます。「うまくいくと」というのは,何か知らないけど上手く行かない事もままあるためです。
それと,JDBCではなく別のAPI(オレオレAPIだったりするかもしれません)で,SQL文の補完を有効にしたい場合は,Intension(ALT+Enter)メニューの"Language Injections Settings"から追加で設定することができます。
特定のAPIだけではなく、String型のローカル変数に対してもLanguage Injectionをかけることが出来るのですが、その場合、次のようにIntelliJ固有のアノテーションを付けなければならないのが難しいところです。:-(
アノテーション付けなくても何とかする方法もあったと思ったのですが、ちょっとその設定を特定できてません...。が、IDEA12だとアノテーションやコメントアノテーションを使わなくてもLanguage Injectionができるようです。
(追記)しおしおさんが追加調査してくれました。:-)
→ 2012-12-18
JPAについて
一応、JPAエンティティを作る機能を持っていますが、あまり洗練されてるように思えないし、正直使いづらかったです。生成されるエンティティもアノテーションごてごてで見づらかった記憶が...。このへんについてはNetBeansのほうが扱いやすいと思います。
(おまけ)DBの起動
NetBeansの組み込みJavaDBがうらやましくて、Derbyを起動・停止するだけのプラグインを作ったこともありますが、よーく考えてみると外部ツールに登録すれば済む話だったのはナイショです。:-)
→ Derbyプラグインできたよ
ps.
本家ブログでIDEA12のDatabaseプラグインの説明が出ましたね。
→ Manage Your Database Schema in IntelliJ IDEA 12 | IntelliJ IDEA Blog