- 開発技術
SqlKataの使い方
- ASP.NET
実施内容
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
WindowsフォームアプリをASP.NET MVCにリプレイスする際にASP.NETで使用できるORマッパーとして、SqlKataの導入手順、使い方等を調査しました。
その際に実施した内容を記載します。
実施環境
.NET Framework 4.8.1,Visual C#
導入手順
Nugetを利用して、下記をインストールする。
- SqlKata
- SqlKata
QueryFactoryの作成
SqlConnectionとSqlServerCompilerからSQL実行に使用するビルダーを作成します。
※設定を追加することでマッピングするクラスのプロパティ名とテーブルカラム名のアンダースコア有無の吸収や、生成したSQLのログ出力も可能です。
1 2 3 4 5 6 7 8 9 10 |
SqlConnection Connection = new SqlConnection(BusinessContext.DefaultConnectionSetting.ConnectionString); Connection.Open(); SqlServerCompiler Compiler = new SqlServerCompiler(); QueryFactory Factory = new QueryFactory(Connection, Compiler); // カラム名のアンダースコアを無視する(マッピングするテーブルのカラム名にアンダースコアが含まれる場合に設定) Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; // SQLログを出力(SQL生成時にログ出力が必要な場合は設定) Factory.Logger = compiled => { Logger.Debug(compiled.ToString()); }; |
SELECT
SELECTについては、Select()、Where()、OrderBy()、Get()等を使用して下記のように実装可能。
※Sub QueryやJoin、Group等についても同様に用意されたメソッドを利用することで実装可能。
詳細については参考サイトに記載の公式サイト(ドキュメント)を参照。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Factory.Query("test_tbl") // 取得カラムを指定 .Select( "text" , "date" , "url" , "file_name" , "file_path" ) // SQL関数を使用した条件指定 .WhereRaw("convert(date,date) <= convert(date,getdate())") .WhereRaw("convert(date,deadline) >= convert(date,getdate())") .WhereRaw("isnull(del_flg, 0) = 0") .Where("type", "1") .OrderBy("dsp_no") // 全件取得 .Get<TblEntity>(); |
INSERT
INSERTについては、Insert()を使用して下記のように実装可能。
※複数行の一括INSERTやSELECT INSERTについても同様に用意されたメソッドを利用することで実装可能。
詳細については参考サイトに記載の公式サイト(ドキュメント)を参照。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Factory.Query("test_tbl") .Insert(new { no = tbl.No, dsp_no = tbl.DspNo, text = tbl.Text, date = tbl.Date, deadline = tbl.Deadline, url = tbl.LinkUrl, file_name = tbl.FileName, file_path = tbl.FilePath, app_date = DateTime.Now, app_user = code, upd_date = DateTime.Now, upd_user = code, del_flg = 0, type = tbl.Type, }); |
UPDATE
UPDATEについては、Update()、Where()を使用して下記のように実装可能。
※DELTEについても同様に用意されたDelete()を使用することで実装可能。
詳細については参考サイトに記載の公式サイト(ドキュメント)を参照。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Factory.Query("test_tbl") .Where("no", tbl.No) .WhereRaw("isnull(del_flg, 0) = 0") .Update(new { no = tbl.No, text = tbl.Text, date = tbl.Date, deadline = tbl.Deadline, link_url = tbl.LinkUrl, file_name = tbl.FileName, file_path = tbl.FilePath, upd_date = DateTime.Now, upd_user = code, type = tbl.Type, }); |
その他
下記のようにSQL文の実行も可能です。
1 |
Factory.Select<Int16>("SELECT NEXT VALUE FOR seq_ no;").FirstOrDefault() |
最後に
導入も簡単で、各メソッドの使い方も分かりやすく、公式サイトのドキュメントも英語のみですが整理されており、使いやすいORマッパーと感じました。
誰かの一助になれば幸いです。
参考サイト
公式サイト(ドキュメント): SqlKata | SqlKata
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>