skillup

技術ブログ

Database Java

O/Rマッパー iciqlについて

投稿日:2015年11月2日 更新日:

以前、このブログでも紹介したO/Rマッパーのiciqlについて、使い方や問題点がある程度わかったので書いておきます。

インストール

さきほどのリンクの通りです。

自動生成

JPAの場合、ネットビーンズからエンティティを自動生成できますがiciqlにも似たような機能があります。

本体のjarファイルを使って以下のようにコマンドをたたけばOKです。

具体的な引数は下記のようになります。

ちなみにもっといろいろな引数を付けられるようです。

ただ、

  • プロパティが全てpublicで出力される。
  • プロパティの並びがバラバラ(後述する問題点で致命的になる。)
  • プロパティの変数名がデータベースのカラムと一緒(スネークケースになる)

など使いにくい点が挙げられます。独自に自動生成プログラム書いたほうがいいかもです・・(汗)

注意点

簡単でいいんですが、いろいろと使いにくいところもありました。私が解決できていないだけかもしれませんが下記に列挙します。

特に日付がらみのものが多かったです。

Date型のインポート

java.util.Dateではなくjava.sql.Dateでないとエラーになります。

不正な値のレコード

もともと入っている日付のレコードに00-00-00 00:00:00などが入っていると取得時にエラーが発生します。

ちなみにエンティティを自動生成する場合、default value=”00-00-00 00:00:00″なんてアノテーションが付きますが、これもエラーになります。ついでにdefault Value=”CURRENT TIMESTAMP”も駄目です。

自動生成機能はあまりスペックが高くないかも・・・です。

executeQueryのselect文

executeQueryという直接sqlを実行できるメソッドがありますが、これで取得する場合、エンティティの順番をデータベースのカラムの順番と一緒にしておく必要があります。

どういうことかいうとテーブルのカラムが

id int
name varchar
age int

という順番で並んでおり、select id, name ,age from person・・・とsqlを実行する場合、エンティティが

などと並んでいるとエラー(nameをintegerに変換できない・・)がでます。

この場合、

と書かなくてはいけません。ちなみにselect * from ・・・などワイルドカードを使うのも駄目です。データベースのカラムの並びと統一してあげる必要があります。

これには正直驚きました。ひょっとしたらどこかで設定をいじれるのかもしれませんが・・・

時下のsqlではなく、通常のselectのメソッドを使う場合は問題ありません。

ただ簡単に使えることは間違ないですし、テストなんかもしやすいのでいい点を積極的に活用してあげましょう。

参考リンク

[Java]iciqlで簡単DBアクセス[ORマッパー]

iciqlで実現するSQL DSLとJDBCリファクタリング

設定ファイル無しで手軽・シンプルに使えるJava O/Rマッパー ICIQLの使い方

https://github.com/decebals/dada

-Database, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

アンチパターン トランザクションスコープ+大量データのリアルタイム集計+接続が詰まる

本日は主にインフラの設計的なことに関して。 Contents1 トランザクションスコープの設定1.1 デメリット1.2 対策2 大量データのリアルタイム集計2.1 デメリット2.2 対策3 詰まると接 …

no image

データベース設計のアンチパターン リトライ+バッチ分割+バッチの再利用不可

Contents1 リトライ1.1 デメリット1.2 対策2 バッチ分割2.1 デメリット2.2 対策3 バッチ再利用不可3.1 デメリット3.2 対策 リトライ ※OLTP=オンライントランザクショ …

no image

データベース設計のアンチパターン 複数表結合,大作SQL,Blob型の乱用

データベースのアンチパターンに関して。 以前下記ブログでも書いたんですが設計のスキルに関してもう少し身に着ける必要があるとおもい、チェックします。 論理設計のグレーノウハウ サロゲートキー 論理設計の …

no image

Postgresメモ(データベース、スキーマ、他pgadminなど)

postgresをちょこちょこ触っており、超基礎的な事に関してMySQLでは触れられていないネタなどについて。 以前のリンク Postgresの基礎(主にMySQLとの違いなど) Contents1 …

no image

CASE式のすすめ その3

本日もCASE式です。 下記のようなテーブル(studentclub)があるとします。 std_id | club_id | club_name | main_club_flg —&#82 …

アーカイブ