ZoppaDSql 1.1.1
dotnet add package ZoppaDSql --version 1.1.1
NuGet\Install-Package ZoppaDSql -Version 1.1.1
<PackageReference Include="ZoppaDSql" Version="1.1.1" />
<PackageVersion Include="ZoppaDSql" Version="1.1.1" />
<PackageReference Include="ZoppaDSql" />
paket add ZoppaDSql --version 1.1.1
#r "nuget: ZoppaDSql, 1.1.1"
#:package ZoppaDSql@1.1.1
#addin nuget:?package=ZoppaDSql&version=1.1.1
#tool nuget:?package=ZoppaDSql&version=1.1.1
説明
動的SQLはコードからSQL文を自動生成する方法が一般的と思っています。
しかし、コードから自動生成されるSQL文は細かな調整が難しいというイメージがあり、また、データベース操作が埋め込まれるので処理の検索がちょっと難しいと思います。
そのため、MybatisのXMLの動的SQLを参考にライブラリを作成しました。
以下の例をご覧ください。
Dim answer = "" &
"select * from employees
{trim}
where
{if empNo}emp_no < 20000{end if} and
({if first_name}first_name like 'A%'{end if} or
{if gender}gender = 'F'{end if})
{end trim}
limit 10".Compile(New With {.empNo = False, .first_name = False, .gender = False})
SQLを記述した文字列内に {}
で囲まれた文が制御文になります。
拡張メソッド Compile
にパラメータとなるクラスを引き渡して実行するとクラスのプロパティを読み込み、SQLを動的に構築します。
パラメータは全て False
なので、実行結果は以下のようになります。
select * from employees
limit 10
動的に生成したSQL文をDapperやEntity Frameworkで利用することができます。
また、簡単に利用するために IDbConnectionの拡張メソッド、および、シンプルなマッピング処理を用意しています。
以下の例は、パラメータのseachId
がNULL
以外ならば、ArtistId
がseachId
と等しいことという動的SQLを query
変数に格納しました。
Dim query = "" &
"select
albumid, title, name
from
albums
inner join artists on
albums.ArtistId = artists.ArtistId
where
{if seachId <> NULL }albums.ArtistId = @seachId{end if}"
次に、SQLiteのIDbConnection
の実装であるSQLiteConnection
をOpenした後、ExecuteRecordsSync
拡張メソッドを実行するとSQLの実行結果がAlbumInfo
クラスのリストで取得できます。
Dim answer As List(Of AlbumInfo)
Using sqlite As New SQLiteConnection("Data Source=chinook.db")
sqlite.Open()
answer = Await sqlite.ExecuteRecordsSync(Of AlbumInfo)(query, New With {.seachId = 11})
' answerにSQLの実行結果が格納されます
End Using
AlbumInfo
クラスの実装は以下のとおりです。
マッピングは一般的にはプロパティ、フィールドをマッピングしますが、ZoppaDSqlはSQLの実行結果の各カラムの型と一致するコンストラクタを検索してインスタンスを生成します。
Public Class AlbumInfo
Public ReadOnly Property AlbumId As Integer
Public ReadOnly Property AlbumTitle As String
Public ReadOnly Property ArtistName As String
Public Sub New(id As Long, title As String, nm As String)
Me.AlbumId = id
Me.AlbumTitle = title
Me.ArtistName = nm
End Sub
End Class
以上、簡単な説明となります。ライブラリの詳細はGithubのページを参照してください。
更新について
- 1.1.1 大量ログ出力に対応するためログ出力機能を修正
where句のtrimで論理和/論理積が消えなかったためロジック修正 - 1.1.0
Select
クエリの結果をObject
配列リストで返すExecuteArrays
メソッドを追加
一列の結果を指定の型で取得するExecuteDatas
を追加 - 1.0.9 PrimaryKeyListにSearchValueを追加して、インスタンスの関連付け処理コードを読みやすく修正
Microsoft Accessのパラメータが位置指定のため、SetOrderName
でパラメータ位置を設定できるようにしました - 1.0.8 実行結果をDataTable(
ZoppaDSqlManager.ExecuteTable
)、DynamicObject(ZoppaDSqlManager.ExecuteObject
)で取得するメソッドを追加、および、Mapper機能でDBNullをnullに変更する機能を追加 - 1.0.7 マッパー機能について、Oracle ODP.NET, Managed Driver の仕様から期待通りの動作がされない恐れがあるため
ZoppaDSqlSetting.SetParameterChecker
を追加
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.