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

入出力操作

Javaの出力処理について書きます。 下記リンクが非常に詳しかったので、これをもとにまとめてみたんですが、咀嚼できてないっぽい・・・・ もう1~2度修正がひつようかも。 Contents1 Javaの …

no image

instanceofとgetClassについて

Javaでの型の判定などに使われるinstance ofとgetClassについてメモしたいと思います。 Contents1 instance of2 getClass instance of A i …

no image

mysqlデータのCSV出力

ガチンコ塾のブログでもかいたのですが、行動力が大切だなーと思う今日この頃。 社長が熟練のJavaエンジニアで基本的に聞けば、基本的に解決することが多いのですが、外部の勉強会などにも出て情報収集の必要性 …

no image

JSFとManagedBeanがバインドされない

JSFとmanagedBeanはEL式.プロパティでバインドできますが、専用のタグを使わないとバインドされません。 managedBeanでtestというフィールドがあった場合、 JSF側で [cra …

no image

JPQLでの算術関数

複雑なJPQLを書いていると、通常のレコードの取り出しだけではなく、合計(SUM)や算出(COUNT)などのいわゆる算術関数を使うことが一般的です。 JPQLでもこれらを通常通り扱うことができます。 …