ビジネス向けアプリケーションにこそ進めるmicro orm
TRANSCRIPT
1
ビジネス向けアプリケーションにこそ薦めるMicroORM石坂忠広http://opcdiary.net
2
皆さん?RDBMSへのアクセスってどうしてますか?
3
ADO.NETのDataSetだったり
4
Linq to SQLだったり
5
ADO.NETのEntity Frameworkだったり
6
でも満足してますか?
7
こういったフレームワークの作るクエリー文に納得いってますか?
8
クエリーヒントなんてどう与えるんだよ?
9
WHEREの左右逆じゃね?
10
システム動かさねーと INDEXの必要有無もわかんねーのか!
11そもそも、コードからテーブルを自動的に作るとかワケわからないし。
DOAなんだからテーブルが先に決まってるのが
当たり前だろ!
12
こういうことですよね?
13
俺にクエリを書かせろ!
14
DataReader最凶!!!!
15
同期実行最凶!!!
16
しかし!
17
だからって、 DataReaderではデータを入れるクラスやそのリストにデータ押し込むコードを書かなくていけなくてメンドイよね
18
わかります
19
お客さん。良いものが有ります。
注)写真はイメージです
20
MicroORM!!
21Micro ORM
うすーいレイヤーで DBへのアクセスを楽にする クエリービルディングとかしないので、クエリーはプログラマが SQL文を書く クエリーヒントのような様々テクニックを駆使できます
クエリを実行して、 DTO(Data Transfer Objectあるいは POCO) にデータ挿入するところはやってくれる
22
ということで、
24Dapper - a simple object mapper for .Net
多分 .NET一番ポピュラーなMicroORM
結果セットが帰ってくる Queryと帰ってこない実行のみの Execute二つのメソッド。 どちらも ADO.NETの Connectionの拡張メソッドとして実装されている
クエリ引数とオブジェクトプロパティとの紐付け、結果セットのフィールドとオブジェクトプロパティとの紐付けはシンプルに「名前」で解決
パフォーマンスは DataReaderとほぼ同じ。 と言うか、中は DataReader。
Stack Overflowの中の人 Sam Saffromが作った
25Dapperの導入
Nuget!
26単純なクエリーprivate static void Main(string[] args)
{
string connecttionString =
@"hogeohoge";
using (var con = new SqlConnection(connecttionString))
{
int ret;
con.Open();
//データ抽出 var logs = con.Query<Log>("SELECT Id, TimeStamp, Description FROM Log");
logs.ToList()
.ForEach(l => Console.WriteLine(
"{0}, {1}, {2}", l.Id, l.TimeStamp, l.Description));
}
}
27INSERTprivate static void Main(string[] args)
{
string connecttionString =
@"Hoge";
using (var con = new SqlConnection(connecttionString))
{
int ret;
con.Open();
//データ追加 ret = con.Execute("INSERT Log(TimeStamp, Description) VALUES(@tm, @desc)",
new { tm = DateTime.Now, desc = "Description" });
Console.WriteLine("{0}行追加しました。 ", ret);
}
}
28結果セットを返すストアードプロシージャ
//ストアードプロシージャの実行var logs = con.Query<Log>(
"GetLogs", new { param1 = DateTime.Now.AddHours(1.0) },
commandType: CommandType.StoredProcedure);
logs2.ToList().ForEach(
l => Console.WriteLine("{0}, {1}, {2}", l.Id, l.TimeStamp, l.Description));
29
あとは linqで嬲ってあげるだけ
30
すばらしい!
31Dapper以外のMicroORM
Massive https://github.com/robconery/massive
PetaPoco http://www.toptensoftware.com/petapoco
32まとめ
今まで蓄えてきた SQLの知識やクエリチューニングの技術を余すことなく投入できるので、ビジネスアプリケーション開発の現場にこそMicroORMが相応しい!!!
33
お知らせ
34
今年もやります
35
C# Advent Calendar 2013
37
No code, No life.