Xojo用ORマッパーライブラリXojoORMを試す

2017.10.10  投稿者: moongift
開発

Xojoでデータベースを扱いやすくするORマッパーライブラリを紹介します。

Xojoでニーズによくあがるのがデータベースアプリケーションです。もちろんXojoではSQLite3/MySQL/PostgreSQL/Oracle/MS SQL Serverその他ODBC接続をサポートしています。しかし標準ではSQLを直接書かないといけないので開発に不慣れな方にとっては使い勝手がよくありません。

そこでGitHub上で公開されているXojoORMを紹介します。ライセンスはArtistic License 2.0となっています。

インストール

利用する際には公式サイトからZipファイルとしてダウンロード&解凍します。

解凍したら、ORM.xojo_projectを開いて、そのプロジェクト内にあるClassesフォルダと、TestsフォルダにあるCompanyクラスを自分のプロジェクトにコピーします。

これで準備完了です。

使い方

まずデータベースのテーブルに相当するモデルを作ります。例えば今回はUsersというテーブルがあるとします。テーブルの構造は以下のようになります。

  • id
    数値
  • username
    文字列
  • password
    文字列

Userというクラスを作ります。親クラスはORMです。

そしてメソッドとしてTableNameを追加します。返り値はStringで、Usersと返します。プロパティではうまくいかなかったので注意してください。

return "Users"

次にカラム毎にプロパティを作り、それぞれ計算型プロパティにします。例えばusernameのGetについては次のようにします。

return Me.Data("username")

Setは以下のようにします。

Me.Data("username") = value

つまりMe.Dataに対してカラム名でデータを扱えます。

これで準備完了です。

データの保存について

データの保存は次のように行います。データベースであることを殆ど意識せずに使えるのが便利です。

Dim pUser as User = New User
pUser.username = "goofmint"
pUser.password = "testpass"

Call pUser.Create(database1)

データの取得について

データの取得は次のように行います。DB.Findを使ってキーチェーンメソッドでSQLを構築します。最後にExecuteメソッドとデータベースを渡してあげればレコードセットが返ってきます。

pRecordSet = DB.Find.From("Users").Where("username", "LIKE", "goof%").Execute(database1)

While Not pRecordSet.EOF
  Dim pUser1 As New User(pRecordSet)
  System.DebugLog(pUser1.username)
  pRecordSet.MoveNext
WEnd

各レコードセットはそのままモデル化ができます。モデル化すれば、その後のデータ操作はとても簡単にできるでしょう。


XojoORMではこの他、リレーションを定義するHasManyやBelongsTo、HasManyThroughも用意されています。この辺りはRuby on RailsのActiveRecordから影響を受けているようです。

データベースを扱う際にSQLをコード中に書いてしまうとメンテナンス性が落ちたり、コードが複雑になりがちです。ORマッパーを使って可読性の高い状態を維持してください。

Budjhete/XojoORM: ORM is a object-relation-mapper for Xojo applications